Releases: aws-powertools/powertools-lambda-python
v2.2.0
Summary
This release features: (1) a new get_parameters_by_name
function to fetch multiple Parameter Store parameters from distinct paths, and (2) a new EphemeralMetrics
class for multi-tenancy and ISV use cases that require multiple metrics namespace.
Fetching distinct parameters by name
You can now fetch distinct parameters by their full name with get_parameters_by_name
.
Previously, you could only fetch multiple parameters by path via get_parameters
. We also heard from customers they'd like more flexibility when fetching parameters.
This new high level function has the following in mind:
- Per parameter config: cache parameters differently while fetching them in batch
- Decrypt all, none, or a few: transparent batch operations for when decryption is required without being worried on aggressive throttling
- Fail-fast vs graceful error handling: choose whether to fail at the error, or aggregate errors so you can handle them gracefully
Quick flow on how get_parameters_by_name
decides which System Manager Parameter Store to use based on per parameter config (or global):
┌────────────────────────┐
┌───▶ Decrypt entire batch │─────┐
│ └────────────────────────┘ │ ┌────────────────────┐
│ ├─────▶ GetParameters API │
┌──────────────────┐ │ ┌────────────────────────┐ │ └────────────────────┘
│ Split batch │───┼──▶│ No decryption required │─────┘
└──────────────────┘ │ └────────────────────────┘
│ ┌────────────────────┐
│ ┌────────────────────────┐ │ GetParameter API │
└──▶│Decrypt some but not all│──────────▶├────────────────────┤
└────────────────────────┘ │ GetParameters API │
└────────────────────┘
EphemeralMetrics
You can use EphemeralMetrics
class when looking to isolate multiple instances of metrics with distinct namespaces and/or dimensions.
from aws_lambda_powertools.metrics import EphemeralMetrics, MetricUnit
from aws_lambda_powertools.utilities.typing import LambdaContext
metrics = EphemeralMetrics()
@metrics.log_metrics
def lambda_handler(event: dict, context: LambdaContext):
metrics.add_metric(name="SuccessfulBooking", unit=MetricUnit.Count, value=1)
By default, Metrics
share metrics data across instances. This prevents common data deduplication due to CloudWatch EMF constraints on metric dimensions. However, this limits use cases where you want to create metrics for different applications within the same Lambda function, namely multi-tenancy - whether you use distinct metrics dimensions per metric or multiple metric namespaces.
There are subtle differences between the two:
Feature | Metrics | EphemeralMetrics |
---|---|---|
Share data across instances (metrics, dimensions, metadata, etc.) | Yes | - |
Default dimensions that persists across Lambda invocations (metric flush) | Yes | - |
Changes
🌟New features and non-breaking changes
- feat(parameters): add get_parameters_by_name for SSM params in distinct paths (#1678) by @heitorlessa
- feat(metrics): add EphemeralMetrics as a non-singleton option (#1676) by @heitorlessa
📜 Documentation updates
- feat(parameters): add get_parameters_by_name for SSM params in distinct paths (#1678) by @heitorlessa
- feat(metrics): add EphemeralMetrics as a non-singleton option (#1676) by @heitorlessa
🔧 Maintenance
- chore(deps-dev): bump aws-cdk-lib from 2.49.0 to 2.50.0 (#1683) by @dependabot
- feat(parameters): add get_parameters_by_name for SSM params in distinct paths (#1678) by @heitorlessa
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.25.0 to 1.26.0.post1 (#1682) by @dependabot
- chore(deps-dev): bump mypy-boto3-cloudformation from 1.25.0 to 1.26.0.post1 (#1679) by @dependabot
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @heitorlessa, Release bot
v2.1.0
Summary
This release features: (1) Logger UX enhancements, (2) New docs community section (We Made This), and (3) New issue form to accept customer references in our docs.
Big thanks to new contributors 👏: @nayaverdier (logger mypy fix), @pierskarsenbarg (Pulumi docs), and @dmwesterhoff (idempotency_function
bug finding)
Logger
Simplifying log statements for additional metadata
You can now pass any arbitrary and ephemeral metadata as keyword-arguments when logging: logging.info("Incoming payment", customer_id="...")
Previously, you had to use the extras
parameter. This ergonomics improvement makes it easier to surface keys at the root of your structured log on a per log statement basis.
This has been a long overdue and we're so so excited to have this finally out!
Use RFC3339 date format with a single flag
You can now set use_rfc3339=True
to instruct Logger to change the timestamp
key to a value compliant with both RFC3339 and ISO8601: 2022-10-27T16:27:43.738+02:00
Big thanks to @kishaningithub @JJSphar for the discussion and UX here!
New community docs section
You can now submit blog posts, workshops, videos, and sample projects featuring Lambda Powertools.
Please check out the early submitted content from our awesome community!
PS: We accept content in any language!
Become a customer reference
You can now give us permission to list your organization name in the Lambda Powertools documentation..
This helps us tremendously and new customers looking to learn who's using it. This permission is explicit for our documentation.
Changes
🌟New features and non-breaking changes
- feat(logger): add use_rfc3339 and auto-complete formatter opts in Logger (#1662) by @heitorlessa
- feat(logger): accept arbitrary keyword=value for ephemeral metadata (#1658) by @heitorlessa
- feat(layers): add layer balancer script (#1643) by @rubenfonseca
📜 Documentation updates
- feat(logger): add use_rfc3339 and auto-complete formatter opts in Logger (#1662) by @heitorlessa
- feat(logger): accept arbitrary keyword=value for ephemeral metadata (#1658) by @heitorlessa
- docs(homepage): add Pulumi code example (#1652) by @pierskarsenbarg
- docs(community): fix social handlers for Ran (#1654) by @ran-isenberg
- docs(we-made-this): new community content section (#1650) by @leandrodamascena
🐛 Bug and hot fixes
- fix(logger): fix unknown attributes being ignored by mypy (#1670) by @nayaverdier
- fix(idempotency): idempotent_function should support standalone falsy values (#1669) by @heitorlessa
- fix(deps): update build system to poetry-core (#1651) by @rubenfonseca
🔧 Maintenance
- chore(deps-dev): bump aws-cdk-lib from 2.48.0 to 2.49.0 (#1671) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.47.0 to 2.48.0 (#1664) by @dependabot
- fix(deps): update build system to poetry-core (#1651) by @rubenfonseca
- chore(deps-dev): bump flake8-variables-names from 0.0.4 to 0.0.5 (#1628) by @dependabot
- chore(deps): bump docker/setup-qemu-action from 2.0.0 to 2.1.0 (#1627) by @dependabot
- chore(deps-dev): bump pytest-asyncio from 0.16.0 to 0.20.1 (#1635) by @dependabot
- chore(deps): bump peaceiris/actions-gh-pages from 3.8.0 to 3.9.0 (#1649) by @dependabot
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @heitorlessa, @leandrodamascena, @nayaverdier, @pierskarsenbarg, @ran-isenberg, @rubenfonseca and Release bot
v2.0.0
Summary
We are extremely happy to announce the smallest release version ever - v2.0.0 🎉🎉!
The number one customer request was reducing package size. Some customers use a different tracing provider. Others used Parser (Pydantic) for data modelling and deep data validation instead of JSON Schema Validation. A few brought large machine learning models and every bit of space they can save matters.
The number two request was ARM64 support. Customers want to benefit from performance and cost savings for their workloads. However, they don’t want to invest additional time testing and compiling dependencies they use daily for ARM64.
We’ve spent the past 2 months optimizing as much as we could. We kept breaking changes to a minimum to make your transition to v2 as smooth as possible.
For backwards incompatible changes, we’ve spent considerable effort making sure they are visible, why we implemented them, and and what to do if they affect you.
Our sincerest appreciation for the community help and patience while we’ve worked on this release - Thank you ❤️!
Table of contents
- What's New in V2
- Changes
- 🌟New features and non-breaking changes
- 📜 Documentation updates
- 🐛 Bug and hot fixes
- 🔧 Maintenance
- This release was made possible by the following contributors:
What's New in V2
Python compatibility
We dropped support for Python 3.6. We highly recommend moving to the latest Python available in AWS Lambda (3.9).
Package size reduction by 97.6%
We now rely on AWS SDK available in the Lambda runtime, and all other dependencies are marked as optional.
There are subtle but important differences in the installation experience - PyPi (all optional) and Lambda Layer (all included).
PyPi
The compressed package size is now approximately 240K (previously 10M).
We updated each documentation to emphasize when an additional dependency is required (Tracer, Validation and Parser). If you prefer to install all of them, use pip install aws-lambda-powertools[all]
.
Note. If you need to use newer AWS services or features not available in the Lambda runtime provided SDK, you'll need to bundle boto3
as a dependency.
Lambda Layer
The compressed package size is now approximately 2M (previously 17M).
Lambda Layer includes all dependencies. They're also optimized for package size and speed (Pydantic now compiled with Cython for ~30-50% speed gain).
ARM Support
We now offer full support to ARM via Lambda Layer and SAR installation. All C-extension dependencies are compiled, optimized and tested against Lambda environment.
PyPi and Lambda Layer available upon release notes event
You can now safely subscribe to GitHub Release event to know when PyPi and Lambda Layer ARNs have the latest version.
Previously, PyPi, Lambda Layers, and docs were updated after a release notes went live to GitHub (~15m completion). Due to Lambda Layer compilation (x86/ARM64), this process takes on average 30m longer.
As such, we make releases prior to sharing release notes, guaranteeing for customers watching for GitHub Releases that Layer ARNs available in the documentation match PyPi releases (no more delays).
Event Handler REST new features
Multi-value header and cookies support
When returning custom responses, you now can add a list of values for a header, including cookies.
Event Handler will seamless adapt to the expected format based on resolver used, whether that is REST API, HTTP API, ALB, or Function URL.
from http import HTTPStatus
from uuid import uuid4
import requests
from aws_lambda_powertools.event_handler import (
APIGatewayRestResolver,
Response,
content_types,
)
from aws_lambda_powertools.shared.cookies import Cookie
from aws_lambda_powertools.utilities.typing import LambdaContext
app = APIGatewayRestResolver()
@app.get("/todos")
def get_todos():
todos: requests.Response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos.raise_for_status()
dummy_transactions = [f"{uuid4()}", f"{uuid4()}", f"{uuid4()}"]
multi_value_header = {"X-Transaction-Id": dummy_transactions}
return Response(
status_code=HTTPStatus.OK.value, # 200
content_type=content_types.APPLICATION_JSON,
body=todos.json()[:10],
headers=multi_value_header, # NEW
cookies=[Cookie(name="session_id", value="12345")], # NEW
)
def lambda_handler(event: dict, context: LambdaContext) -> dict:
return app.resolve(event, context)
NOTE. For ALB, you have to explicitly enable multi-value headers in the target configuration.
Trailing slash route support
APIGatewayRestResolver
now seamless support route resolution with trailing slashes: /todos/
.
Previously, requests with a trailing slash would return HTTP 404 due to route mismatch.
Note. This was not necessary for HTTP API and ALB.
Fully qualified names for Tracer subsegments
tracer.capture_method
or tracer.capture_lambda_handler
decorators now use the decorated function or method fully qualified name as the subsegment name.
This enables accurate traces for ABC or Protocol classes, where their method name will be the same but for distinct classes.
Backwards incompatible change in v2
Here’s a quick view of deprecated features removed and backwards incompatible changes.
Area | Change | Code change required | IAM Permissions change required |
---|---|---|---|
Batch | Removed legacy SQS batch processor in favour of BatchProcessor . |
Yes | - |
Environment variables | Removed legacy POWERTOOLS_EVENT_HANDLER_DEBUG in favour of [POWERTOOLS_DEV ](https://awslabs.github.io/aws-lambda-powertools-python... |
v1.31.1
Summary
This patch release is focused on Parser with SNS FIFO.
When using SNS FIFO topics, SNS removes three fields, namely: SigningCertUrl
, Signature
, and SignatureVersion
. As such, we're marking these fields as Optional
to prevent ValidationError
. Thanks to @plondino for flagging this.
NOTE: In the future, we'll be looking at creating separate FIFO Models.
Hacktoberfest
Big thanks to @digitalisx and @senmm who helped addresses typos in the documentation. Thank you for helping make the documentation better for everyone 💞!
Changes
NOTE: This release will be available in PyPi in roughly 5m, and Lambda Layers across all AWS commercial regions in ~15m.
📜 Documentation updates
- docs(governance): allow community to suggest feature content (#1593) by @heitorlessa
- docs(idempotency): "persisntence" typo (#1596) by @senmm
- docs(idempotency) - Update invalid link target. (#1588) by @eldritchideen
- docs(governance): new form to allow customers self-nominate as public reference (#1589) by @heitorlessa
- docs(logger): fix typo. (#1587) by @digitalisx
🐛 Bug and hot fixes
- fix(parser): loose validation on SNS fields to support FIFO (#1606) by @heitorlessa
🔧 Maintenance
- docs(governance): allow community to suggest feature content (#1593) by @heitorlessa
- chore(deps-dev): bump mypy-boto3-ssm from 1.24.81 to 1.24.90 (#1594) by @dependabot
- chore(deps-dev): bump flake8-builtins from 1.5.3 to 2.0.0 (#1582) by @dependabot
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @digitalisx, @eldritchideen, @heitorlessa, @rubenfonseca, @senmm and Release bot
v1.31.0
Summary
This release fixes a bug in Metrics where subsequent instances didn't share a dimensions set - Huge thanks to @cfchou for flagging it and for being super proactive in creating a test ahead of time.
This also adds support for Amazon Kinesis Firehose in Parser - big thanks to @ran-isenberg!
Changes
🌟New features and non-breaking changes
- feat(parser): add KinesisFirehoseModel (#1556) by @ran-isenberg
🐛 Bug and hot fixes
- fix(metrics): ensure dimension_set is reused across instances (pointer) (#1581) by @heitorlessa
🔧 Maintenance
- chore(deps-dev): bump types-requests from 2.28.11.1 to 2.28.11.2 (#1576) by @dependabot
- chore(deps-dev): bump typing-extensions from 4.3.0 to 4.4.0 (#1575) by @dependabot
This release was made possible by the following contributors:
@am29d, @dependabot, @dependabot[bot], @heitorlessa, @ran-isenberg and Release bot
v1.30.0
Summary
This release adds support for (1) Lambda context in Batch processing, (2) Context sharing support in REST and GraphQL APIs, and (3) Consolidate features to make prototyping local/non-prod environments easier. Bug fixes and other minor improvements are at the bottom.
Accessing Lambda context in Batch processing
You can now opt-in to receive a Lambda context object if your function has a parameter named lambda_context
.
This unlocks long-running data pipelines, where you need to know how much time you have left before your function times out - thanks to @mew1033 for the feature request.
from typing import Optional
from aws_lambda_powertools.utilities.batch import (BatchProcessor, EventType,
batch_processor)
from aws_lambda_powertools.utilities.data_classes.sqs_event import SQSRecord
from aws_lambda_powertools.utilities.typing import LambdaContext
processor = BatchProcessor(event_type=EventType.SQS) # or DynamoDB, Kinesis
# lambda_context will be populated at runtime
def record_handler(record: SQSRecord, lambda_context: Optional[LambdaContext] = None): ...
@batch_processor(record_handler=record_handler, processor=processor)
def lambda_handler(event, context: LambdaContext):
return processor.response()
New context support in Event Handler (REST and GraphQL)
You can now inject contextual information before or during event routing. This is the precursor to Middleware support in Event Handler. This unlocks two common use cases:
- You split routes using
Router()
feature, and you need to pass data fromApp()
without running into potential circular import issues - You have custom logic to run before every event, and want to expose the result to any registered route with minimal effort
Thanks to @MaartenUreel for the feature request, and @benbridts, @gwlester, and @walmsles for the discussion to get to an optimal UX.
UX
Entrypoint: app.py
import todos
from aws_lambda_powertools.event_handler import APIGatewayRestResolver
from aws_lambda_powertools.utilities.typing import LambdaContext
app = APIGatewayRestResolver()
app.include_router(todos.router)
def lambda_handler(event: dict, context: LambdaContext) -> dict:
app.append_context(is_admin=True) # arbitrary number of key=value data
return app.resolve(event, context)
todos.py
import requests
from requests import Response
from aws_lambda_powertools.event_handler.api_gateway import Router
ENDPOINT = "https://jsonplaceholder.typicode.com/todos"
router = Router()
@router.get("/todos")
def get_todos():
is_admin: bool = router.context.get("is_admin", False)
todos = {}
if is_admin:
todos: Response = requests.get(ENDPOINT)
todos.raise_for_status()
todos = todos.json()[:10]
return {"todos": todos}
Optimizing for non-production environments
Thanks to @pmarko1711, Logger now uses pretty-print when you set POWERTOOLS_DEV=1
environment variable. This also helps us consolidate features where we can make it easier to prototype locally or against a non-production environment.
Debug mode simplified
When raising bug reports, you can now get Lambda Powertools debug logs with POWERTOOLS_DEBUG=1
. Previously, you had to change your source code to explicitly enable debugging in Powertools.
Changes
🌟New features and non-breaking changes
- feat(logger): introduce POWERTOOLS_DEBUG for internal debugging (#1572) by @heitorlessa
- feat(logger): include logger name attribute when copy_config_to_registered_logger is used (#1568) by @heitorlessa
- feat(event-handler): context support to share data between routers (#1567) by @heitorlessa
- feat(batch): inject lambda_context if record handler signature accepts it (#1561) by @heitorlessa
- feat(logger): pretty-print JSON when POWERTOOLS_DEV is set (#1548) by @pmarko1711
📜 Documentation updates
- docs(homepage): introduce POWERTOOLS_DEV env var (#1569) by @heitorlessa
- docs(parser): add JSON string field extension example (#1526) by @rubenfonseca
🐛 Bug and hot fixes
- fix(apigateway): update Response class to require status_code only (#1560) by @heitorlessa
- fix(event_sources): implement Mapping protocol on DictWrapper for better interop with existing middlewares (#1516) by @Tankanow
- fix(typing): level arg in copy_config_to_registered_loggers (#1534) by @kbakk
🔧 Maintenance
- chore(multiple): localize powertools_dev env logic and warning (#1570) by @heitorlessa
- chore(deps-dev): bump types-requests from 2.28.11 to 2.28.11.1 (#1571) by @dependabot
- chore(deps): bump dependabot/fetch-metadata from 1.3.3 to 1.3.4 (#1565) by @dependabot
- chore(deps-dev): bump mkdocs-material from 8.5.3 to 8.5.4 (#1563) by @dependabot
- chore(deps-dev): bump mypy-boto3-secretsmanager from 1.24.54 to 1.24.83 (#1557) by @dependabot
- chore(deps-dev): bump pytest-cov from 3.0.0 to 4.0.0 (#1551) by @dependabot
- chore(deps-dev): bump flake8-bugbear from 22.9.11 to 22.9.23 (#1541) by @dependabot
- fix(event_sources): implement Mapping protocol on DictWrapper for better interop with existing middlewares (#1516) by @Tankanow
- chore(deps-dev): bump mypy-boto3-ssm from 1.24.80 to 1.24.81 (#1544) by @dependabot
- chore(deps-dev): bump mypy-boto3-ssm from 1.24.69 to 1.24.80 (#1542) by @dependabot
- chore(deps-dev): bump mako from 1.2.2 to 1.2.3 (#1537) by @dependabot
- chore(deps-dev): bump types-requests from 2.28.10 to 2.28.11 (#1538) by @dependabot
- chore(deps): bump email-validator from 1.2.1 to 1.3.0 (#1533) by @dependabot
- chore(deps-dev): bump mkdocs-material from 8.5.1 to 8.5.3 (#1532) by @dependabot
- chore(deps): bump fastjsonschema from 2.16.1 to 2.16.2 (#1530) by @dependabot
- chore(deps): bump codecov/codecov-action from 3.1.0 to 3.1.1 (#1529) by @dependabot
- chore(deps): bump actions/setup-python from 3 to 4 (#1528) by @dependabot
- chore(deps-dev): bump mypy-boto3-s3 from 1.24.36.post1 to 1.24.76 (#1531) by @dependabot
This release was made possible by the following contributors:
@Tankanow, @dependabot, @dependabot[bot], @heitorlessa, @kbakk, @pmarko1711, @rubenfonseca
v1.29.2
Summary
This patch release fixes a bug in the Serverless Application Repository (SAR) Extras Layer for customers using Parser/Pydantic, where the module wasn't available.
Changes
🐛 Bug and hot fixes
- fix(deps): bump dev dep mako version to address CVE-2022-40023 (#1524) by @rubenfonseca
- fix(internal): SAR layer build not including pydantic (#1519) by @am29d
🔧 Maintenance
- fix(deps): bump dev dep mako version to address CVE-2022-40023 (#1524) by @rubenfonseca
- chore(deps): bump release-drafter/release-drafter from 5.20.1 to 5.21.0 (#1520) by @dependabot
- chore(deps-dev): bump mkdocs-material from 8.5.0 to 8.5.1 (#1521) by @dependabot
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.24.60 to 1.24.74 (#1522) by @dependabot
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @rubenfonseca and Release bot
v1.29.1
Due to a problem with the release pipeline, we had to yank the v1.29.0 release from PyPI. To fix the problem we are releasing v1.29.1 with no additional changes.
Summary
This release adds a new major integration with Apache Kafka (both Amazon Managed Streaming for Apache Kafka (MSK) and self-managed clusters). We also extended the Event Source Data Classes to support CloudWatch dashboard custom widgets.
Apache Kafka
Powertools can now seamlessly consume events sourced from Apache Kafka (MSK, self-managed). Apache Kafka as an event source operates similarly to using Amazon Simple Queue Service (Amazon SQS) or Amazon Kinesis.
You can easily consume a Kafka event by using the KafkaEvent
Data Class:
If you want extra flexibility and validation, you can also use the Pydantic models KafkaMskEventModel
(for Apache MSK) and KafkaSelfManagedEventModel
(for self-managed clusters):
If your Kafka event payload has a known structure, you could also leverage the KafkaEnvelope
model.
Thank you @lyoung-confluent and @ran-isenberg for your contribution!
🌟 Would you like to see more integrations between Apache Kafka and Lambda Powertools? Drop us a line in the python channel of our Discord.
CloudWatch dashboards custom widgets
We also added support for handling events generated by CloudWatch dashboard custom widgets:
Big thanks to @sthuber90 for your contribution!
Changes
🌟New features and non-breaking changes
- feat(parser): add KafkaMskEventModel and KafkaSelfManagedEventModel (#1499) by @ran-isenberg
- feat(data-classes): add KafkaEvent and KafkaEventRecord (#1485) by @lyoung-confluent
- feat(event_sources): add CloudWatch dashboard custom widget event (#1474) by @sthuber90
- chore(ci): add workflow to suggest splitting large PRs (#1480) by @heitorlessa
📜 Documentation updates
- feat(parser): add KafkaMskEventModel and KafkaSelfManagedEventModel (#1499) by @ran-isenberg
- feat(data-classes): add KafkaEvent and KafkaEventRecord (#1485) by @lyoung-confluent
- feat(event_sources): add CloudWatch dashboard custom widget event (#1474) by @sthuber90
🔧 Maintenance
- chore(deps): bump flake8-bugbear from 22.8.23 to 22.9.11 (#1512) by @dependabot
- chore(deps): bump mkdocs-material from 8.4.3 to 8.4.4 (#1513) by @dependabot
- chore(deps): bump types-requests from 2.28.9 to 2.28.10 (#1508) by @dependabot
- chore(deps): bump aws-cdk-aws-apigatewayv2-integrations-alpha from 2.40.0a0 to 2.41.0a0 (#1510) by @dependabot
- chore(deps-dev): bump mypy-boto3-ssm from 1.24.39.post2 to 1.24.69 (#1509) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.40.0 to 2.41.0 (#1507) by @dependabot
- chore(deps-dev): bump aws-cdk-aws-apigatewayv2-integrations-alpha from 2.39.1a0 to 2.40.0a0 (#1496) by @dependabot
- chore(deps-dev): bump mkdocs-material from 8.4.2 to 8.4.3 (#1504) by @dependabot
- chore(deps): bump pydantic from 1.10.1 to 1.10.2 (#1502) by @dependabot
- chore(deps-dev): bump pytest from 7.1.2 to 7.1.3 (#1497) by @dependabot
- chore(deps-dev): bump black from 22.6.0 to 22.8.0 (#1494) by @dependabot
- chore(deps-dev): bump aws-cdk-lib from 2.39.1 to 2.40.0 (#1495) by @dependabot
- chore(maintenance): add discord link to first PR and first issue (#1493) by @rubenfonseca
- chore(deps): bump pydantic from 1.10.0 to 1.10.1 (#1491) by @dependabot
- chore(deps-dev): bump flake8-variables-names from 0.0.4 to 0.0.5 (#1490) by @dependabot
- chore(deps-dev): bump mkdocs-material from 8.4.1 to 8.4.2 (#1483) by @dependabot
- chore(ci): create reusable docs publishing workflow (#1482) by @heitorlessa
- chore(deps-dev): bump mypy-boto3-dynamodb from 1.24.55.post1 to 1.24.60 (#1481) by @dependabot
- chore(ci): add workflow to suggest splitting large PRs (#1480) by @heitorlessa
- chore(ci): add linter for GitHub Actions as pre-commit hook (#1479) by @heitorlessa
- chore(deps-dev): bump black from 21.12b0 to 22.8.0 (#1515) by @dependabot
- chore(deps-dev): bump mkdocs-material from 8.4.4 to 8.5.0 (#1514) by @dependabot
- chore(ci): add linter for GitHub Actions as pre-commit hook (#1479) by @heitorlessa
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @heitorlessa, @leandrodamascena, @lyoung-confluent, @ran-isenberg, @rubenfonseca, @sthuber90 and Release bot
v1.28.0
Summary
This release brings major updates: upcoming v2 to drop Python 3.6 support, Lambda Function URL support in Parser(Pydantic), and.... 🥁 🥁 🥁 our new public Discord Server - join us
Oh hey, please welcome Leandro as our new full-time maintainer - @leandrodamascena🎉
Lambda Function URL support in Parser
This release adds support for Lambda Function URL for Parser (Pydantic Model) - big thanks to @ran-isenberg. It extends the work previously done in v1.27.0 for Event Source Data Classes.
Upcoming v2 and breaking changes
We’ve got a new RFC for our first major version v2.0.0 - aiming to end of September. We’re striving to make the bare minimum breaking changes given the timeframe we have. Please get acquainted with the breaking changes (e.g., legacy sqs_batch_processor
, Event Handler to support multi-value headers) and do share your feedback.
Improved documentation code snippets
We know that a good documentation is critical for adopting any open-source project. We continue to make progress in rewriting code snippets to be more realistic, and apply our code quality standards like we do for any other change.
In this release, we've refactored the JMESPath Functions,, Validation, Typing, and Middleware factory documentation to include real examples of using these features. You can follow progress on upcoming refactoring in our board of activities.
👀 Take a look at this gigantic yet realistic all-in-one middleware combining Powertools features.
Here’s a sneak peek:
End-to-testing (E2E)
We’ve published our internal framework to create and run E2E testing via GitHub Actions. This allow us to start working on further complement our functional testing, and soon begin wider coverage on integration tests. We’ll be documenting how customers can contribute E2E soon - you can find the internal details here.
Changes
🌟New features and non-breaking changes
- feat(parser): add support for Lambda Function URL (#1442) by @ran-isenberg
📜 Documentation updates
- docs(typing): snippets split, improved, and lint (#1465) by @leandrodamascena
- docs(middleware-factory): snippets split, improved, and lint (#1451) by @leandrodamascena
- chore(batch): deprecate sqs_batch_processor (#1463) by @rubenfonseca
- docs(validation): snippets split, improved, and lint (#1449) by @leandrodamascena
- feat(parser): add support for Lambda Function URL (#1442) by @ran-isenberg
- chore(deps): bump pydantic from 1.9.1 to 1.9.2 (#1448) by @dependabot
- docs(jmespath_util): snippets split, improved, and lint (#1419) by @leandrodamascena
🐛 Bug and hot fixes
- fix(ci): calculate parallel jobs based on infrastructure needs (#1475) by @heitorlessa
🔧 Maintenance
- chore(ci): prevent concurrent git update in critical workflows (#1478) by @heitorlessa
- fix(ci): calculate parallel jobs based on infrastructure needs (#1475) by @heitorlessa
- chore(deps-dev): bump flake8-bugbear from 22.8.22 to 22.8.23 (#1473) by @dependabot
- chore(tests): enable end-to-end test workflow (#1470) by @heitorlessa
- chore(governance): add Leandro as maintainer (#1468) by @leandrodamascena
- chore(tests): build and deploy Lambda Layer stack once (#1466) by @heitorlessa
- chore(batch): deprecate sqs_batch_processor (#1463) by @rubenfonseca
- chore(tests): refactor E2E logger to ease maintenance, writing tests and parallelization (#1460) by @heitorlessa
- docs(validation): snippets split, improved, and lint (#1449) by @leandrodamascena
- chore(tests): refactor E2E tracer to ease maintenance, writing tests and parallelization (#1457) by @heitorlessa
- chore(deps): bump release-drafter/release-drafter from 5.20.0 to 5.20.1 (#1458) by @dependabot
- chore(deps): bump pydantic from 1.9.1 to 1.9.2 (#1448) by @dependabot
This release was made possible by the following contributors:
@am29d, @dependabot, @dependabot[bot], @heitorlessa, @leandrodamascena, @peterschutt, @ran-isenberg, @rubenfonseca, @sthuber90 and Release bot
v1.27.0
Summary
This is our feature release after our extended pause, we couldn't be more excited to bring you: Lambda Function URL, Metrics now supports up to 29 dimensions, and Pre-configured GitPod.io dev environment for contributors.
Huge thanks to a new contributor: @leandrodamascena
Event Handler - Lambda Function URL
You can now use LambdaFunctionUrlResolver
to seamless develop with Lambda Function URL. Developer experience remains exactly the same for other REST Event Handlers, making it easier to switch between Application Load Balancer, and API Gateway (REST and HTTP) APIs.
Correlation ID support and documentation have been documented accordingly - here's how it looks like!
Improved onboarding to first contribution
For new contributors and those new to Python, @leandrodamascena contributed a pre-configured Cloud-based development environment based on Gitpod.io product. When visiting our contribution guide, you will now see a link to instantly spin up a dev environment pre-configured with all dependencies, linters, and git pre-commit hooks to fast track reviews.
Increasing Metrics dimension limit to 29
Amazon CloudWatch Metrics made tons of improvements 2 days ago. This release takes advantage of the new metric dimension to increase our validation limit to 29 (MAX-1). By default, we add a service
dimension to more easily identify metrics for a given service, hence the limit being 29 and not 30.
Next release
We plan on closing the gap on releases with Lambda Layer versioning by automatically generating documentation for all regions. This means publishing 5 additional regions customers asked for support and making it easier to find out which Lambda Layer has which PyPi version. Beyond that, docs and Event Handler improvements, and maybe a surprise if time allows.
Changes
🌟New features and non-breaking changes
- feat(metrics): update max user-defined dimensions from 9 to 29 (#1417) by @leandrodamascena
- feat(ci): create reusable changelog generation (#1418) by @heitorlessa
- feat(event_handlers): Add support for Lambda Function URLs (#1408) by @rubenfonseca
📜 Documentation updates
- feat(metrics): update max user-defined dimensions from 9 to 29 (#1417) by @leandrodamascena
- feat(event_handlers): Add support for Lambda Function URLs (#1408) by @rubenfonseca
- chore(docs): remove pause sentence from roadmap (#1409) by @rubenfonseca
🐛 Bug and hot fixes
- fix(event_sources): add test for Function URL AuthZ (#1421) by @rubenfonseca
🔧 Maintenance
- fix(event_sources): add test for Function URL AuthZ (#1421) by @rubenfonseca
- chore(deps): bump constructs from 10.1.1 to 10.1.66 (#1414) by @dependabot
- chore(docs): remove pause sentence from roadmap (#1409) by @rubenfonseca
- chore(governance): remove devcontainer in favour of gitpod.io (#1411) by @leandrodamascena
- chore(governance): add pre-configured dev environment with GitPod.io to ease contributions (#1403) by @leandrodamascena
- chore(deps): bump constructs from 10.1.1 to 10.1.65 (#1407) by @dependabot
- chore(deps-dev): bump types-requests from 2.28.6 to 2.28.7 (#1406) by @dependabot
- chore(deps): bump constructs from 10.1.1 to 10.1.64 (#1405) by @dependabot
- chore(deps): bump attrs from 21.4.0 to 22.1.0 (#1397) by @dependabot
- chore(deps): bump constructs from 10.1.1 to 10.1.63 (#1402) by @dependabot
- chore(deps-dev): bump types-requests from 2.28.5 to 2.28.6 (#1401) by @dependabot
- chore(deps): bump constructs from 10.1.1 to 10.1.60 (#1399) by @dependabot
- chore(deps): bump jsii from 1.57.0 to 1.63.2 (#1400) by @dependabot
This release was made possible by the following contributors:
@dependabot, @dependabot[bot], @heitorlessa, @leandrodamascena, @rubenfonseca, Docs and Release bot