What's Changed
[1.5.37] — 2026-11-03
Added
- Glue — table optimizers —
CreateTableOptimizer,GetTableOptimizer,UpdateTableOptimizer,DeleteTableOptimizer,BatchGetTableOptimizerandListTableOptimizerRunsansweredInvalidAction. Optimizers are now stored per Iceberg table and type with AWS's defaults and errors, and dropping a table or database removes them. They never run. Reported by @lucasmfraser. - ALB — hosts resolve through Route 53 alias records — the data plane found a load balancer only by its
DNSNameor<name>.alb.localhost. A host with anA/AAAAalias record in a public hosted zone, exact or wildcard (*.example.com, the most specific name winning), now reaches the load balancer the record targets, so one ALB can serve many hostnames. Reported by @boesing. - Testcontainers — .NET example —
Testcontainers/dotnet-testcontainersruns MiniStack from Testcontainers for .NET with the AWS SDK for .NET.
Fixed
- ElastiCache — user groups reach the engine — user groups on a replication group or serverless cache were never applied, so commands ran as the open
defaultuser. The users now reach the engine on every change,defaultis off unless a group has one, and users can't runACLwrites orCONFIG. A change restarts the engine, dropping open connections. Contributed by @chris-plucker. Reported by @kharabasz. - ElastiCache — user group members and the built-in
defaultuser —ModifyUserGroupandCreateUserGroupaccepted current members, non-members, unknown users and duplicates; they now refuse them in AWS's order and messages. Every account has the built-indefaultuser, which "can't be modified." or "can't be deleted.", andDeleteUsertakes a user out of its groups. Reported by @kharabasz. - ElastiCache — user channels and
&in access strings — a user with a selector and no top-level channel rule, such ason ~* +@all (+get ~k), got every channel outside its selectors; it now gets none, as on AWS. Responses escape&and every other value, which botocore could not parse. Contributed by @kharabasz. - ElastiCache — a Redis OSS user group needs a
defaultuser —CreateUserGroupandModifyUserGroupaccepted a Redis group with no user nameddefault; they now answerDefaultUserRequired"Redis user group needs to contain a user with the user name default."ModifyUserGroupalso applies anEnginechange tovalkey, which lifts the rule. Contributed by @kharabasz. - ElastiCache —
ModifyUserappliesAppendAccessString— the appended rules were ignored. They are now applied, the result stored with rules ordered and merged; refused rules answerInvalidParameterValue, and sending it withAccessStringanswersInvalidParameterCombination"Both AccessString and AppendAccessString provided together. Pass either one of them." Contributed by @kharabasz. - CloudFormation —
AWS::ElastiCache::UserGroupupdates and ElastiCache failures — an update changing the users orEngineleaves the group with exactly the template's users; one changing only tags or order keeps changes made outside the stack. A user listed twice fails validation ("#/UserIds: array items are not unique"). Failures readResource handler returned message: "<message> (Service: ElastiCache, …)", as on AWS. Contributed by @kharabasz. - DynamoDB — a value SET at several paths is stored once per path —
SET a = :v, b = :v,SET a = src, b = src,if_not_exists,list_append(:l, :l)and PartiQLUPDATE ... SETstored one shared value, so a later nested write to one path showed up at the others. Each path now gets its own copy. Contributed by @toby6578. - ECS — task definition secrets —
AWS::ECS::TaskDefinitionconverted only a few container fields, soSecretswere never injected andRuntimePlatformandEphemeralStoragewere dropped; every nested property now reaches the ECS API's form. An SSMSecureStringsecret reaches the container decrypted, not as its storedENCRYPTED:form. Reported by @dimazuien. - ECS — tasks run images from MiniStack's own ECR — a task whose image was a MiniStack ECR
repositoryUriwas pulled from the real*.dkr.ecr.*.amazonaws.comhost. ECS now loads it from MiniStack's registry for the host's platform, and underAUTH=trueanother account's repository needs a policy allowing the pull. Reported by @kharabasz. - CloudFormation — a
secretsmanagerdynamic reference reads a secret in another account — a reference by ARN looked only in the stack's account. It now resolves in the account the ARN names, and underAUTH=trueonly when the secret's policy and its customer managed KMS key allow the caller, as on AWS. Contributed by @mishukdutta-cz. - CloudFormation and Lambda — files in another account's bucket — a
TemplateURL, a nested stack, anAWS::IncludeLocation, a state machineDefinitionS3Locationor Lambda code and layers in a bucket another account owns were looked for only in the caller's account. They are now read when the owner's bucket ACLs or policy allow it, as an S3GetObjectwould be. Contributed by @mishukdutta-cz. - Lambda — a declared architecture pins the container platform — a CloudFormation or SAM function ran on the host's platform whatever its
Architecturessaid. It now runs the declared platform; a host that cannot run it falls back once and remembers, and--platforminLAMBDA_DOCKER_FLAGSwins. Contributed by @toby6578. - Lambda — cold starts — the tar copied into a new container stayed in memory until a full garbage collection, so bursts of cold starts grew MiniStack by hundreds of MB; it is now freed when the copy ends. Concurrent cold starts of one function no longer collide on the context-ARN shim. Contributed by @skialpine. Reported by @chandra-purbia.
- Containers — failed and abandoned ones are cleaned up — a Lambda container whose start failed after
createwas left behind, and a Docker timeout was taken for an unrunnable platform. Stopped Lambda, Glue, CodeBuild, DSQL and AgentCore containers are now reaped, and spawned containers carry MiniStack's Testcontainers session labels so Ryuk can remove them. Contributed by @kharabasz. - EC2 — port ranges are ignored where the protocol covers all ports — the Terraform provider revokes a new group's default egress rule as
-1with ports0, which matched nothing, so a later allow-all rule lost its description and tags.-1and protocols other than tcp, udp, icmp and icmpv6 now ignoreFromPort/ToPort, as botocore documents. Contributed by @kharabasz. - RDS — cluster endpoints — under
MINISTACK_RDS_PUBLIC_ENDPOINT, a cluster's endpoints and port changed with its first instance, so Terraform showed drift; they are now reported fromCreateDBCluster. The global writer endpoint now resolves to the writer on the Docker network, follows switchover, failover, rename and removal, and is in every PostgreSQL member's certificate. Contributed by @kharabasz. - Step Functions — Map states — a JSONata Distributed Map now evaluates
Items,ItemSelector,MaxConcurrencyandOutput, andItemBatchergives each child one batch as{"BatchInput", "Items"}, up to 256 KiB by default. An Inline Map withItemReader,ItemBatcherorResultWriterfails withStates.Runtime("…not supported for INLINE maps"), which noCatchorRetryhandles, as on AWS. Contributed by @mishukdutta-cz. - Step Functions — stops and
.syncchildren — afterStopExecution, aWaitkept sleeping and branches kept running, so events landed afterExecutionAborted; nothing follows it now. A failed, stopped or timed-out.syncchild fails the parent withStates.TaskFailedand the child'sDescribeExecutionas the cause, as on AWS. Contributed by @mishukdutta-cz.