DocsAWS 101Blog
← Back to Blog

Lambda Durable Functions, versioned S3 object tagging, CloudFormation AppConfig::Application

May 29, 2026 · v1.3.52

One major new Lambda feature, an S3 tagging refinement, and a CloudFormation resource type. All three close open GitHub issues.

Lambda Durable Functions (Durable Execution)

Full support for the AWS Lambda durable functions preview API (2025-12-01). CreateFunction accepts DurableConfig; the seven management ops CheckpointDurableExecution, GetDurableExecutionState, GetDurableExecution, GetDurableExecutionHistory, ListDurableExecutionsByFunction, and StopDurableExecution are wired to the durable execution state machine; the three external callback ops SendDurableExecutionCallbackSuccess, SendDurableExecutionCallbackFailure, and SendDurableExecutionCallbackHeartbeat resume the SDK across invocations.

A resume scheduler fires WAIT expiries, callback timeouts (Callback.Timeout / Callback.Heartbeat), and step-retry backoffs (NextAttemptDelaySeconds). State persists across MiniStack restarts — the in-memory callback index is rebuilt from restored executions on boot and pending timers are re-armed.

End-to-end verified against the official aws-durable-execution-sdk-python 1.5.0 and aws-durable-execution-sdk-java 2.44.13.

from aws_durable_execution_sdk_python.context import DurableContext
from aws_durable_execution_sdk_python.execution import durable_execution

@durable_execution
def handler(event, ctx: DurableContext) -> str:
    result = ctx.step(lambda _: "step result", name="my-step")
    return result

Deploy the function with DurableConfig.Enabled=True on CreateFunction and invoke; the durable execution log is queryable via GetDurableExecution / GetDurableExecutionHistory. External systems resolve create_callback() waits by hitting POST /2025-12-01/durable-execution-callbacks/{CallbackId}/succeed on the MiniStack endpoint. Reported by @youngkwangk.

S3 object tagging by versionId

GET / PUT / DELETE ?tagging honor the versionId query parameter, and PutObject and the POST form upload now store the x-amz-tagging header against the resulting version rather than the object key — matching AWS's versioned-tagging semantics. Reported by @barrywilks7.

CloudFormation AWS::AppConfig::Application

Create and delete provisioners for the AppConfig application resource type. The CFN dispatcher returns the AppConfig application id as the physical id and exposes ApplicationId for Fn::GetAtt. Reported by @zmartinec.

Durable Lambda validator and pagination fixes

MaxItems on ListDurableExecutionsByFunction / GetDurableExecutionState / GetDurableExecutionHistory is now bounded to the AWS-documented [0, 1000] range (out-of-range returns InvalidParameterValueException 400 instead of silently clamping). CheckpointDurableExecution rejects OperationUpdate entries with missing Id / Type / Action or with a Type outside EXECUTION / CONTEXT / STEP / WAIT / CALLBACK / CHAINED_INVOKE. StopDurableExecution on an already-terminal execution returns InvalidParameterValueException 400 per the AWS-documented "Stops a running durable execution" contract.

Upgrade

docker pull ministackorg/ministack:1.3.52
docker run -d -p 4566:4566 ministackorg/ministack:1.3.52

Or pin in compose.yaml:

services:
  ministack:
    image: ministackorg/ministack:1.3.52
    ports:
      - "4566:4566"

Stay in sync

Issues and PRs welcome on GitHub. Discussion on r/ministack.