LocalStack release v0.14.3
Summary
This LocalStack release features several improvements and new features in AWS services, a new CLI command, Python 3.10 support, and 10 new open source contributors!
AWS Services
- Support for Cloudwatch Alarms
- Improved streaming support for Lambdas which better testing of common real-time data pipelines. Read more on our blog.
- New standalone SQS provider with improved stability and performance
- Near complete implementation of the SQS Query API and new ways to create Queue URLs
- Support for .NET 6 Lambdas
- Improved OpenAPI support for API Gateway.
CLI command to update LocalStack
We have introduced a new CLI command that automatically updates LocalStack and its requirements to the latest version:
% localstack update --help
Usage: localstack update [OPTIONS] COMMAND [ARGS]...
Update LocalStack components
Options:
--help Show this message and exit.
Commands:
all Update all LocalStack components
docker-images Update container images LocalStack depends on
localstack-cli Update LocalStack CLI tools
Other notable updates
- LocalStack now runs on Python 3.10!
- Many services have now been successfully migrated to our new framework that handles AWS service requests, this dramatically improves parity and stability of services
What's Changed
Features
- add metric-alarm evaluation to Cloudwatch by @steffyP in #5897
- add on failure destination implementation and TRIM_HORIZON starting position for create-event-source-mapping by @steffyP and @SwatsonCodes in #5807
- Add localstack update command by @dfangl in #5955
- Upgrade python version to 3.10 by @dfangl in #5632
- Add dotnet 6 runtime by @yongliu-mdsol in #5815
- add SQS Query API by @thrau in #5928
- Rework ASF SQS provider for RegionBackend by @viren-nadkarni in #6016
- Apigateway OpenAPI import support for authorizers by @calvernaz in #6013
Enhancement
- LocationConstraint should be None for us-east-1 by @pinzon in #5765
- Unify Lambda Runtime using Runtime API by @dfangl in #5306
- Add newline after XML preamble in S3 responses for Serverless compatibility by @whummer in #5795
- Update ASF APIs by @localstack-bot in #5798
- Deletion of individual statments of a function policy by @pinzon in #5785
- Lambda Feature: Throw error when unzipped code exceeds maximum size (~256mb) by @RodrigoATorres in #5641
- Rework Lambda Integration tests to work against AWS as well as LocalStack by @dfangl in #5819
- Custom header x localstack authorization by @calvernaz in #5809
- Migrate DynamoDB to ASF by @whummer in #5796
- add cloudformation support for s3 bucket versioning by @dominikschubert in #5841
- adds authorizer object to lambda event by @calvernaz in #5837
- Added DYNAMODB_SHARE_DB to conf by @giograno in #5842
- Add !Ref support for KMS::Alias CloudFormation resources by @whummer in #5836
- Add additional awslocal commands for CI smoke tests by @whummer in #5845
- Update ASF APIs by @localstack-bot in #5838
- Update python to 3.8.13 by @dfangl in #5856
- add type hints to PaginatedList by @alexrashed in #5865
- [ASF] Simple Email Service migration by @viren-nadkarni in #5771
- Sns unsubscribe should send a confirmation by @pinzon in #5874
- Return successfully when attempting to delete a non-existent secret by @foxmulder900 in #5873
- Error message for PAY_PER_REQUEST billing mode by @giograno in #5877
- Update ASF APIs by @localstack-bot in #5881
- update Docker base image (python:3.8.13-slim-buster) digest to 36a1e0b by @renovate in #5880
- Add DynamoDB patch to enable more than 20 GSIs on tables by @whummer in #5883
- Upgrade moto-ext to version 3.1.6 by @whummer in #5882
- Migrate StepFunctions to ASF by @whummer in #5869
- update localstack wait command to use docker logs stream by @thrau in #5885
- get_handler_file_from_name when path contains periods by @tmbobbins in #5849
- Support nested EventBridge patterns, improve parity with AWS by @whummer in #5879
- rework localstack.http.Request object to use a dummy WSGi environment by @thrau in #5876
- add task scheduler utility by @thrau in #5857
- Refactor util to create S3 buckets with location constraints by @whummer in #5898
- Test MISSING Function with PartiQL by @giograno in #5899
- Bump moto-ext to 3.1.6.1 by @whummer in #5900
- queryStringParameters set to None when there are no GET parameters by @jops-wtakase in #5893
- Add javaagent loader for DynamoDB local process by @whummer in #5905
- add headers to dummy WSGI environment by @thrau in #5902
- Minor: Bump version of awscli for compabilibity with poetry by @whummer in #5912
- specify content type header with curl PUT request in docker-entrypoint.sh by @nao23 in #5903
- move functions to helper module by @calvernaz in #5925
- Add SES HTML body to match v2 API spec by @NickGrantX in #5920
- Add small utility for base64 URL safe decoding by @whummer in #5932
- Handling TableClass in DynamoDB by @giograno in #5923
- add decorator for adding routes to a Router by @thrau in #5927
- Remove explicit object inheritance by @dominikschubert in #5933
- Update ASF APIs by @localstack-bot in #5929
- Allow multiple bind addresses to be passed to hypercorn by @dfangl in #5937
- extend s3 virtual host addressing rules exemptions by @thrau in #5952
- Apigateway import test extension by @pinzon in #5953
- Ensure eventID is contained in DDB stream records by @whummer in #5960
- Feature log for fifo queue creating by @pinzon in #5962
- migrate cloudformation to ASF by @thrau in #5965
- simplify StsAwsApiListener JSON response modification by @thrau in #5968
- allow http.Request object to retain dashes and key casing by @thrau in #5969
- update Docker base image (python:3.8.13-slim-buster) digest to 8b65f13 by @renovate in #5971
- chore: add user survey over README by @HarshCasper in #5975
- DynamoDB Streams - code removal by @giograno in #5981
- Update README.md by @dijonkitchen in #5979
- Update ASF APIs by @localstack-bot in #5973
- Bump version of moto-ext to 3.1.8 by @whummer in #5980
- chore: add a stale bot to manage issues by @HarshCasper in #5974
- disable strict slashes for ASF REST operation router by @thrau in #5983
- add ASGI to WSGI bridge and hypercorn server abstraction by @thrau in #5970
- CI: Add CLA bot by @HarshCasper in #5993
- Utility to list loaded services by @giograno in #5996
- Update ReadMe to show support for 3.10 by @silv-io in #6002
- Enable signal handlers per default for LocalStack inside a docker container by @dfangl in #6000
- Allow docker client to modify security opts, explicit exception chaining by @dfangl in #6001
- remove unused 'reactive mode' event source listener code by @SwatsonCodes in #6004
- Apigateway ASF migration by @calvernaz in #5731
- Add support for #return macros in VTL templates by @whummer in #6010
- improve openapi import by @calvernaz in #5939
- refactor initial set of s3 tests by @thrau in #6006
- Add filter for cognito identity fields by @dfangl in #6005
- Introduce snapshot tests by @dominikschubert in #5825
- configure pytest to log DEBUG to cli by default by @thrau in #6015
- Added utility to filter a dictionary based on a TypedDict keys by @giograno in #6018
- Asf sns migration by @baermat in #5654
- [ASF] iam Migration by @MEPalma in #5818
- [ASF] events Migration by @MEPalma in #5844
- chore: Set permissions for GitHub actions by @naveensrinivasan in #6014
- Update ASF APIs by @localstack-bot in #6030
- update Docker base image (python:3.10.4-slim-buster) digest to 1678c20 by @renovate in #6029
- add workaround for s3 virtual host addressing by @thrau in #6026
- ignore GET and HEAD request body for rest-xml protocol by @thrau in #6025
- Revert "add workaround for s3 virtual host addressing (#6026)" by @dfangl in #6034
- Explicit persistence hook argument for a Service by @giograno in #6020
- Minor cleanup after events migration by @MEPalma in #6036
- Add map, quiet return functions for VTL template rendering by @whummer in #6035
- don't suppress stage variables from lambda event by @calvernaz in #6042
- simplify cloudformation ui resource by @thrau in #6047
- Bump moto-ext to 3.1.9 by @whummer in #6037
- Refactor container network connection to reuse it outside of lambda by @dfangl in #6052
- Initial CFn support for UsePreviousValue to enable idempotent CDK bootstraps by @whummer in #6053
- Update ASF APIs by @localstack-bot in #6067
- move import_rest_api patch into ASF handler by @calvernaz in #6048
- Unify SES logging format by @viren-nadkarni in #6060
- ci: add labeler action by @HarshCasper in #6068
- emit analytics event containing CLI command whenever CLI is invoked by @SwatsonCodes in #6043
- Add DISABLE_CORS_HEADERS option to disable default CORS headers by @whummer in #6073
- Handle Cloudformations empty stack updates by changing the changeset status by @dfangl in #6080
- remove delete integration patch by @calvernaz in #6074
- migrate apigateway unittest tests to pytest by @calvernaz in #6092
- sqs tag map parsing by @thrau in #6091
- add initial support for streaming in ASF scaffold and serializer by @alexrashed in #6086
- add empty-string validation for sqs user queue attributes by @thrau in #6090
- add ASF prototype for server-side parameter validation by @thrau in #6088
Fixes
- Fix
KMS_PROVIDER=kms-local
back tolocal-kms
by @davecardwell in #5793 - Minor fixes for data types handling in CloudFormation deployer by @whummer in #5794
- Fix zone-name filter in describe-availability-zones by @viren-nadkarni in #5800
- Fix S3 download of XML documents with preamble by @whummer in #5805
- fix dynamodb index query validation by @foxmulder900 in #5799
- Fix flaky tests: test_dynamodb_stream_records_with_update_item, test_rotate_secret_with_lambda_2 by @steffyP in #5826
- fix ApiGateway ASF request matching by @alexrashed in #5827
- Fixed issue with spaces in Windows user names by @us88 in #5834
- fix ASF operation routing (empty query args, deprecated ops) by @alexrashed in #5840
- Fix ResourceNotFoundException for BatchGetItem operation by @giograno in #5848
- fix queries for local secondary index on dynamodb by @steffyP in #5847
- Fix #5821 - ElasticMQ always downloaded due to incorrect cache path in Dockerfile by @wimax-grapl in #5822
- Target HttpParameters and Input support and basic auth fix for Events service by @pinzon in #5738
- fix api detection to apply custom rules and normalize CORS behaviour by @calvernaz in #5839
- fix extraction of oauth_http_parameters for api destinations by @pinzon in #5861
- Increment kinesis-mock version to 0.2.4 for validation fix by @afleishaker in #5884
- add optional .fifo suffix to sqs queue url matcher by @thrau in #5892
- Fix backdoor API provided on health endpoint by @nao23 in #5907
- Fix DynamoDB TransactGetItems action by @giograno in #5909
- Fix ExecuteTransaction action in DynamoDB by @giograno in #5918
- Minor fix to ensure that /static/ paths are properly served by the proxy by @whummer in #5917
- Fix BatchExecuteStatement action in DynamoDB by @giograno in #5919
- fix localstack.http.Request path encoding by @thrau in #5924
- Fix lambda package type and code response by @dominikschubert in #5930
- Fix ApiGW: accept yaml format for openapi(swagger) import by @pinzon in #5871
- fix invalid characters in asf rest-protocol operation router by @alexrashed in #5948
- [minor] Fix text/html Content-Type for local CloudFormation UI by @whummer in #5950
- remove Werkzeug pin after bugfix release by @alexrashed in #5954
- fix get_raw_path to unify wsgi/asgi specs by @thrau in #5956
- Fix Firehose.PutRecord to extended s3 by @pinzon in #5967
- fix op router when matching keys with slashes by @thrau in #5972
- Fix ValidationError for CloudFormation.DescribeStacks by @dominikschubert in #5978
- fix secretsmanager to use ASF instead of moto exceptions by @thrau in #5976
- fix HTTP HEAD method operation detection in ASF by @alexrashed in #5991
- fix test_cloudwatch.py mock patches by @thrau in #5984
- fix: fix cla bot by @HarshCasper in #5999
- fixed metric alarm evaluation for data points with value 0 by @steffyP in #5998
- fix http path encoding in asgi/wsgi adapter by @thrau in #6012
- fix concurrency issues of cfn and sns tests by @thrau in #6023
- Provide hotfix for CFn parameter updates and further CFn tests by @dominikschubert in #6024
- fix CLA assistant allowlist by @alexrashed in #6032
- Fix bytes size calculation with binary items by @giograno in #6027
- Fix shutdown error in pytest by waiting for LS to finish correctly by @dfangl in #6039
- fix ASF docs by sanitizing pandoc results by @alexrashed in #6045
- fix multiple authorizer creation by @calvernaz in #6049
- Restructure test fixtures/utilities by @dominikschubert in #6050
- Fix DynamoDB error injection and re-enable tests by @whummer in #6063
- Minor fixes in edge forwarder and zip utils for dev/host mode by @whummer in #6065
- fix request encoding in generic proxy listener chain and forwarding by @alexrashed in #6070
- Minor fix for CFn deletion of IAM::Role resources by @whummer in #6072
- fix pycharm unit test debug execution by renaming http package by @alexrashed in #6071
- fix ARN rewriting for DynamoDB ASF provider by @alexrashed in #6075
- fix ARN rewriting for incoming requests, fix lambda arn creation by @alexrashed in #6078
- fix test_get_queue_url_contains_request_host for pro integration by @thrau in #6079
- ci: fix the stale bot by removing bug from exempted labels by @HarshCasper in #6082
- Fix CLI usage with python 3.7 by @dfangl in #6087
- fix cleanup of event source mapping test by @alexrashed in #6094
- fix message attribute filter for SQS ReceiveMessage by @thrau in #6097
New Contributors
- @davecardwell made their first contribution in #5793
- @RodrigoATorres made their first contribution in #5641
- @foxmulder900 made their first contribution in #5799
- @us88 made their first contribution in #5834
- @afleishaker made their first contribution in #5884
- @tmbobbins made their first contribution in #5849
- @jops-wtakase made their first contribution in #5893
- @nao23 made their first contribution in #5907
- @NickGrantX made their first contribution in #5920
- @naveensrinivasan made their first contribution in #6014
Full Changelog: v0.14.2...v0.14.3