What's Changed
[1.3.38] — 2026-05-13
Added
- ECS task IAM role credentials endpoint (
GET /v2/credentials/<uuid>) — real ECS injectsAWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/<uuid>per task and SDKs fetch credentials by GETting that path against169.254.170.2. MiniStack now serves the same path on the gateway and returns the AWS-strict 5-field credentials document (AccessKeyId,SecretAccessKey,Token,Expiration,RoleArn) — distinct from the IMDS shape served at/latest/meta-data/iam/security-credentials/<role>. Contributed by @YakirOren. - ECS task env injection for SDK-driven workloads — tasks launched by MiniStack's ECS emulator now also get
AWS_CONTAINER_CREDENTIALS_FULL_URI(so SDKs in task containers fetch emulated credentials automatically from the new/v2/credentials/<uuid>endpoint),AWS_CONTAINER_AUTHORIZATION_TOKEN(satisfies botocore's allow-list when the gateway host is not loopback, e.g.host.docker.internalor a Docker bridge IP), andAWS_ENDPOINT_URL(so SDK service calls auto-route to the gateway). Together with the existingECS_CONTAINER_METADATA_URI_V4, unmodified AWS SDKs running inside an emulated ECS task now use MiniStack end-to-end with no client config. Contributed by @YakirOren. - CloudFormation
AWS::CertificateManager::Certificate— provisions a Certificate record matchingRequestCertificateshape.Refresolves to the ARN; honoursDomainName,SubjectAlternativeNames,ValidationMethod,Tags,KeyAlgorithm,CertificateTransparencyLoggingPreference. Closes a gap that blocked any HTTPS-related IaC stack from applying against MiniStack. Reported by @parv0888. - CloudFormation
AWS::ElasticLoadBalancingV2::TargetGroup— MS' ALB CFN story was previously partial:LoadBalancerandListenerprovisioned butTargetGroupwas missing, leaving the listener with nothing to forward to. The new handler writes a target-group record matchingCreateTargetGroup, with AWS-documented defaults (HTTP, port 80, health-check interval 30, healthy/unhealthy thresholds 5/2, matcher 200).TagsandTargetGroupAttributeshonoured. Reported by @parv0888. - CloudFormation
AWS::ElasticLoadBalancingV2::ListenerRule— host- and path-based ALB routing now provisions. Conditions accept both the flat{Field, Values}shape and CFN's per-field nested config form (PathPatternConfig.Values,HostHeaderConfig.Values,HttpHeaderConfig,HttpRequestMethodConfig,QueryStringConfig,SourceIpConfig). Actions supportforward/redirect/fixed-response. Reported by @parv0888. - CloudFormation
AWS::RDS::DBInstance— standalone DB instances (non-Aurora) and Aurora cluster members now provision. Writes a record matchingCreateDBInstance(metadata-only, like the existingAWS::RDS::DBClusterhandler — Docker container spawn remains on the CLI/SDK path). Aurora cluster members inherit master credentials from the cluster automatically.Fn::GetAttreturnsEndpoint.Address,Endpoint.Port,DbiResourceId,DBInstanceArn. Reported by @parv0888. - CloudFormation
AWS::StepFunctions::StateMachineDefinitionandDefinitionS3Location— CDK'sDefinitionBody.fromFile()emitsDefinitionS3Locationreferencing an S3 asset, andDefinitionBody.fromString()emits the inlineDefinitionobject; MiniStack previously honoured onlyDefinitionStringand silently fell back to{}, producingInvalidDefinition: StartAt state 'None' not foundat execution time. Both forms are now honoured,DefinitionS3Locationis fetched from the in-memory S3 service, andDefinitionSubstitutionsplaceholders (${KEY}) are applied to the resolved definition. Reported by @youngkwangk.
Fixed
- ECS
connectivityAtandstoppingAttimestamps wire-formatted as numbers — both fields are set on tasks but were missing from the_ECS_TIMESTAMP_FIELDSnormalization set, so they shipped as ISO strings inDescribeTasks/ListTasksresponses. The Go AWS SDK v2 (strict JSON 1.1 timestamp parsing) rejected the response; boto3 was lenient and hid the issue. Both fields are now epoch-normalized alongside the other task timestamps. Contributed by @YakirOren. - CloudFormation
AWS::ECS::TaskDefinitionpopulatesregisteredAt,registeredBy, andcompatibilities— the CFN provisioner constructed the task-definition record without these three fields, soDescribeTaskDefinitionreturned them as missing for CFN-created TDs even though the CLI/SDK path (RegisterTaskDefinition) always set them. Workloads that readregisteredAt(e.g. the ARMO ECS operator and other reconcilers) had to fall back to "now". The CFN path now mirrors the CLI path. Contributed by @YakirOren.