Summary
This release adds support for Lambda durable function replay in idempotency, a new parser model for DynamoDB Stream on-failure destinations, and a fix for batch processor. We've also dropped Python 3.9 support.
A super thanks to @ConnorKirk for implementing the idempotency replay feature and @exg for the batch processor fix and DynamoDB Stream parser model 🚀🌟
Idempotency: Allow durable functions to replay
AWS Lambda durable functions enable you to build resilient multi-step applications that can execute for up to one year while maintaining reliable progress despite interruptions. When a durable function resumes from a wait point or interruption, the system performs replay - running your code from the beginning but skipping completed checkpoints.
This release adds support for durable function replay in idempotency. When using the @idempotent decorator on lambda_handler, replay is automatically detected from the DurableContext - no manual configuration needed.
from aws_lambda_powertools.utilities.idempotency import idempotent, DynamoDBPersistenceLayer, IdempotencyConfig
persistence_layer = DynamoDBPersistenceLayer(table_name="idempotency_store")
config = IdempotencyConfig(event_key_jmespath="body")
@idempotent(config=config, persistence_store=persistence_layer)
def lambda_handler(event, context):
# Replay is automatically detected when context is a DurableContext
# During replay, INPROGRESS records are handled gracefully
return {"statusCode": 200}DynamoDB Stream On-Failure Destination parser model
A new parser model DynamoDBStreamLambdaOnFailureDestinationModel is now available for parsing DynamoDB Stream on-failure destination events.
from aws_lambda_powertools.utilities.parser import parse
from aws_lambda_powertools.utilities.parser.models import DynamoDBStreamLambdaOnFailureDestinationModel
def lambda_handler(event, context):
parsed = parse(event=event, model=DynamoDBStreamLambdaOnFailureDestinationModel)
batch_info = parsed.ddb_stream_batch_info
print(f"Failed batch from shard: {batch_info.shard_id}")
print(f"Stream ARN: {batch_info.stream_arn}")Changes
🌟New features and non-breaking changes
- feat(idempotency): Allow durable functions to replay (#7764) by @ConnorKirk
📜 Documentation updates
- docs(homepage): reorganize homepage and create dedicated installation page (#7896) by @leandrodamascena
- docs(readme): update features list and improve readability (#7889) by @leandrodamascena
- feat(parser): add model for the DynamoDB Stream Lambda invocation record (#7818) by @exg
- docs(event-handler): add docstring for serializer in
BedrockAgentFunctionResolver(#7808) by @dreamorosi - docs: add EF Education First as customer reference (#7809) by @dreamorosi
- docs: clarify BedrockResponse.is_json() always returns True (#7748) by @oyiz-michael
🐛 Bug and hot fixes
- fix(batch_processor): fix batch processor (#7798) by @exg
- fix(data-classes): ensure lazy initialization for Cognito token generation response properties (#7653) by @nc-dirknilius
- fix(ci): add missing dollar signs in SSM parameter path variables (#7695) by @Iamrodos
🔧 Maintenance
- chore(ci): remove daily changelog rebuild schedule (#7897) by @leandrodamascena
- chore(ci): remove automated pre-release schedule (#7894) by @leandrodamascena
- chore(deps-dev): bump boto3-stubs from 1.42.19 to 1.42.21 (#7892) by @dependabot[bot]
- chore(deps): bump the github-actions group with 2 updates (#7893) by @dependabot[bot]
- chore(ci): improve dependabot workflow to reduce noise (#7890) by @leandrodamascena
- chore(deps-dev): bump boto3-stubs from 1.42.17 to 1.42.19 (#7873) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk-aws-lambda-python-alpha from 2.232.2a0 to 2.233.0a0 (#7868) by @dependabot[bot]
- chore(deps-dev): bump cfn-lint from 1.43.0 to 1.43.1 (#7869) by @dependabot[bot]
- chore(deps-dev): bump coverage from 7.13.0 to 7.13.1 (#7867) by @dependabot[bot]
- chore(maintenance): remove cloud development environment configurations (#7887) by @leandrodamascena
- chore(deps-dev): bump filelock from 3.20.1 to 3.20.2 (#7876) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk-lib from 2.232.2 to 2.233.0 (#7845) by @dependabot[bot]
- chore(deps): bump docker/setup-buildx-action from 3.11.1 to 3.12.0 (#7843) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.42.11 to 1.42.13 (#7844) by @dependabot[bot]
- chore(deps): bump mkdocs-material from 9.7.0 to 9.7.1 (#7838) by @dependabot[bot]
- chore(deps-dev): bump ruff from 0.14.9 to 0.14.10 (#7839) by @dependabot[bot]
- chore(deps): bump valkey-glide from 2.2.2 to 2.2.3 (#7837) by @dependabot[bot]
- chore(deps): bump mkdocs-material from 9.7.0 to 9.7.1 in /docs (#7836) by @dependabot[bot]
- chore(deps): bump squidfunk/mkdocs-material from
980e11fto3bba0a9in /docs (#7835) by @dependabot[bot] - chore(deps-dev): bump aws-cdk from 2.1100.0 to 2.1100.1 (#7830) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.42.10 to 1.42.11 (#7831) by @dependabot[bot]
- chore(deps-dev): bump isort from 6.1.0 to 7.0.0 (#7824) by @dependabot[bot]
- chore(deps-dev): bump pytest from 8.4.2 to 9.0.2 (#7826) by @dependabot[bot]
- chore(deps): bump pymdown-extensions from 10.16 to 10.16.1 in /docs (#7827) by @dependabot[bot]
- chore(deps-dev): bump ruff from 0.14.8 to 0.14.9 (#7823) by @dependabot[bot]
- chore(deps-dev): bump pytest-asyncio from 1.2.0 to 1.3.0 (#7825) by @dependabot[bot]
- chore(deps-dev): bump urllib3 from 2.5.0 to 2.6.0 in /layer_v3 (#7820) by @dependabot[bot]
- chore: drop Python3.9 support - WIP (#7807) by @leandrodamascena
- chore(ci): update layer version for all AWS partitions in docs (#7757) by @oyiz-michael
- chore(deps-dev): bump cfn-lint from 1.42.0 to 1.43.0 (#7812) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk from 2.1034.0 to 2.1100.0 (#7811) by @dependabot[bot]
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 4.0.0 to 4.0.1 (#7810) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.42.7 to 1.42.9 (#7814) by @dependabot[bot]
- chore(deps): bump datadog-lambda from 8.118.0 to 8.120.0 (#7815) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk-lib from 2.232.1 to 2.232.2 (#7816) by @dependabot[bot]
- chore(deps-dev): bump cfn-lint from 1.41.0 to 1.42.0 (#7784) by @dependabot[bot]
- chore(deps-dev): bump sentry-sdk from 2.45.0 to 2.47.0 (#7790) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk from 2.1033.0 to 2.1034.0 (#7795) by @dependabot[bot]
- chore(deps): bump actions/download-artifact from 6.0.0 to 7.0.0 (#7801) by @dependabot[bot]
- chore(deps-dev): bump types-protobuf from 6.32.1.20251105 to 6.32.1.20251210 (#7793) by @dependabot[bot]
- chore(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 (#7800) by @dependabot[bot]
- chore(deps): bump codecov/codecov-action from 5.5.1 to 5.5.2 (#7788) by @dependabot[bot]
- chore(deps): bump valkey-glide from 2.2.1 to 2.2.2 (#7802) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.42.6 to 1.42.7 (#7796) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.42.4 to 1.42.6 (#7791) by @dependabot[bot]
- chore(deps): bump protobuf from 6.33.1 to 6.33.2 (#7786) by @dependabot[bot]
- chore(deps): bump datadog-lambda from 8.116.0 to 8.118.0 (#7785) by @dependabot[bot]
- chore(deps): bump valkey-glide from 2.1.1 to 2.2.1 (#7783) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.41.2 to 1.41.5 (#7768) by @dependabot[bot]
- chore(deps-dev): bump ruff from 0.14.6 to 0.14.7 (#7770) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk-aws-lambda-python-alpha from 2.227.0a0 to 2.231.0a0 (#7767) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk-lib from 2.227.0 to 2.231.0 (#7771) by @dependabot[bot]
- chore(deps): bump actions/setup-node from 6.0.0 to 6.1.0 (#7773) by @dependabot[bot]
- chore(deps): bump actions/checkout from 6.0.0 to 6.0.1 (#7766) by @dependabot[bot]
- chore(deps): bump urllib3 from 2.5.0 to 2.6.0 in /docs (#7778) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk-aws-lambda-python-alpha from 2.225.0a0 to 2.227.0a0 (#7730) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.40.76 to 1.41.1 (#7727) by @dependabot[bot]
- chore(deps-dev): bump ruff from 0.14.5 to 0.14.6 (#7728) by @dependabot[bot]
- chore(deps-dev): bump mypy-boto3-appconfigdata from 1.40.55 to 1.41.0 in the boto-typing group (#7721) by @dependabot[bot]
- chore(deps): bump actions/checkout from 5.0.1 to 6.0.0 (#7719) by @dependabot[bot]
- chore(deps): bump actions/setup-go from 6.0.0 to 6.1.0 (#7718) by @dependabot[bot]
- chore(deps): bump mkdocs-llmstxt from 0.4.0 to 0.5.0 in /docs (#7720) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk from 2.1032.0 to 2.1033.0 (#7713) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.40.75 to 1.40.76 (#7714) by @dependabot[bot]
- chore(deps-dev): bump cfn-lint from 1.40.4 to 1.41.0 (#7709) by @dependabot[bot]
- chore(deps-dev): bump sentry-sdk from 2.44.0 to 2.45.0 (#7708) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.40.73 to 1.40.74 (#7703) by @dependabot[bot]
- chore(deps-dev): bump types-python-dateutil from 2.9.0.20251108 to 2.9.0.20251115 (#7702) by @dependabot[bot]
- chore(deps): bump actions/checkout from 5.0.0 to 5.0.1 (#7701) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk from 2.1031.2 to 2.1032.0 (#7700) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk-aws-lambda-python-alpha from 2.224.0a0 to 2.225.0a0 (#7704) by @dependabot[bot]
- chore(deps-dev): bump boto3-stubs from 1.40.72 to 1.40.73 (#7688) by @dependabot[bot]
- chore(deps): bump redis from 6.4.0 to 7.0.1 (#7687) by @dependabot[bot]
- chore(deps-dev): bump ruff from 0.14.4 to 0.14.5 (#7682) by @dependabot[bot]
- chore(deps): bump protobuf from 6.33.0 to 6.33.1 (#7681) by @dependabot[bot]
- chore(deps-dev): bump aws-cdk-aws-lambda-python-alpha from 2.223.0a0 to 2.224.0a0 (#7680) by @dependabot[bot]
This release was made possible by the following contributors:
@ConnorKirk, @Iamrodos, @T90REAL, @dependabot[bot], @dreamorosi, @exg, @github-actions[bot], @leandrodamascena, @nc-dirknilius, @oyiz-michael, dependabot[bot] and github-actions[bot]