What's Changed
New Contributors
- @stefanmb made their first contribution in #557
- @erick-reis-gran made their first contribution in #560
[1.3.27] — 2026-05-04
Added
- AWS CloudTrail — in-memory audit log + control plane. Recording opt-in via
CLOUDTRAIL_RECORDING=1; per-account ring buffer (CLOUDTRAIL_MAX_EVENTS=10000).LookupEventssupports all 8 AWSLookupAttributes. Control plane:CreateTrail,DeleteTrail,GetTrail,DescribeTrails,ListTrails,UpdateTrail,GetTrailStatus,StartLogging/StopLoggingwith realIsLoggingstate,Put/GetEventSelectors,AddTags/ListTags/RemoveTags. Contributed by @AdigaAkhil. - AWS Resource Groups (
resource-groups, 2017-11-27) — 19 of 23 spec operations: group CRUD, resource queries, configuration, membership, tagging, account settings. Tag-sync ops omitted (not exposed by AWS CLI / Terraform). Requested by @staranto.
Fixed
- API Gateway v1
GetUsagePlanKey—GET /usageplans/{planId}/keys/{keyId}handler was missing; per-key path fell through to 404. Terraform'sGetUsagePlanKeyrefresh afterCreateUsagePlanKeyaborted everyaws_api_gateway_usage_plan_keyapply. Contributed by @marcin-nowak-scl. - API Gateway v1 HTTP_PROXY path-param substitution + query-string forwarding —
{paramName}placeholders in integrationuriwere forwarded literally; the inbound execute path was appended to the integration URI; query string was dropped. Now substitutes fromintegration.request.path.X = method.request.path.Xmappings (plus{proxy}for{proxy+}), uses the substituted URI as the upstream URL, and forwards the query string. Contributed by @marcin-nowak-scl. - API Gateway v1
UpdateModel—PATCH /restapis/{id}/models/{name}was missing; Terraformaws_api_gateway_modelupdates 404 - Transfer Family
LOGICALroot home directory mappings —Entry="/"failed to match because the resolver built"//"as the prefix. Contributed by @stefanmb. - CloudTrail router target prefix — was
AmazonCloudTrailService; AWS usesCloudTrail_20131101. Routing still worked via credential scope, but the prefix entry was dead code. - CloudTrail
IsLoggingstate onStop/StartLogging— both were no-ops;GetTrailStatusalways returnedIsLogging: True. Now flips the trail record's state and stamps_StartedAt/_StoppedAt(int epoch). - STS
Credentials.Expirationis int epoch in the JSON path —AssumeRole/AssumeRoleWithWebIdentity/GetSessionTokenreturned a float; Java/Go SDK v2 reject it. backup/eks_epoch()/_now()return int — weretime.time()(float); consumed by record fields likecreatedAt.- DynamoDB
ConditionalCheckFailedExceptionpopulatesItemonReturnValuesOnConditionCheckFailure="ALL_OLD"—PutItem/UpdateItem/DeleteItem/TransactWriteItemsnow return the prior item alongside the error code (and on the failingCancellationReasonfor transactions). Verified against botocore:CancellationReasonandConditionalCheckFailedExceptionshapes both includeItem. Reported by @darkamgine. - CFN
AWS::S3::Bucketpreserves physical id on update — auto-named buckets got a new random name on everyUpdateStack, breaking{Ref}after redeploy. Contributed by @erick-reis-gran. - CFN
AWS::Lambda::Functionreturns realCodeSize/CodeSha256— were hardcoded; now computed from the deployment-package bytes. Contributed by @erick-reis-gran.