Releases: aws-powertools/powertools-lambda-python
v2.17.0
Summary
This release is full of new features and important bug fixes:
- we now treat missing idempotency keys as non-idempotent transactions (no-op)
- we now proritize the most specific route in event handler
- new event source data classes for Amazon VPC Lattice Events and AWS Config Rules
- new parser support for CloudFormation Custom Resources
- better typing support when bringing your own Logger formatter
- tons of documentation fixes and improvements
⭐ Huge thanks to new contributors: @abbasyadollahi @erikayao93 and @stephenbawks!
Idempotency
We now handle scenarios where the idempotency key might be optional by skipping the persistence storage layer operations (CRUD).
Here’s an example where uniqueness is dictated by X-Idempotency-Key
header, but it might be optional:
Imagine we have three disctinct requests, where the headers
key looks like this:
- First request:
{"headers": {"X-Idempotency-Key": "7ca32179-f88f..."}}
- Second request:
{"headers": {}}
- Third request:
{"headers": {}}
With this fix, the first request will follow the current idempotency mechanism while the second and third request will not trigger any idempotency mechanism to prevent unwanted side effects (e.g., idempotency key of None is hashed).
Prioritizing most specific routes in event handler
We made a significant change in the way routes are matched on the event handler by giving priority to the most specific routes.
Consider the following code:
With this fix, a GET request to /studies/fetch
will now match the fetch_studies
handler, even though it was declared last.
Support for VPC Lattice and AWS Config Rule events
We made it easier to work with events comming from Amazon VPC Lattice and AWS Config Rules.
Changes
🌟New features and non-breaking changes
- feat(event_sources): add AWS Config Rule event data class (#2175) by @leandrodamascena
- feat(logger): type log record in LambdaPowertoolsFormatter with TypedDict (#2419) by @erikayao93
- feat(parser): support for CloudFormation Custom Resources (#2335) by @ran-isenberg
- feat(event_sources): add support for VPC Lattice events (#2358) by @stephenbawks
📜 Documentation updates
- fix(idempotency): treat missing idempotency key as non-idempotent transaction (no-op) when raise_on_no_idempotency_key is False (#2477) by @leandrodamascena
- docs(event_sources): fix DynamoDB stream event docstring (#2468) by @abbasyadollahi
- feat(event_sources): add AWS Config Rule event data class (#2175) by @leandrodamascena
- docs(idempotency): add cdk table example (#2434) by @ran-isenberg
- feat(logger): type log record in LambdaPowertoolsFormatter with TypedDict (#2419) by @erikayao93
- feat(parser): support for CloudFormation Custom Resources (#2335) by @ran-isenberg
- docs(event_handler): improve compress example using Response class (#2426) by @heitorlessa
- docs(we-made-this): new article about idempotency design (#2425) by @heitorlessa
- feat(event_sources): add support for VPC Lattice events (#2358) by @stephenbawks
- docs(navigation): standardize link targets to enhance customer experience (#2420) by @leandrodamascena
- docs(maintainers): visual representation of release process (#2399) by @heitorlessa
🐛 Bug and hot fixes
- fix(idempotency): treat missing idempotency key as non-idempotent transaction (no-op) when raise_on_no_idempotency_key is False (#2477) by @leandrodamascena
- fix(event_handler): prioritize static over dynamic route to prevent order of route registration mismatch (#2458) by @rubenfonseca
🔧 Maintenance
- chore(deps-dev): bump mkdocs-material from 9.1.15 to 9.1.16 (#2470) by @dependabot
- chore(deps-dev): bump flake8-comprehensions from 3.12.0 to 3.13.0 (#2471) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.77.8 to 0.77.9 (#2472) by @dependabot
- chore(deps): bump aws-actions/configure-aws-credentials from 2.1.0 to 2.2.0 (#2469) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.83.1 to 2.84.0 (#2460) by @dependabot
- chore(deps-dev): bump mypy-boto3-s3 from 1.26.127 to 1.26.153 (#2452) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.77.7 to 0.77.8 (#2451) by @dependabot
- chore(deps): bump docker/setup-buildx-action from 2.6.0 to 2.7.0 (#2450) by @dependabot
- feat(logger): type log record in LambdaPowertoolsFormatter with TypedDict (#2419) by @erikayao93
- chore(deps-dev): bump pytest from 7.3.1 to 7.3.2 (#2443) by @dependabot
- chore(deps-dev): bump filelock from 3.12.0 to 3.12.2 (#2446) by @dependabot
- chore(deps-dev): bump ijson from 3.2.0.post0 to 3.2.1 (#2441) by @dependabot
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.26.115 to 1.26.152 (#2444) by @dependabot
- chore(deps): bump actions/checkout from 3.5.2 to 3.5.3 (#2431) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.83.0 to 2.83.1 (#2432) by @dependabot
- docs(navigation): standardize link targets to enhance customer experience (#2420) by @leandrodamascena
- chore(deps-dev): bump cfn-lint from 0.77.6 to 0.77.7 (#2414) by @dependabot
- chore(deps): bump pydantic from 1.10.8 to 1.10.9 (#2405) by @dependabot
- chore(deps-dev): bump sentry-sdk from 1.25.0 to 1.25.1 (#2408) by @dependabot
- chore(deps-dev): bump mypy-boto3-cloudformation from 1.26.147 to 1.26.149 (#2410) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.82.0 to 2.83.0 (#2406) by @dependabot
- chore(deps-dev): bump mypy-boto3-logs from 1.26.53 to 1.26.149 (#2409) by @dependabot
- chore(deps): bump docker/setup-qemu-action from 2.1.0 to 2.2.0 (#2404) by @dependabot
- chore(deps): bump docker/setup-buildx-action from 2.5.0 to 2.6.0 (#2403) by @dependabot
- docs(maintainers): visual representation of release process (#2399) by @heitorlessa
- chore(ci): fix PR labeling permission scope (#2396) by @heitorlessa
- chore(ci): document all github action workflows and enforce least-privilege (#2395) by @heitorlessa
This release was made possible by the following contributors:
@abbasyadollahi, @dependabot, @dependabot[bot], @erikayao93, @github-actions, @github-actions[bot], @heitorlessa, @leandrodamascena, @ran-isenberg, @rubenfonseca and @stephenbawks
v2.16.2
Summary
This patch release primarily address a regression for custom builds that remove METADATA
directory from installations, e.g., Serverless Framework with python-requirements
plugin.
We have switched to bumping versions statically as of this release - SAM, CDK, Console, and Layer customers weren't affected.
Huge thanks to @bronzeson for reporting it, and @CJTurpie for reproducing it with Serverless framework plugin.
Changes
📜 Documentation updates
- fix(parameters): AppConfigProvider when retrieving multiple unique configuration names (#2378) by @leandrodamascena
🐛 Bug and hot fixes
- fix(shared): move to static version bumping to prevent issues with customers custom builds (#2386) by @heitorlessa
- fix(parameters): AppConfigProvider when retrieving multiple unique configuration names (#2378) by @leandrodamascena
🔧 Maintenance
- chore(typing): add setLevel and addHandler to Logger for mypy/pyright (#2388) by @heitorlessa
- fix(shared): move to static version bumping to prevent issues with customers custom builds (#2386) by @heitorlessa
- chore(deps-dev): bump mypy-boto3-cloudformation from 1.26.108 to 1.26.147 (#2383) by @dependabot
- chore(deps-dev): bump mypy-boto3-lambda from 1.26.122 to 1.26.147 (#2382) by @dependabot
- chore(deps-dev): bump sentry-sdk from 1.24.0 to 1.25.0 (#2374) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.81.0 to 2.82.0 (#2373) by @dependabot
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @github-actions, @github-actions[bot], @heitorlessa and @leandrodamascena
v2.16.1
Summary
We packed this release with a bunch of new features and performance improvements:
- Support for multiple CORS origins in the event handler
- New parser support for SQS events wrapped in Kinesis Firehose
- Huge performance improvements when using the
CodePipelineJobEvent
event source - Tons of documentation enhancements on Feature Flags and Batch Processing
⭐ Huge thanks to new contributors: @roger-zhangg and @darnley!!
Support for multiple CORS origins in the event handler
Docs: Multiple CORS origins
We added support for multiple origins in CORS when defining an event handler. Supporting multiple CORS origins enables API calls from different domains and the integration of various sources. Your existing code will continue to work as it is.
New parser support for SQS events wrapped in Kinesis Firehose
SQS event notifications can sometimes be ingested into Lambda via an intermediary such as Kinesis Firehose (i.e. Lambda event source), for various architectural reasons - batching, retries, etc. However, from the Lambda function's perspective, the intermediary might not be too important; what's important is the SQS event notification itself. Now you can easily parse and access the inner payload for Kinesis Firehose-wrapped SQS events.
Huge performance improvements when using the CodePipelineJobEvent
event source
Thanks to @darnley, we found out that using the CodePipelineJobEvent
came with a performance penalty, and we fixed it by optimizing the way we load dependencies.
Documentation enhancements on Feature Flags and Batch Processing
We've completely revamped and fine-tuned all the samples and snippets for our Feature Flags and Batch Processing utilities! We took the time to bring the examples closer to real-world usage and fixed any syntax errors. We can't wait for you to try them out!
Changes
🌟New features and non-breaking changes
- feat(user-agent): add custom header User-Agent to AWS SDK requests (#2267) by @roger-zhangg
- feat(parser): add support for parsing SQS events wrapped in Kinesis Firehose (#2294) by @leandrodamascena
- feat(docs): Move docs to S3 (#2277) by @sthulb
- feat(event_handler): allow multiple CORS origins (#2279) by @rubenfonseca
📜 Documentation updates
- fix(event_source): change the import location of boto3 in CodePipelineJobEvent data class (#2353) by @darnley
- docs(project): rename project to Powertools for AWS Lambda (Python) (#2313) by @sthulb
- feat(parser): add support for parsing SQS events wrapped in Kinesis Firehose (#2294) by @leandrodamascena
- feat(docs): Move docs to S3 (#2277) by @sthulb
- feat(event_handler): allow multiple CORS origins (#2279) by @rubenfonseca
- docs(batch): add encryption at rest for SQS (#2290) by @heitorlessa
- chore(deps): update mkdocs configuration to support pymdown-extensions 10.0 (#2271) by @leandrodamascena
- docs(feature_flags): snippets split, improved, and lint (#2222) by @leandrodamascena
- docs(batch_processing): snippets split, improved, and lint (#2231) by @rubenfonseca
🐛 Bug and hot fixes
- fix(logger): remove subclassing and move unnecessary APIs (#2334) by @heitorlessa
- fix(event_source): change the import location of boto3 in CodePipelineJobEvent data class (#2353) by @darnley
🔧 Maintenance
- chore(deps-dev): bump cfn-lint from 0.77.5 to 0.77.6 (#2360) by @dependabot
- feat(user-agent): add custom header User-Agent to AWS SDK requests (#2267) by @roger-zhangg
- chore(deps): bump aws-actions/configure-aws-credentials from 2.0.0 to 2.1.0 (#2350) by @dependabot
- chore(deps): bump typing-extensions from 4.5.0 to 4.6.2 (#2345) by @dependabot
- docs(project): rename project to Powertools for AWS Lambda (Python) (#2313) by @sthulb
- chore(deps-dev): bump types-requests from 2.31.0.0 to 2.31.0.1 (#2339) by @dependabot
- chore(deps-dev): bump coverage from 7.2.6 to 7.2.7 (#2338) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.14 to 9.1.15 (#2337) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.80.0 to 2.81.0 (#2332) by @dependabot
- chore(deps-dev): bump coverage from 7.2.5 to 7.2.6 (#2326) by @dependabot
- chore(deps-dev): bump pytest-cov from 4.0.0 to 4.1.0 (#2327) by @dependabot
- chore(deps): bump actions/setup-python from 4.6.0 to 4.6.1 (#2325) by @dependabot
- chore(deps-dev): bump types-requests from 2.30.0.0 to 2.31.0.0 (#2315) by @dependabot
- chore(deps-dev): bump sentry-sdk from 1.23.1 to 1.24.0 (#2314) by @dependabot
- chore(deps): bump pydantic from 1.10.7 to 1.10.8 (#2316) by @dependabot
- chore(ci): source code tampering protection for release (#2301) by @heitorlessa
- chore(deps): bump requests from 2.28.2 to 2.31.0 (#2308) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.79.1 to 2.80.0 (#2305) by @dependabot
- chore(deps): bump fastjsonschema from 2.16.3 to 2.17.1 (#2307) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.13 to 9.1.14 (#2304) by @dependabot
- chore(deps-dev): bump httpx from 0.24.0 to 0.24.1 (#2298) by @dependabot
- chore(deps-dev): bump pytest-xdist from 3.3.0 to 3.3.1 (#2297) by @dependabot
- chore(deps-dev): bump mypy-boto3-secretsmanager from 1.26.116 to 1.26.135 (#2282) by @dependabot
- chore(deps-dev): bump sentry-sdk from 1.23.0 to 1.23.1 (#2283) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.12 to 9.1.13 (#2280) by @dependabot
- chore(governance): Fix python version in issue templates (#2275) by @leandrodamascena
- chore(deps): update mkdocs configuration to support pymdown-extensions 10.0 (#2271) by @leandrodamascena
- chore(deps): bump pymdown-extensions from 9.11 to 10.0 (#2262) by @dependabot
- chore(deps-dev): bump sentry-sdk from 1.22.2 to 1.23.0 (#2264) by @dependabot
- chore(deps): bump codecov/codecov-action from 3.1.3 to 3.1.4 (#2263) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.11 to 9.1.12 (#2253) by @dependabot
- chore(deps-dev): bump pytest-xdist from 3.2.1 to 3.3.0 (#2251) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.79.0 to 2.79.1 (#2252) by @dependabot
- chore(ci): update layer ARN docs and create PR during release (#2240) by @heitorlessa
- chore(ci): bump package version after release via pull request (#2239) by @heitorlessa
- chore(ci): convert create-pr steps into composite action (#2238) by @heitorlessa
- chore(ci): changelog rebuild (#2241) by @github-actions
- chore(deps-dev): bump aws-cdk from 2.78.0 to 2.79.0 (#2235) by @dependabot
- docs(batch_processing): snippets split, improved, and lint (#2231) by @rubenfonseca
- chore(deps-dev): bump mypy from 1.2.0 to 1.3.0 (#2233) by @dependabot
- chore(deps-dev): bump types-python-dateutil from 2.8.19.12 to 2.8.19.13 (#2234) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.9 to 9.1.11 (#2229) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.77.4 to 0.77.5 (#2228) by @dependabot
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 2.1.2 to 2.1.3 (#2227) by @dependabot
- chore(ci): skip analytics on forks (#2225) by @heitorlessa
- chore(ci): create pull request on changelog update (#2224) by @heitorlessa
- chore(deps-dev): bump mypy-boto3-cloudwatch from 1.26.99 to 1.26.127 (#2219) by @dependabot
- chore(deps-dev): bump types-requests from 2.29.0.0 to 2.30.0.0 (#2220) by @dependabot
- chore(deps-dev): bump mypy-boto3-s3 from 1.26.116 to 1.26.127 (#2218) by @dependabot
- chore(ci): schedule changelog to rebuild daily at 8am, and on release only (#2216) by @heitorlessa
- chore(ci): remove auto-merge workflow (#2214) by @heitorlessa
- chore(ci): enforce zero trust for third party workflows (#2215) by @heitorlessa
- chore(deps-dev): bump aws-cdk from 2.77.0 to 2.78.0 (#2202) by @dependabot
This release was made possible by the following contributors:
@darnley, @dependabot, @dependabot[bot], @github-actions, @github-actions[bot], @heitorlessa, @leandrodamascena, @roger-zhangg, @rubenfonseca, @sthulb and Release bot
v2.15.0
Summary
This release is packed with a number of improvements:
- New external provider formats in Logger
- New Parser models and JMESPath expressions to naturally process S3 Event Notifications targets
- Printing Event Source Data Classes now automatically mask sensitive data
- New flush_metrics in Metrics to support customers using Lambda Web Adapter
- Added support for the China and GovCloud regions in API Gateway Authorizer event (bugfix)
And… a ton of documentation improvements.
⭐ Huge thanks to new contributors: @theipster (S3 events), @neilramsay (Data Class debug), @arjanschaaf (Batch docs) and @leif-ye (API Gateway Event Source)
External provider formats in the Logger utility
Docs: Observability providers
You can now send logs to the observability provider of your choice via Lambda Extensions
. In most cases, you shouldn't need any custom Logger configuration, and logs will be shipped asynchronously with no performance impact.
Improved S3 Event Notifications developer experience
Docs: Built-in envelopes, Parser
S3 event notifications can be sometimes be ingested into Lambda via an intermediary such as an SQS queue (i.e. Lambda event source), for various architectural reasons - batching, retries, etc. However, from the Lambda function's perspective, the intermediary might not be too important; what's important is the S3 event notification itself. Now you can easily parse and access the inner payload for SQS-wrapper S3 events.
JMESPath
Parser
Printing Event Source Data Classes
Docs: Debugging
You can now print out the fields of a data class instance to obtain more information. All classes come with a __str__
method that generates a dictionary string which can be quite useful for debugging. Sensitive fields such as secret_access_key
and session_token
, are labeled as [SENSITIVE]
, to prevent any accidental disclosure of confidential information.
Flushing metrics manually
You can now manually flush the metrics at any time. This is useful when not running within a standard Lambda handler (e.g: Lambda Web Adapter), where the @log_metrics
decorator does not work as intended.
Changes
🌟New features and non-breaking changes
- feat(event_source): support custom json_deserializer; add json_body in SQSEvent (#2200) by @leandrodamascena
- feat(parser): add support for SQS-wrapped S3 event notifications (#2108) by @theipster
- feat(logger): add DatadogLogFormatter and observability provider (#2183) by @heitorlessa
- feat(jmespath): new built-in envelopes to unwrap S3 events (#2169) by @leandrodamascena
- feat(event_source): add support for dynamic partitions in the Api Gateway Authorizer event (#2176) by @leif-ye
- feat(metrics): add flush_metrics() method to allow manual flushing of metrics (#2171) by @rubenfonseca
- feat(event_sources): Add str to Data Classes base DictWrapper (#2129) by @neilramsay
- feat(ci): dispatch GitHub analytics action (#2161) by @rubenfonseca
📜 Documentation updates
- docs(examples): standardize lambda handler function name (#2192) by @leandrodamascena
- feat(parser): add support for SQS-wrapped S3 event notifications (#2108) by @theipster
- docs(we-made-this): add serverless transactional message app (#2182) by @rubenfonseca
- docs(batch): fixed typo in DynamoDB Streams section (#2189) by @arjanschaaf
- feat(logger): add DatadogLogFormatter and observability provider (#2183) by @heitorlessa
- feat(jmespath): new built-in envelopes to unwrap S3 events (#2169) by @leandrodamascena
- feat(metrics): add flush_metrics() method to allow manual flushing of metrics (#2171) by @rubenfonseca
- docs(tutorial): use newer sam cli template; update to py3.10 (#2167) by @heitorlessa
- feat(event_sources): Add str to Data Classes base DictWrapper (#2129) by @neilramsay
- docs(homepage): add customer references section (#2159) by @leandrodamascena
🔧 Maintenance
- chore(deps): bump pypa/gh-action-pypi-publish from 1.8.5 to 1.8.6 (#2201) by @dependabot
- chore(ci): use new pypi trusted publisher for increase security (#2198) by @heitorlessa
- chore(governance): add Lambda Powertools for .NET in issue templates (#2196) by @leandrodamascena
- chore(deps-dev): bump mkdocs-material from 9.1.8 to 9.1.9 (#2190) by @dependabot
- chore(deps-dev): bump types-requests from 2.28.11.17 to 2.29.0.0 (#2187) by @dependabot
- chore(deps-dev): bump coverage from 7.2.4 to 7.2.5 (#2186) by @dependabot
- chore(deps-dev): bump coverage from 7.2.3 to 7.2.4 (#2179) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.77.3 to 0.77.4 (#2178) by @dependabot
- chore(deps-dev): bump mypy-boto3-xray from 1.26.11.post1 to 1.26.122 (#2173) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.76.0 to 2.77.0 (#2174) by @dependabot
- chore(deps-dev): bump mypy-boto3-lambda from 1.26.115 to 1.26.122 (#2172) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.77.2 to 0.77.3 (#2165) by @dependabot
- docs(homepage): add customer references section (#2159) by @leandrodamascena
- chore(deps-dev): bump mkdocs-material from 9.1.6 to 9.1.8 (#2162) by @dependabot
- chore(deps-dev): bump importlib-metadata from 6.5.0 to 6.6.0 (#2163) by @dependabot
This release was made possible by the following contributors:
@arjanschaaf, @dependabot, @dependabot[bot], @heitorlessa, @leandrodamascena, @leif-ye, @neilramsay, @rubenfonseca, @theipster and Release bot
v2.14.1
Summary
This patch release addresses a regression in Batch for anyone not using Pydantic or installing Powertools via Layers.
Huge thanks to @walmsles ⭐ for spotting it and sending a fix in record time.
Changes
🌟New features and non-breaking changes
- feat(event_sources): add queue_url field in SQS EventSource DataClass (#2146) by @leandrodamascena
- feat(runtime): add support for python 3.10 (#2137) by @rubenfonseca
🐛 Bug and hot fixes
- fix(batch): resolve use of ValidationError in batch (#2157) by @walmsles
- fix(e2e): fix test brittleness (#2152) by @rubenfonseca
🔧 Maintenance
- chore(batch): safeguard custom use of BatchProcessingError exception (#2155) by @heitorlessa
- chore(deps-dev): bump aws-cdk from 2.75.1 to 2.76.0 (#2154) by @dependabot
- chore(deps): bump codecov/codecov-action from 3.1.2 to 3.1.3 (#2153) by @dependabot
- chore(deps-dev): bump mypy-boto3-s3 from 1.26.104 to 1.26.116 (#2149) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.75.0 to 2.75.1 (#2150) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.77.1 to 0.77.2 (#2148) by @dependabot
- chore(deps-dev): bump mypy-boto3-secretsmanager from 1.26.89 to 1.26.116 (#2147) by @dependabot
- chore: add Python 3.10 PyPi language classifier (#2144) by @rubenfonseca
- chore(deps-dev): bump importlib-metadata from 6.4.1 to 6.5.0 (#2141) by @dependabot
- chore(deps): bump dependabot/fetch-metadata from 1.3.6 to 1.4.0 (#2140) by @dependabot
- chore(deps-dev): bump filelock from 3.11.0 to 3.12.0 (#2142) by @dependabot
- feat(runtime): add support for python 3.10 (#2137) by @rubenfonseca
- chore(deps-dev): bump importlib-metadata from 6.3.0 to 6.4.1 (#2134) by @dependabot
- chore(deps-dev): bump mypy-boto3-lambda from 1.26.114 to 1.26.115 (#2135) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.77.0 to 0.77.1 (#2133) by @dependabot
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.26.97.post1 to 1.26.115 (#2132) by @dependabot
- chore(github): new tech debt issue form (#2131) by @heitorlessa
- chore(deps-dev): bump pytest from 7.3.0 to 7.3.1 (#2127) by @dependabot
- chore(deps-dev): bump mypy-boto3-lambda from 1.26.109 to 1.26.114 (#2126) by @dependabot
- chore(ci): add support for x86-64 regions only (#2122) by @rubenfonseca
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @heitorlessa, @leandrodamascena, @rubenfonseca, @walmsles and Release bot
v2.14.0
Summary
Duplicate: due to a GitHub glitch this notification might have appeared earlier.
This release adds support for 3.10.
Changes
🌟New features and non-breaking changes
- feat(runtime): add support for python 3.10 (#2137) by @rubenfonseca
🔧 Maintenance
- chore(deps-dev): bump filelock from 3.11.0 to 3.12.0 (#2142) by @dependabot
- feat(runtime): add support for python 3.10 (#2137) by @rubenfonseca
- chore(deps-dev): bump importlib-metadata from 6.3.0 to 6.4.1 (#2134) by @dependabot
- chore(deps-dev): bump mypy-boto3-lambda from 1.26.114 to 1.26.115 (#2135) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.77.0 to 0.77.1 (#2133) by @dependabot
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.26.97.post1 to 1.26.115 (#2132) by @dependabot
- chore(github): new tech debt issue form (#2131) by @heitorlessa
- chore(deps-dev): bump pytest from 7.3.0 to 7.3.1 (#2127) by @dependabot
- chore(deps-dev): bump mypy-boto3-lambda from 1.26.109 to 1.26.114 (#2126) by @dependabot
- chore(ci): add support for x86-64 regions only (#2122) by @rubenfonseca
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @heitorlessa, @rubenfonseca and Release bot
v2.13.0
Summary
This release improves the developer experience using the Parameters utility, fixes a bug on the CodePipeline event source and adds several documentation improvements!
⭐ Huge thanks to our new contributor @neilramsay
Improved DX on the Parameters utility
Docs: Cache TTL, SSMProvider
You can now set the POWERTOOLS_PARAMETERS_MAX_AGE
and POWERTOOLS_PARAMETERS_SSM_DECRYPT
environment variables to set defaults values for all parameters fetched by this utility. This avoids having to pass max_age
and decrypt
when you fetch several parameters.
Changes
🌟New features and non-breaking changes
- feat(parameters): Configure max_age and decrypt parameters via environment variables (#2088) by @leandrodamascena
📜 Documentation updates
- feat(parameters): Configure max_age and decrypt parameters via environment variables (#2088) by @leandrodamascena
- fix(ci): update layer version on logger, tracer and metrics docs (#2120) by @rubenfonseca
🐛 Bug and hot fixes
- fix(event_sources): Update CodePipeline event source to include optional encryption_key field and make user_parameters field optional (#2113) by @neilramsay
- fix(ci): update layer version on logger, tracer and metrics docs (#2120) by @rubenfonseca
🔧 Maintenance
- chore(deps-dev): bump flake8-comprehensions from 3.11.1 to 3.12.0 (#2124) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.73.0 to 2.74.0 (#2125) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.73.0 to 2.74.0 (#2123) by @dependabot
- chore(ci): bump the cdk-aws-lambda-powertools-layer version (#2121) by @rubenfonseca
- chore(maintenance): validate acknowledgement section is present (#2112) by @leandrodamascena
- chore(deps): bump codecov/codecov-action from 3.1.1 to 3.1.2 (#2110) by @dependabot
- chore(deps-dev): bump httpx from 0.23.3 to 0.24.0 (#2111) by @dependabot
- chore(deps-dev): bump mypy from 1.1.1 to 1.2.0 (#2096) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.76.2 to 0.77.0 (#2107) by @dependabot
- chore(deps-dev): bump pytest from 7.2.2 to 7.3.0 (#2106) by @dependabot
- chore(deps-dev): bump importlib-metadata from 6.1.0 to 6.3.0 (#2105) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.5 to 9.1.6 (#2104) by @dependabot
- chore(deps-dev): bump mypy-boto3-lambda from 1.26.80 to 1.26.109 (#2103) by @dependabot
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @djfurman, @leandrodamascena, @neilramsay, @rubenfonseca and Release bot
v2.12.0
Summary
This release improves the authoring experience for Batch processing (-boilerplate), fix a bug between Batch and Pydantic integration for poison pills, and several documentation and static typing improvements!
⭐ Huge thanks to new contributors: @michael-k (docs) and @LuckIlNe (Batch pydantic bugfix)
No more decorators for Batch Processing
Docs: Amazon SQS, Amazon Kinesis Data Streams, Amazon DynamoDB Streams
Batch feature is generally used for building more resilient data pipelines ranging from ETL to Change Data Capture to AWS automation.
This release significantly removes boilerplate and makes it less error prone to author batch processors. You can now use process_partial_response
and async_process_partial_response
within your Lambda handler to kick off processing, handle failures and return the expected response for partial failures in Lambda.
Before
After
Addressing poison pill issue with Batch and Pydantic model validation
Pydantic provides parsing and deep data validation mechanisms. It's commonly used with Batch feature to author and validate data models.
Thanks to @LuckIlNe, we now correctly handle malformed messages that fail validation early (poison pills), thus not breaking the partial failure mechanism. Previously, any record that doesn't conform with an early model validation would not fail gracefully.
Documentation improvements
Idempotency
Docs: Idempotency new diagrams, terminology, and Idempotency record expiration vs DynamoDB time-to-live (TTL).
Thanks to a discussion with @pmarko1711, we revamped the Idempotency documentation to include more sequence diagrams to visually explain the different idempotent scenarios. We also clarified terminologies like Idempotency Record, and a confusion between Idempotency Record Expiration and DynamoDB TTL.
The latter can be used as a fine-grained concurrency mechanism.
Batch
Pydantic integration examples now use the new Json
model from Pydantic to auto-deserialize JSON strings into Pydantic models. This removes excessive boilerplate when working with SQS and Kinesis Data Streams in Batch.
All examples now recommend use of process_partial_response
over the legacy decorator, including a new question in the FAQ section to clarify them.
Static typing improvements in Parser
When using Mypy for applications using Pydantic models provided by Parser, you couldn't use nested models for SQS, Kinesis, and DynamoDB Streams.
This quality of life improvement also allows you to use higher-level models like Json
to auto-deserialize JSON strings in common Lambda Event Source fields like SQS.body
.
from aws_lambda_powertools.utilities.parser import BaseModel, validator
from aws_lambda_powertools.utilities.parser.models import (
DynamoDBStreamChangedRecordModel,
DynamoDBStreamRecordModel,
KinesisDataStreamRecord,
KinesisDataStreamRecordPayload,
SqsRecordModel,
)
from aws_lambda_powertools.utilities.parser.types import Json, Literal
class Order(BaseModel):
item: dict
# SQS example
class OrderSqs(SqsRecordModel):
body: Json[Order]
# Kinesis example
class OrderKinesisPayloadRecord(KinesisDataStreamRecordPayload):
data: Json[Order]
class OrderKinesisRecord(KinesisDataStreamRecord):
kinesis: OrderKinesisPayloadRecord
# DynamoDB Streams example
class OrderDynamoDBChangeRecord(DynamoDBStreamChangedRecordModel):
NewImage: Optional[OrderDynamoDB]
OldImage: Optional[OrderDynamoDB]
class OrderDynamoDBRecord(DynamoDBStreamRecordModel):
dynamodb: OrderDynamoDBChangeRecord
Changes
🌟New features and non-breaking changes
- feat(batch): reduce boilerplate with process_partial_response (#2090) by @heitorlessa
- feat(idempotency): allow custom sdk clients in DynamoDBPersistenceLayer (#2087) by @heitorlessa
📜 Documentation updates
- docs(batch): use newly supported Json model (#2100) by @heitorlessa
- feat(batch): reduce boilerplate with process_partial_response (#2090) by @heitorlessa
- docs(homepage): remove banner for end-of-support v1 (#2098) by @leandrodamascena
- docs(idempotency): fixes to testing your code section (#2073) by @leandrodamascena
- docs(parser): fix highlighted line (#2064) by @michael-k
- docs(idempotency): new sequence diagrams, fix idempotency record vs DynamoDB TTL confusion (#2074) by @heitorlessa
🐛 Bug and hot fixes
- fix(batch): handle early validation errors for pydantic models (poison pill) #2091 (#2099) by @LuckIlNe
🔧 Maintenance
- chore(deps-dev): bump aws-cdk-lib from 2.72.1 to 2.73.0 (#2097) by @dependabot
- chore(deps-dev): bump filelock from 3.10.7 to 3.11.0 (#2094) by @dependabot
- chore(deps-dev): bump coverage from 7.2.2 to 7.2.3 (#2092) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.72.1 to 2.73.0 (#2093) by @dependabot
- chore(deps-dev): bump mypy-boto3-cloudformation from 1.26.60 to 1.26.108 (#2095) by @dependabot
- chore(deps-dev): bump types-python-dateutil from 2.8.19.11 to 2.8.19.12 (#2085) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.76.1 to 0.76.2 (#2084) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.72.0 to 2.72.1 (#2081) by @dependabot
- chore(deps): bump aws-xray-sdk from 2.11.0 to 2.12.0 (#2080) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.4 to 9.1.5 (#2077) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.72.0 to 2.72.1 (#2076) by @dependabot
- chore(deps-dev): bump mypy-boto3-s3 from 1.26.99 to 1.26.104 (#2075) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.71.0 to 2.72.0 (#2071) by @dependabot
- chore(deps): bump peaceiris/actions-gh-pages from 3.9.2 to 3.9.3 (#2069) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.71.0 to 2.72.0 (#2070) by @dependabot
- chore(deps-dev): bump black from 23.1.0 to 23.3.0 (#2066) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.70.0 to 2.71.0 (#2067) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.70.0 to 2.71.0 (#2065) by @dependabot
This release was made possible by the following contributors:
@LuckIlNe, @dependabot, @dependabot[bot], @heitorlessa, @leandrodamascena, @michael-k and Release bot
v2.11.0
Summary
This release adds support for S3 Event Notifications via EventBridge in Event Source Data Classes, and a bug fix for Feature Flags to handle falsy context values correctly.
⭐ Huge welcome to new contributors: @ajwad-shaikh and @ivica-k
S3 Event Notifications via EventBridge
A new use case is to process S3 Events with the newer and faster EventBridge integration. Previously, EventBridge integration with S3 would use CloudTrail leading up to a few minutes delays.
With the new integration, there is a slightly new payload that we had to support in order to ease that integration.
Thanks to @ivica-k, you can now use S3EventBridgeNotificationEvent
!
from aws_lambda_powertools.utilities.data_classes import S3EventBridgeNotificationEvent, event_source
from aws_lambda_powertools.utilities.typing import LambdaContext
@event_source(data_class=S3EventBridgeNotificationEvent)
def lambda_handler(event: S3EventBridgeNotificationEvent, context: LambdaContext):
bucket_name = event.detail.bucket.name
file_key = event.detail.object.key
new_storage_class = event.detail.destination_storage_class
...
Fixing falsy values in Feature Flags
Thanks to @ajwad-shaikh for reporting and fixing this bug (incl. @ran-isenberg), you can now handle flag variants when their context values are falsy, e.g., empty lists, empty strings, False
, 0, etc.
Example that wasn't possible before this release
Flag
{
"sales_offer": {
"default": false,
"rules": {
"unpaid_users": {
"when_match": true,
"conditions": [ {"action": "EQUALS", "key": "is_paid", "value": 0} ]
}
}
}
Context
{
"is_paid": 0,
}
Changes
🌟New features and non-breaking changes
📜 Documentation updates
- fix(feature_flags): make test conditions deterministic (#2059) by @ajwad-shaikh
- docs(logger): warn append_keys on not being thread-safe (#2046) by @heitorlessa
- feat(event_sources): support for S3 Event Notifications through EventBridge (#2024) by @ivica-k
🐛 Bug and hot fixes
- fix(feature_flags): make test conditions deterministic (#2059) by @ajwad-shaikh
- fix(feature_flags): handle expected falsy values in conditions (#2052) by @ran-isenberg
🔧 Maintenance
- chore(deps-dev): bump types-requests from 2.28.11.16 to 2.28.11.17 (#2061) by @dependabot
- chore(deps-dev): bump filelock from 3.10.4 to 3.10.7 (#2055) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.75.1 to 0.76.1 (#2056) by @dependabot
- chore(deps-dev): bump types-python-dateutil from 2.8.19.10 to 2.8.19.11 (#2057) by @dependabot
- chore(deps-dev): bump mypy-boto3-s3 from 1.26.97.post2 to 1.26.99 (#2054) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.3 to 9.1.4 (#2050) by @dependabot
- chore(deps-dev): bump filelock from 3.10.2 to 3.10.4 (#2048) by @dependabot
- chore(deps-dev): bump mypy-boto3-cloudwatch from 1.26.52 to 1.26.99 (#2049) by @dependabot
- chore(deps-dev): bump filelock from 3.10.1 to 3.10.2 (#2045) by @dependabot
- chore(deps-dev): bump types-requests from 2.28.11.15 to 2.28.11.16 (#2044) by @dependabot
- chore(deps-dev): bump mypy-boto3-s3 from 1.26.97 to 1.26.97.post2 (#2043) by @dependabot
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.26.97 to 1.26.97.post1 (#2042) by @dependabot
- chore(deps-dev): bump filelock from 3.10.0 to 3.10.1 (#2036) by @dependabot
- chore(deps-dev): bump aws-cdk from 2.69.0 to 2.70.0 (#2039) by @dependabot
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.26.87 to 1.26.97 (#2035) by @dependabot
- chore(deps-dev): bump mypy-boto3-s3 from 1.26.62 to 1.26.97 (#2037) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.69.0 to 2.70.0 (#2038) by @dependabot
- chore(deps): bump pydantic from 1.10.6 to 1.10.7 (#2034) by @dependabot
- chore(deps-dev): bump mypy-boto3-ssm from 1.26.77 to 1.26.97 (#2033) by @dependabot
- chore(deps-dev): bump flake8-comprehensions from 3.11.0 to 3.11.1 (#2029) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.75.0 to 0.75.1 (#2027) by @dependabot
- chore(deps-dev): bump pytest-asyncio from 0.20.3 to 0.21.0 (#2026) by @dependabot
- feat(event_sources): support for S3 Event Notifications through EventBridge (#2024) by @ivica-k
This release was made possible by the following contributors:
@ajwad-shaikh, @dependabot, @dependabot[bot], @heitorlessa, @ivica-k, @ran-isenberg and Release bot
v2.10.0
Summary
This release brings support for parsing S3 Event Notifications via EventBridge and support for custom properties on the ActiveMQ event source data class.
⭐️ Huge thanks for our first-time contributors @alexaiss and @ivica-k, and also @tibbe for the typing hot-fix!
Parsing S3 event notifications via EventBridge
Amazon S3 can send event notifications with Amazon EventBridge. We added support for parsing those events in Lambda using the new S3EventNotificationEventBridgeModel
.
Thank you @robert-malai for capturing this feature gap!
Custom properties on ActiveMQ event
When integrating with Active MQ, Lambda supports JMS custom properties. After this change, you can also access them when using the ActiveMQ event source data class.
Changes
🌟New features and non-breaking changes
- feat(event_sources): support for custom properties in ActiveMQEvent (#1999) by @alexaiss
- feat(parser): support for S3 Event Notifications via EventBridge (#1982) by @ivica-k
📜 Documentation updates
- docs(metrics): fix high-resolution metrics announcement link (#2017) by @rubenfonseca
- feat(parser): support for S3 Event Notifications via EventBridge (#1982) by @ivica-k
- docs(homepage): revamp install UX & share how we build Lambda Layer (#1978) by @heitorlessa
🐛 Bug and hot fixes
- fix(build): auto-generate setup.py for legacy build tools (#2013) by @sthulb
- fix(typing): swap NoReturn with None for methods with no return value (#2004) by @tibbe
🔧 Maintenance
- chore(deps-dev): bump cfn-lint from 0.74.3 to 0.75.0 (#2020) by @dependabot
- chore(deps-dev): bump coverage from 7.2.1 to 7.2.2 (#2021) by @dependabot
- chore(deps-dev): bump filelock from 3.9.1 to 3.10.0 (#2019) by @dependabot
- fix(build): auto-generate setup.py for legacy build tools (#2013) by @sthulb
- chore(deps-dev): bump aws-cdk from 2.67.0 to 2.69.0 (#2010) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.2 to 9.1.3 (#2009) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.74.2 to 0.74.3 (#2008) by @dependabot
- chore(deps-dev): bump filelock from 3.9.0 to 3.9.1 (#2006) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.68.0 to 2.69.0 (#2007) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.74.1 to 0.74.2 (#2005) by @dependabot
- chore(deps-dev): bump mypy from 0.982 to 1.1.1 (#1985) by @dependabot
- chore(deps-dev): bump pytest-xdist from 3.2.0 to 3.2.1 (#2000) by @dependabot
- chore(deps-dev): bump flake8-bugbear from 23.2.13 to 23.3.12 (#2001) by @dependabot
- chore(deps-dev): bump bandit from 1.7.4 to 1.7.5 (#1997) by @dependabot
- chore(deps): bump docker/setup-buildx-action from 2.4.1 to 2.5.0 (#1995) by @dependabot
- chore(deps-dev): bump mypy-boto3-secretsmanager from 1.26.49 to 1.26.89 (#1996) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.1 to 9.1.2 (#1994) by @dependabot
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.26.84 to 1.26.87 (#1993) by @dependabot
- chore(deps): bump pydantic from 1.10.5 to 1.10.6 (#1991) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.67.0 to 2.68.0 (#1992) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.74.0 to 0.74.1 (#1988) by @dependabot
- chore(deps): bump aws-actions/configure-aws-credentials from 1 to 2 (#1987) by @dependabot
- chore(deps-dev): bump pytest from 7.2.1 to 7.2.2 (#1980) by @dependabot
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 2.1.1 to 2.1.2 (#1979) by @dependabot
- chore(deps-dev): bump types-python-dateutil from 2.8.19.9 to 2.8.19.10 (#1973) by @dependabot
- chore(deps-dev): bump hvac from 1.0.2 to 1.1.0 (#1983) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.1.0 to 9.1.1 (#1984) by @dependabot
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.26.24 to 1.26.84 (#1981) by @dependabot
- chore(deps-dev): bump mkdocs-material from 9.0.15 to 9.1.0 (#1976) by @dependabot
- chore(deps-dev): bump cfn-lint from 0.67.0 to 0.74.0 (#1974) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.66.1 to 2.67.0 (#1977) by @dependabot
This release was made possible by the following contributors:
@alexaiss, @dependabot, @dependabot[bot], @heitorlessa, @ivica-k, @rubenfonseca, @sthulb, @tibbe and Release bot