Summary
LocalStack 4.3 is packed with major enhancements! We’ve introduced experimental support for CloudFront Lambda@Edge, added new languages and improved models in Transcribe, and switched Flink to application mode for better AWS parity. Step Functions, SQS, IAM, KMS, and Timestream received significant feature upgrades, and the Web Application now supports stack outputs and graph rendering for Step Functions.
AWS Features
- Experimental support for AWS CloudFront Lambda@Edge emulation, which can be enabled by setting
CLOUDFRONT_LAMBDA_EDGE=1
in your LocalStack configuration. Learn more about the current features & limitations in our documentation. (🌟 pro)
Enhancements
- Support for resource tagging in the EKS provider. (🌟 pro)
- Expanded language support in the Transcribe provider with the addition of Catalan, Czech, Gujarati, Kazakh, Korean, Polish, Telugu, Uzbek, and Ukrainian. Additionally, updated language models are now used for Chinese, Farsi, Spanish, Italian, Russian, and Vietnamese, improving transcription accuracy across these languages.
- Managed Service for Apache Flink (MSF) now runs in application mode instead of the previous session mode for a better parity with how Flink clusters run on AWS. (🌟 pro)
- Step Functions nested MapRun execution now works correctly by making map run components stateless and ensuring proper worker creation for all nested map runs.
- Support for AWS Step Functions aliasing features are now available.
- Step Functions interpreter now supports JSONata object templates as ItemSelector declaration bodies, ensuring correct evaluation in both JSONPath and JSONata modes.
- SQS Messages with an empty body are now rejected, ensuring that only valid messages are processed.
- Support for pagination in SQS ListQueues API, implementing
MaxResults
parameter functionality andNextToken
generation. - Basic CRUD functionality for IAM service-specific credentials is now supported.
- Service-linked role naming to match AWS pattern (
AWSServiceRoleFor<service>
) has been improved with added proper policy attachment for greater parity with AWS. - LocalStack’s Event Source Mapping (ESM) implementation now validates the existence of different event source resources.
- LocalStack now supports on-demand key rotation for KMS symmetric keys without imported key material, allowing up to 10 rotations per key that don’t affect automatic rotation schedules.
- Support for
EKS_K3S_FLAGS
configuration variable to customize thek3s
cluster created by LocalStack to emulate EKS clusters. (🌟 pro) - Support for
ListTagsForResource
API in the SSO Admin provider. (🌟 pro) - Support for filters in the
DescribeInstanceInformation
API in the SSM provider. - Support for AppSync Lambda data source batch processing is now available to reduce cold starts by combining queries based on batch size or time window. (🌟 pro)
- Support for schema enforcement to the Timestream provider in LocalStack, requiring dimensions marked as REQUIRED for record insertion. Records will be rejected if they’re missing required dimension keys, ensuring compliance with Timestream schema rules. (🌟 pro)
- Support for batching of records in Stream Pollers (DynamoDB Streams/Kinesis) based on
BatchSize
andMaximumBatchingWindowInSeconds
.
LocalStack Features
- You can now view the stack outputs in the CloudFormation Resource Browser. This feature allows you to view the outputs of a stack in the LocalStack Web Application.
- Step Functions Resource Browser now supports rendering graphs with auto-layouting along with improved StateFunction parsing, and has replaced the previous mermaid renderer.
- Replication support for
AWS::ECR::Repository
is now available for the AWS Replicator tool. (🌟 teams)
What's Changed
Exciting New Features 🎉
- TaggingService: Allow key value field names to be overridden by @viren-nadkarni in #12306
- Add structured metrics instrumentation by @vittoriopolverino in #12230
- [ESM] Validate event sources existence by @eLRuLL in #12297
- Step Functions: Improve Nested Map Run Stability by @MEPalma in #12343
- [ESM] Correctly enable exponential backoff inside stream poller by @gregfurman in #12312
- Step Functions: Support for Aliasing by @MEPalma in #12326
- Fix Invalid noqa Usage in Step Functions TestState Preprocessor by @MEPalma in #12368
- Cloud Formation: [POC] Modeling Stack Operations and Evaluating ChangeSet Descriptions by @MEPalma in #12355
- CFn updates: create new v2 provider for new engine by @simonrw in #12375
- Implement IAM service specific credentials CRUD by @dfangl in #12351
- Transcribe: New language models by @viren-nadkarni in #12336
- KMS: on-demand key rotation by @agseco in #12342
- Step Functions: Allow JSONata Object Templates in ItemSelector Declarations by @MEPalma in #12327
- Match IAM service linked role naming with AWS by @dfangl in #12387
- cleanup ServiceNameParser rules by @bentsku in #12358
- Step Functions: Lazy Initialization of JVM for JSONata Evaluation by @MEPalma in #12369
- Step Functions: Migrate Usage Metrics to New Counter Standards by @MEPalma in #12389
- Cloud Formation: [POC] Update Graph with Template Traversal & Intrinsic Function Resolution by @MEPalma in #12378
- [ESM] Add configurable poll frequency and log shard info by @gregfurman in #12415
- Cloud Formation: [POC] Scoping Mechanism, Base Support for Parameters, Dynamic Parameters, Conditions, Intrinsic Functions, and Type Divergence by @MEPalma in #12405
- [Utils] Add a batch policy utility by @gregfurman in #12430
- [ESM] Support Stream Poller batching by @gregfurman in #12437
- CloudFormation: Fix LoggingConfiguration Parameter Handling in StepFunctions Resource Provider by @MEPalma in #12433
Other Changes
- Add Lambda@Edge service principal by @joe4dev in #12313
- Util: support building in place for ECR docker images by @simonrw in #11806
- Add CodeStarConnections to the client types by @giograno in #12308
- Fix vulnerabilities in lambda runtime init by @dfangl in #12316
- [ESM] Fix flaky SQS ReportBatchItemFailures test with proper visiblity timeouts by @gregfurman in #12323
- [ESM] Fix constantly triggering SQS back-off by @gregfurman in #12319
- Skip flaky Kinesis Lambda test by @joe4dev in #12328
- APIGW: add validation for AWS ARN in PutIntegration by @bentsku in #12324
- [ESM] Fix validation of StartingPosition streams parameter by @gregfurman in #12329
- CFn: populate APIGW regional* properties by @simonrw in #12320
- ESM: fix CreateESM SQS validation by @bentsku in #12338
- fix kms api call response on method get-key-rotation-status by @pureiboi in #12103
- add service catalog cache loading from static var by @alexrashed in #12314
- add build time service catalog cache generation to s3 image by @alexrashed in #12341
- fix flaky transcribe tests by @sannya-singal in #12262
- Makes docker healthcheck more robust by @crystalin in #12344
- migrate healthcheck enhancements to S3 image by @alexrashed in #12347
- move parse_service_name after serve_edge_router_rules by @bentsku in #11800
- remove APIGW CORS handler and update global CORS logic by @bentsku in #11801
- fix redshift tests if not in docker by @alexrashed in #12352
- Remove version attribute from docker compose files by @dfangl in #12354
- CI/CD: More informative linter output by @agseco in #12353
- Update CODEOWNERS by @localstack-bot in #12359
- [ESM] Reset shards in StreamPoller for DDB Local errors by @gregfurman in #12360
- Use per-file-target-version to define Python 3.9 for CLI code by @silv-io in #12362
- add resource provider utility to convert LowerCamelCase to Pascal by @pinzon in #12192
- chore: improve test snapshot by @giograno in #12367
- chore: improve remaining tests snapshots by @giograno in #12373
- fix APIGW binary media types by @bentsku in #12371
- SNS: migrate to new Counter type for analytics by @bentsku in #12380
- Fix apigw input path formatting by @cloutierMat in #12379
- make counter classes public by @vittoriopolverino in #12386
- Docker Utils: Expose the build logs by @bblommers in #12376
- Update CODEOWNERS by @localstack-bot in #12393
- events: fix Event Ruler to not evaluate the full payload by @bentsku in #12394
- SNS: fix Filter Policy engine to not evaluate full complex payload by @bentsku in #12395
- DDBStreams: skip flaky test by @bentsku in #12402
- CFn: switch to new usage counters by @simonrw in #12382
- Track Lambda runtime environment timeout by @joe4dev in #12340
- APIGW: migrate to new Counter type for REST API analytics by @bentsku in #12383
- Make SQS reject messages with empty body (#12317) by @juanrh in #12322
- Bump moto-ext to 5.1.1.post1 by @viren-nadkarni in #12404
- add tags to cfn read security groups by @cloutierMat in #12408
- Events: migrate to new Counter type for Event Rule invocation analytics by @bentsku in #12388
- APIGW: fix rendering of $input.body when empty by @bentsku in #12413
- S3: fix checksum behavior and add new AWS behavior by @bentsku in #12401
- transcribe: add speaker diarization test by @sannya-singal in #12410
- Run tests on PRs against all branches by @nik-localstack in #12418
- fix cfn security group read by @cloutierMat in #12414
- S3: fix MA/MR test by @bentsku in #12417
- Implement pagination to localstacks SQS list_queues method by @DrisDary in #12397
- Update CODEOWNERS by @localstack-bot in #12426
- Better logging for ReflectionStateLocator by @giograno in #12037
- SNS: fix Subscribe idempotency due to RawMessageDelivery casing by @bentsku in #12420
- Migrate legacy usage counters to new analytic counters by @joe4dev in #12412
- Make Lambda reusable for CloudFront Lambda@Edge by @joe4dev in #12409
- update kinesis-mock from 0.4.8 to 0.4.9 by @alexrashed in #12440
New Contributors
- @vittoriopolverino made their first contribution in #12230
- @eLRuLL made their first contribution in #12297
- @pureiboi made their first contribution in #12103
- @crystalin made their first contribution in #12344
- @agseco made their first contribution in #12353
- @juanrh made their first contribution in #12322
- @DrisDary made their first contribution in #12397
Full Changelog: v4.2.0...v4.3.0