What's Changed
[1.3.65] — 2026-06-19
Fixed
- EC2 — source security groups (
UserIdGroupPairs) now returned byDescribeSecurityGroupRules/DescribeSecurityGroups—AuthorizeSecurityGroupIngress/Egressrules that reference another security group were dropped at ingestion and never surfaced:DescribeSecurityGroupRulesomittedReferencedGroupInfoandDescribeSecurityGroupsreturned an empty<groups>. Source-group pairs are now parsed and emitted by both. Reported by @kamegoro. Contributed by @kurok. - Auto Scaling — instance refresh actions implemented —
StartInstanceRefresh,DescribeInstanceRefreshes, andCancelInstanceRefreshpreviously failed withInvalidAction: Unknown AutoScaling action. They are now handled and recorded on the Auto Scaling group, so a refresh can be started, polled, and cancelled. Contributed by @c-julin. - S3 —
GetBucketOwnershipControlsnow 404s after delete — it always returned a default ownership block (HTTP 200), soDeleteBucketOwnershipControlswas not observable and Terraform's delete waiter looped (found resource), blockingterraform destroy. It now returnsOwnershipControlsNotFoundError(404) once controls have been deleted, while still reporting the default Object Ownership for a never-configured bucket. Contributed by @c-julin. - Glue —
GetUserDefinedFunctionsacceptsjava.util.regex\Q…\Epatterns — real AWS compilesPatternwithjava.util.regex, so clients like Trino's Glue connector send literal-quoted patterns (e.g.trino__\Qname\E__.*); Python'srerejected\Q…\EwithInvalidInputException: Invalid pattern syntax. The literal-quote sequences are now translated before matching. Contributed by @yonatoasis. - API Gateway v2 — CloudFormation provisioner honours the
ms-custom-idtag —AWS::ApiGatewayV2::Apiresources always got a random API id, ignoring anms-custom-idtag in the template even though the directCreateApipath and the v1 REST provisioner already honoured it. The v2 provisioner now resolves the custom id before falling back to a generated one. Contributed by @hiddengearz. - Lambda — function code stored as content-addressed blob files —
get_statebase64-encoded everycode_zipinline intolambda.json, so a deployment with many large zips (e.g. 26 functions × ~30 MB) produced a ~1 GB state file that OOM'd on warm boot while decoding. Code bytes are now written as content-addressed blobs alongside the state and loaded lazily. Contributed by @mattwang44. - Lambda — CloudFormation/CDK-provisioned layers now carry their content — layers created via CloudFormation stored no
_zip_data, so_resolve_layer_zipreturnedNoneat worker spawn and functions could not import their layer packages even thoughListLayersshowed them. The provisioner now stores the layer bytes. - Lambda — CloudFormation-created DynamoDB-stream ESMs anchor
LATESTat create time — matching theCreateEventSourceMappingAPI path, so aLATESTmapping skips records that already existed when the stack was deployed instead of replaying them; no-op for SQS/Kinesis sources. - ECS —
RunTasksecrets now resolve SSM Parameter Store references —containerDefinitions[].secretsvalueFromentries pointing at SSM parameters were previously left unresolved; they are now fetched in-process and injected into the container environment alongside Secrets Manager references.