Summary
LocalStack 4.7 is now available! This release introduces native Organizations support for multi-account setups, Valkey engine support as a Redis alternative in ElastiCache/MemoryDB, AppSync Events API for real-time WebSocket subscriptions, and significant enhancements across CodeBuild, CloudTrail, EKS, and DynamoDB providers with improved AWS parity throughout.
AWS Features
- LocalStack now supports the Valkey engine as an alternative to Redis in ElastiCache (🌟 base) and MemoryDB (🌟 ultimate). To enable Valkey, you need to use the
REDIS_CONTAINER_MODE=1configuration variable while starting the LocalStack container. - LocalStack now includes a native Organizations provider, replacing the legacy Moto-based implementation. This new provider introduces improved AWS parity and expands support for managing multi-account and multi-organization setups in a local environment. (🌟 ultimate)
- LocalStack now supports the AppSync Events API for real-time event subscriptions, featuring channel namespaces, API Key/IAM authentication, and Direct Lambda integration. It provides both domain-based and path-based endpoints for local development, as well as HTTP interfaces for backend event publishing. (🌟 ultimate)
Enhancements
- Kinesis provider has been upgraded to use
kinesis-mockversion0.4.13. - DynamoDB provider has been upgraded to use DynamoDB Local
3.0.0. - Hive version
3.1.3is now the default for Big Data services, such as EMR, Glue, and Athena. (🌟 ultimate) - CodeBuild provider now includes the following enhancements: (🌟 base)
- CodeBuild now assumes the configured IAM service role during builds, enabling use of AWS CLI commands without manual credential setup.
- Additionally, CodeBuild automatically sets environment variables for region, and endpoint URL into the build container. The endpoint URL is configured to point to the LocalStack container, allowing jobs to access other emulated AWS services.
- CloudTrail provider now includes the following enhancements: (🌟 ultimate)
- CloudTrail now delivers log delivery notifications to SNS after logs are written to S3.
- CloudTrail events now contain the populated
requestParametersandresponseElementsfields for most events.
- EKS provider now includes the following enhancements: (🌟 ultimate)
- Support for k8s version
1.33is now available. The default version also changed to1.33 - EKS Load Balancer Controller with
target-modeset toipis now supported. - Support for
DescribeClusterVersionsAPI for improved compatibility with IaC tooling.
- Support for k8s version
- Support for the
cognito-identity.amazonaws.com:subIAM policy variable has been added. (🌟 base) - Role ARN and session name parameters are now validated in STS operations.
- The
UpdateKinesisStreamingDestinationAPI is now supported in DynamoDB. - Proper validation errors are now returned for malformed AVP policies instead of internal server errors. (🌟 ultimate)
- The
GetTokensFromRefreshTokenAPI is now supported in Cognito. (🌟 base) - The
RSA_AES_KEY_WRAP_SHA_256algorithm is now supported in the KMSImportKeyMaterialAPI. - Route53 provider now correctly maps FQDNs with trailing dots for ELB routing.
- Proper error responses are now returned for Lambda functions with invalid S3 code locations.
- The
DeploymentCanarySettingsproperty is now supported forAWS::ApiGateway::Deploymentresources. - Multiple VPCs are now supported for
AWS::Route53::HostedZoneduring initial creation. - MySQL RDS containers now run as non-root by default, with support for configurable user and group IDs via
RDS_CONTAINER_USER_GROUP_IDenvironment variable (default:1000:1000). (🌟 base) - Improved parity for EFS
AccessPointAPI with enhanced validation and error handling. (🌟 ultimate) - The
ipAddressTypefield is now supported in API Gateway REST & HTTP APIs, where the field can be set toipv4ordualstack, via theCreateRestApi, andCreateApiAPIs. - Updates to the
AWS::SNS::Topicresource are now supported, including support for changes toDisplayName,TopicName, andTagsproperties. DomainProcessingStatusis now returned and user-provided values are preserved when creating Elasticsearch domains via theCreateElasticsearchDomainAPI.- The
NameandOpenTableFormatInputparameters are now supported in the GlueCreateTableAPI, andTableInputis treated as optional in parity with AWS behaviour. (🌟 ultimate) - Improved support for non-default account IDs in API Gateway v2, AppSync, CodePipeline, Cognito, ELBv2, IoT, and Route53.
- Improved
appsync-utilsJS package management. The library will now stay up to date by default. It was previously required to useAPPSYNC_JS_LIBS_VERSION=refreshto update the library. (🌟 ultimate)
Deprecations
- MWAA support for Airflow versions v2.4.3, v2.5.1, and v2.6.3 is deprecated and will be retired after December 30, 2025. (🌟 ultimate)
APPSYNC_JS_LIBS_VERSION=latestandAPPSYNC_JS_LIBS_VERSION=refreshare no longer supported. Use a tagged version or commit fromappsync-utilsinstead. Or leave empty to stay up to date. (🌟 ultimate)- Lambda Debug Mode (Preview) has moved from the
localstack/localstackimage to thelocalstack/localstack-proimage. This change requires users to use thelocalstack/localstack-proimage with an authenticated account instead. You can register for free at https://app.localstack.cloud/sign-up - EKS state created in version 4.6 or earlier using Cloud Pods or standard persistence will not be compatible with the EKS provider in version 4.7. Recreating the EKS state is necessary for compatibility. (🌟 ultimate)
What's Changed
Exciting New Features 🎉
- CFn: implement language extensions transform by @simonrw in #12813
- Rename master to main, localstack-ext to localstack-pro by @dfangl in #12847
- LDM as provisioner of debug-enabled containers by @MEPalma in #12851
- Step Functions: variable-reference parsing to skip string and regex literals by @MEPalma in #12891
- add implementation of DeleteChangeSet for CFnV2 by @pinzon in #12876
- feat: add the pro activation to the tracked environment variables by @kittylon in #12902
- handle unsupported resources in CFn v2 by @pinzon in #12905
- CFNv2: minor parity assessment and triaging by @simonrw in #12871
- DynamoDB: Implement UpdateKinesisStreamingDestination by @viren-nadkarni in #12897
- KMS: Add support for
RSA_AES_KEY_WRAP_SHA_256in import key material by @sannya-singal in #12888 - LDM Migration by @MEPalma in #12852
Other Changes
- Update Extension API by @bentsku in #12805
- Update action names for AWS prefix by @alexrashed in #12832
- fix delete method of AWS::SNS::TopicPolicy CFn resource by @thrau in #12831
- CI: archive raw metrics by @k-a-il in #12837
- Update version in README by @alexrashed in #12838
- Sns topic update functionality by @michalisfot in #12777
- CI: put parity metrics to separate artifact by @k-a-il in #12839
- S3: fix Checksum behavior for GetObject with PartNumber by @bentsku in #12842
- S3: fix Access-Control-Allow-Headers handling in S3 CORS by @bentsku in #12841
- Es/fix Terraform domain deploy by @cloutierMat in #12843
- Docker: Add 'log_handler'-argument to pull() by @bblommers in #12848
- update social shield by @alexrashed in #12856
- S3: fix CORS handler + GZIP handling by @bentsku in #12855
- Increase AWS CLI lower bound version to shorten resolution time by @silv-io in #12857
- Update CODEOWNERS by @localstack-bot in #12860
- [Testing] Update test durations by @localstack-bot in #12858
- fix: correct recognition of lambda path by @thetric in #12629
- Add tag push trigger to main workflow by @silv-io in #12829
- APIGW: add support for new endpoint configuration by @ArthurAkh in #12826
- APIGW: update CFN related snapshots by @bentsku in #12866
- Pin aws cli version instead of having a lower bound by @silv-io in #12867
- cleanup missed references to old naming by @alexrashed in #12869
- add ELB service principal by @bentsku in #12872
- Handle file not found case for chmod_r utility by @dfangl in #12861
- KMS #12530: Error handling for invalid blob issue by @pbansal2 in #12809
- DynamoDB: skip failing test test_more_than_20_global_secondary_indexes by @k-a-il in #12874
- update kinesis-mock from 0.4.12 to 0.4.13 by @alexrashed in #12878
- add IoT and AppSync ServicePrincipal by @bentsku in #12884
- DynamoDB: Bump DDB Local to v3 by @giograno in #12879
- Lambda: Proper error handling for code in S3 by @dfangl in #12883
- Add proper validation for STS role arn and session name parameters by @dfangl in #12885
- add python project section to CODEOWNERS by @alexrashed in #12887
- SSM: add dependency on secretsmanager used by GetParameter by @dmacvicar in #12896
- CFn: correctly set physical resource id for VpnGatewayAttachment by @simonrw in #12870
- CFNv2: support validation of CAPABILITY_AUTO_EXPAND by @simonrw in #12864
- APIGW: support
DeploymentCanarySettingsforAWS::ApiGateway::Deploymentby @bentsku in #12899 - S3: fix Expires header behavior by @bentsku in #12894
- DynamoDB: fix persistence on manual save by @giograno in #12882
- Ignore all type errors from mypy when debugpy is installed by @simonrw in #12893
- CFNv2: Implement get_template by @simonrw in #12865
- CFnV2: add stack events when there are errors during preprocessing by @simonrw in #12892
- CFNv2: Support the list parameter type by @simonrw in #12904
- CFnV2: implement list-stacks by @simonrw in #12903
- bug fix: add missing proxies to the http request for the GitHub Installer by @plafond in #12900
- Update CODEOWNERS by @localstack-bot in #12917
- [Testing] Update test durations by @localstack-bot in #12915
- remove thrau from CODEOWNERS codeowners by @thrau in #12918
- fix coveralls upload by @alexrashed in #12923
- CFNv2: Support stack sets by @simonrw in #12909
- avoid coverage reporting when only executing test subset by @alexrashed in #12924
- CFNv2: implement describe-stack-resource by @simonrw in #12912
- pre-commit: validate json files on commit by @simonrw in #12925
- Introduce jsonpickle serialization backend by @giograno in #12875
- remove copy-pasta in parity testing guide by @alexrashed in #12929
- KMS: return
NotImplementedErrorfor rotation of imported keys by @sannya-singal in #12932 - SQS: Allow usage of message-group-id param when using a Fair Queue by @nik-localstack in #12930
New Contributors
- @michalisfot made their first contribution in #12777
- @thetric made their first contribution in #12629
- @pbansal2 made their first contribution in #12809
- @dmacvicar made their first contribution in #12896
- @kittylon made their first contribution in #12902
- @plafond made their first contribution in #12900
Full Changelog: v4.6.0...v4.7.0