Summary
LocalStack 4.10 introduces S3 Tables with Apache Iceberg support and major EKS enhancements, including IRSA, Pod Identity, and automatic endpoint injection. The release expands AWS parity across DynamoDB, EventBridge Pipes, ECS FireLens, SESv2, and IAM, while modernising the stack by dropping Python 3.9 and removing legacy providers.
AWS Features
- LocalStack now supports S3 Tables with full Apache Iceberg REST API support, enabling management of tabular data stored in S3. Refer to our documentation to learn more. (π ultimate)
Enhancements
- Added support for Python 3.14 in the LocalStack CLI.
- Added support for the
aws:RequestedRegionandaws:PrincipalArncondition variables in IAM. - Added support for inline templating in SESv2
SendEmailandSendBulkEmailoperations. (π base) - Implemented support for the
DescribeContributorInsightsAPI in DynamoDB, enabling retrieval of contributor insights details for tables. - Added support for wildcards in EventBridge Pipes input transformations, enabling patterns like
<$.body[*]>for improved template flexibility. (π ultimate) - Added validation for EventBridge Pipes input templates, ensuring malformed or empty templates are handled consistently with AWS behavior. (π ultimate)
- Enabled ECS FireLens support for custom configurations, allowing Fluent Bit config files to be loaded from S3 or bundled directly into container images. (π ultimate)
- Added support for the DynamoDB
WarmThroughputparameters, improving parity with AWS. - LocalStackβs EKS provider now includes the following enhancements: (π ultimate)
- Added support for IAM Roles for Service Accounts (IRSA), allowing EKS pods to automatically assume IAM roles and retrieve AWS credentials through the standard SDK credential chain.
- Added support for EKS Pod Identity, including the
CreatePodIdentityAssociationAPI and a mock implementation of the EKS Auth service, improving compatibility with the latest AWS authentication model. - Introduced automatic injection of endpoint URLs (
AWS_ENDPOINT_URLandAWS_ENDPOINT_URL_S3) into EKS pods via the existing credential webhook, ensuring SDKs connect directly to LocalStack without manual configuration. - Improved EKS cluster access management to fully respect the
bootstrapClusterCreatorAdminPermissionsflag and automatically create default access entries for the EKS service role.
Deprecations
- Dropped Python 3.9 support, raising the minimum supported version to 3.10.
- Removed the legacy Batch provider, following the newer provider, which is now the default. (π ultimate)
- Removed support for Kinesis Data Analytics for SQL Applications service, ahead of AWS's sunset date of 2026-01-27.
- Removed support for Managed Service for Apache Flink (MSF) 'legacy' provider. Users should migrate to the new emulated provider, which has been the default since v4.1.0. (π ultimate)
What's Changed
Exciting New Features π
- DynamoDB: Implement DescribeContributorInsights by @aleslash in #13220
- Sns/v2 topic migration by @baermat in #13205
- Correct casing for x-amzn-RequestId header by @dfangl in #13230
- drop python 3.9 and add tests for 3.14 in the cli by @alexrashed in #13247
- Sns/v2 apply subscribe changes by @baermat in #13226
- Sns/v2 sms attribute operations by @baermat in #13255
- SNS: V2 tagging by @baermat in #13254
- chore(lambda/rie): Update RIE to v1.36.0-pre by @gregfurman in #13298
- Add option to allow ':' in ARNs by @baermat in #13296
- feat(utils/sync): Add sync.Once utility functions by @gregfurman in #13284
- Sns:v2 platform application crud by @baermat in #13312
Other Changes
- dependabot: update labels and cleanup config by @alexrashed in #13225
- IaC: Update CatalogPlugin class and common catalog plugins logic by @k-a-il in #13184
- Skip test test_cfn_apigateway_swagger_import when running in K8s by @nik-localstack in #13229
- Opensearch: Ignore SSL validation for ES plugin test by @nik-localstack in #13234
- CFn: fix number parameter types by @simonrw in #13231
- CFn: correctly skip conditionally disabled resources by @simonrw in #13238
- [Testing] Update test durations by @localstack-bot in #13221
- SNS: Fix multi-region test by @baermat in #13240
- APIGW: fix Integration connectionId not being returned by @bentsku in #13233
- CFN: add support for passing objects in GetAtt by @pinzon in #13206
- CFn: handle get_template_summary of failed stack deploy by @simonrw in #13239
- CFn: handle invalid GetAtt validation by @simonrw in #13241
- Fix Event Bridge input transformation of booleans by @carole-lavillonniere in #13236
- Fix visibility check in _pre_delete_checks to use is_visible attribute by @xhoantran in #13223
- Updating the test duration workflow by @ArthurAkh in #13170
- Integrate Moto exception translation into handler chain by @viren-nadkarni in #13153
- CFN: add more validations to intrinsic FnEquals by @pinzon in #13217
- Allow storing test metrics in local filesystem of LocalStack container by @nik-localstack in #13188
- DynamoDB: Add support for WarmThroughput parameters by @viren-nadkarni in #13235
- CFN: add validation to FnSplit by @pinzon in #13244
- CFN: Fix duplicated stack issue by @pinzon in #13249
- DDB: regenerate snapshots for WarmThroughput by @bentsku in #13257
- fix ASF update linting removing unused import across the codebase by @bentsku in #13263
- Upgrade moto by @bentsku in #13262
- S3: fix
aws-globalvalidation in CreateBucket by @bentsku in #13250 - DynamoDB: fix snapshot skip for MA/MR global table by @bentsku in #13270
- Logs: harden dict view iterations by @nik-localstack in #13272
- Events: fix anything-but with null values by @bentsku in #13268
- fix linting by @baermat in #13274
- Add dependency linting and clean up by @silv-io in #13193
- Simplify new_tmp_dir by @giograno in #13273
- S3: clean up leftover legacy code by @bentsku in #13271
- CFN: Validate resource last status in describe_stack_resource by @pinzon in #13269
- Utils: add strict mode to load_file by @simonrw in #13265
- APIGW: expand coverage for API Keys and Usage Plans by @ArthurAkh in #13201
- CI:Fix enforce labels workflow by @k-a-il in #13277
- Update CODEOWNERS by @localstack-bot in #13253
- Remove verify_ssl = False from in memory localstack test configuration by @nik-localstack in #13275
- fix json.assign_to_path with non nested path by @cloutierMat in #13245
- Install build package when running make build by @nik-localstack in #13285
- CIFix: Update Opensearch version for bootstrap test by @pinzon in #13286
- CFnV2: GetAtt function searches first into resource results by @pinzon in #13280
- CFn: Remove deprecated and non-functional deploy GUI tool by @pinzon in #13293
- Update PR template by @viren-nadkarni in #13302
- fix asf updates by avoiding pip 25.3 by @alexrashed in #13305
- CFn: support nested properties in attribute lookup by @simonrw in #13304
- avoid pip 25.3 to fix dependency updates by @alexrashed in #13311
- Fix: Return proper client error for invalid YAML template structure by @Ganji00 in #13300
- S3: fix concurrency issue with versioned bucket and precondition by @bentsku in #13299
- Increase DNS server startup priority by @dfangl in #13314
New Contributors
- @aleslash made their first contribution in #13220
- @xhoantran made their first contribution in #13223
Full Changelog: v4.9.2...v4.10.0