What's Changed
[1.3.42] — 2026-05-16
Added
- MWAA (Managed Workflows for Apache Airflow) — new service emulating the AWS MWAA REST API for both Airflow 2.x and Airflow 3.x.
CreateEnvironmentspins up a realapache/airflow:<version>container in standalone mode on the same Docker network as MiniStack, syncs DAGs from the configuredSourceBucketArn+DagS3Pathinto/opt/airflow/dags/once the container reaches AVAILABLE, and forces an aggressive scan interval so DAGs become visible within seconds.CreateWebLoginTokenandCreateCliTokenreturn the correct field names (WebToken/CliToken) per the boto3 MWAA model.InvokeRestApiproxies to the running Airflow REST API —/api/v2/for v3 (open via Simple Auth Manager withALL_ADMINS=true),/api/v1/for v2 (basic auth using the standalone-generated admin password captured from the container after boot).GetEnvironment,UpdateEnvironment,ListEnvironments,DeleteEnvironmentand full container lifecycle (stop + remove on delete) included; per-environment host port released on delete so long-running stacks don't leak ports. Host-prefix routing (api.airflow.<region>) correctly bypassed by the S3 vhost extractor so requests reach the MWAA handler instead of being misread as bucket names. End-to-end verified with real DAGs visible viaInvokeRestApi GET /dagson both Airflow 2.10.4 and Airflow 3.0.6. - CloudWatch Alarm
AlarmActions→ SNS publish — alarm state transitions (OK↔ALARM↔INSUFFICIENT_DATA) now dispatch the configuredAlarmActions/OKActions/InsufficientDataActionslists. SNS topic ARNs are published with the AWS-shaped JSON payload (AlarmName,NewStateValue,NewStateReason,StateChangeTime,Region,OldStateValue,Triggersub-object with metric/threshold/comparison). Fires on bothSetAlarmState(manual) and the auto-evaluation path triggered byPutMetricData.ActionsEnabled=False(orDisableAlarmActions) suppresses dispatch. Closes the largest single inter-service integration gap — alerting-driven testing now works end-to-end. - Lambda → CloudWatch Metrics — every Lambda invocation now publishes the four canonical
AWS/Lambdametrics dimensioned byFunctionName:Invocations(count),Errors(count, 1 on handled/unhandled failure),Duration(ms, wall-clock around the worker call),Throttles(count, 1 when reserved-concurrency rejected the call). Recorded for bothRequestResponseandEventinvocation types. Queryable via the standardGetMetricStatisticsAPI, same shape and granularity real CloudWatch emits. - CloudFormation
AWS::ApiGateway::Account— the singleton CFN resource that storesCloudWatchRoleArnfor the API Gateway account. Previously failed withUnsupported resource type, which blocked any CDK stack usingnew RestApi({ cloudWatchRole: true })— a very common pattern. The handler writes the role ARN into the same store the runtimeUpdateAccount/GetAccountAPI reads from, so the value round-trips end-to-end. Reported by @sajansharmanz.
Changed
- Test harness — xdist session-startup reset coordination — the per-worker
autousereset_serverfixture previously had every xdist worker hit/_ministack/reseton session start, so a slower worker's reset could fire after a faster worker had already begun creating fixtures, wiping that state mid-test (most visibly as occasionallist_functions()empty results intest_lambda_create_invoke). The first worker now wins anO_EXCLfile lock and runs the reset; the others wait briefly for a marker file and skip. Single-process pytest (no xdist) keeps the original behaviour. Removes a class of CI flakes that only reproduced under parallel load.