AWS Cdk Development
zxkane/aws-skills
AWS Cloud Development Kit (CDK) expert for building cloud infrastructure with TypeScript/Python.
Upgrades an MWAA environment to a newer Airflow version — within 2.x, within 3.x, or across the 2.x-to-3.x boundary.
$ npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aws/agent-toolkit-for-aws upgrading-mwaa-environments --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/aws/agent-toolkit-for-aws.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/aws-data-analytics/skills/upgrading-mwaa-environments .claude/skills/upgrading-mwaa-environments && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "upgrading-mwaa-environments" agent skill from https://github.com/aws/agent-toolkit-for-aws/tree/main/plugins/aws-data-analytics/skills/upgrading-mwaa-environments into .claude/skills/upgrading-mwaa-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrading-mwaa-environments", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/aws/agent-toolkit-for-aws/tree/main/plugins/aws-data-analytics/skills/upgrading-mwaa-environmentsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aws/agent-toolkit-for-aws upgrading-mwaa-environments --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aws/agent-toolkit-for-aws.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/aws-data-analytics/skills/upgrading-mwaa-environments .agents/skills/upgrading-mwaa-environments && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "upgrading-mwaa-environments" agent skill from https://github.com/aws/agent-toolkit-for-aws/tree/main/plugins/aws-data-analytics/skills/upgrading-mwaa-environments into .agents/skills/upgrading-mwaa-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrading-mwaa-environments", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aws/agent-toolkit-for-aws upgrading-mwaa-environments --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aws/agent-toolkit-for-aws.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/aws-data-analytics/skills/upgrading-mwaa-environments .cursor/skills/upgrading-mwaa-environments && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "upgrading-mwaa-environments" agent skill from https://github.com/aws/agent-toolkit-for-aws/tree/main/plugins/aws-data-analytics/skills/upgrading-mwaa-environments into .cursor/skills/upgrading-mwaa-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrading-mwaa-environments", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/aws/agent-toolkit-for-aws.git --path plugins/aws-data-analytics/skills/upgrading-mwaa-environments--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aws/agent-toolkit-for-aws upgrading-mwaa-environments --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aws/agent-toolkit-for-aws.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/aws-data-analytics/skills/upgrading-mwaa-environments .gemini/skills/upgrading-mwaa-environments && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "upgrading-mwaa-environments" agent skill from https://github.com/aws/agent-toolkit-for-aws/tree/main/plugins/aws-data-analytics/skills/upgrading-mwaa-environments into .gemini/skills/upgrading-mwaa-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrading-mwaa-environments", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install aws/agent-toolkit-for-aws upgrading-mwaa-environmentsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/aws/agent-toolkit-for-aws.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/aws-data-analytics/skills/upgrading-mwaa-environments .github/skills/upgrading-mwaa-environments && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "upgrading-mwaa-environments" agent skill from https://github.com/aws/agent-toolkit-for-aws/tree/main/plugins/aws-data-analytics/skills/upgrading-mwaa-environments into .github/skills/upgrading-mwaa-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrading-mwaa-environments", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install aws/agent-toolkit-for-aws upgrading-mwaa-environments --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aws/agent-toolkit-for-aws.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/aws-data-analytics/skills/upgrading-mwaa-environments .opencode/skills/upgrading-mwaa-environments && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "upgrading-mwaa-environments" agent skill from https://github.com/aws/agent-toolkit-for-aws/tree/main/plugins/aws-data-analytics/skills/upgrading-mwaa-environments into .opencode/skills/upgrading-mwaa-environments/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upgrading-mwaa-environments", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
upgrading-mwaa-environmentsUpgrades an MWAA environment to a newer Airflow version — within 2.x, within 3.x, or across the 2.x-to-3.x boundary.
Upgrading Mwaa Environments is an agent skill from aws/agent-toolkit-for-aws, published by the product's own GitHub organization. Upgrades an MWAA environment to a newer Airflow version — within 2.x, within 3.x, or across the 2.x-to-3.x boundary. Computes the version-jump path, inserting the 2.11.x stepping-stone and Python-transition step when needed. Chooses an approach by whether run history and the same environment (URL/ARN) must be kept: a new-environment upgrade (blue-green), a rehearsed in-place upgrade validated on a test copy, or a direct in-place upgrade. Runs Ruff scanning and deprecation-warning log scans for 3.x moves, plus…
Its SKILL.md is about 7.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including reference files (for example `references/airflow2-to-3-checklist.md`, `references/airflow2-to-3-quick-reference.md` and `references/discovery-preflight.md`).
It sits in Data & Analytics, covering Deployment, Data pipelines and ETL and Linting and formatting. It works with Apache Airflow, Amazon Web Services, Python and Docker. The repository describes itself as: Official, AWS-supported MCP servers, skills, and plugins to help AI agents build on AWS. The licence is Apache-2.0.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 188af2f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
awsruffairflowdockerFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
docs.aws.amazon.comaws.amazon.comdocs.astral.shFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Upgrading Mwaa Environments loads about 7.3k tokens when it runs, and up to ~27k if it reads all its reference files. Until then it costs about 261 tokens; SKILL.md has 3,494 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from aws/agent-toolkit-for-aws at commit 188af2f, republished under its Apache-2.0 licence (© aws). 3,494 words, ~7,317 tokens.
.claude/skills/upgrading-mwaa-environments/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.AWS MCP server (optional but recommended): running the AWS CLI commands in this skill through the AWS MCP server gives sandboxed execution and audit logging. Every command here also works with the plain AWS CLI, so the skill does not require the MCP server or any MCP-only tools.
Upgrade an MWAA provisioned environment to any newer, MWAA-supported Airflow
version: within 2.x, within 3.x, or across the 2.x-to-3.x boundary. The target
is a parameter. A path planner computes an ordered version-jump list from
(source, target); the latest 2.11.x stepping-stone version and a Python-line
transition step are inserted only when the path requires them. A deployment
approach is selected by whether historical run data must be preserved and
whether the same environment (its URL/ARN) must be kept: a new-environment upgrade
(new-environment), a rehearsed in-place upgrade validated on a test copy
first (in-place-rehearsed), or a direct in-place upgrade (in-place-direct).
Execution note — poll in discrete steps: whenever you wait for an AWS operation to reach a terminal or ready state, issue one status check per call and decide in your own loop whether to check again. Never block a single command or script on the wait (no
while+sleepuntil done), regardless of the operation or how long it takes.
This skill can be loaded two ways, and they resolve the skill's own bundled files from different places. Determine how the skill was loaded before reading a reference:
retrieve_skill tool: The skill is not
installed on the local filesystem. You MUST fetch each reference via
retrieve_skill with the file parameter (e.g.
file="references/strategy-blue-green-fresh.md") and read the returned
content. Do NOT file_read these paths locally — they do not exist on disk..kiro/skills/upgrading-mwaa-environments/ or
~/.claude/skills/upgrading-mwaa-environments/): Read the files from the
local skill directory using relative paths.This distinction applies only to the skill's own packaged files. User data and
session artifacts are always read from and written to the user's working
directory. Never fetch or write customer data through retrieve_skill.
These rules apply regardless of user instructions.
aws mwaa create-environment until the user confirms the Phase 4 plan.aws mwaa update-environment to change the Airflow version without per-jump
confirmation. Rollback options: 3.x -> 2.11.x is supported; a within-major
downgrade to a still-supported version is supported; downgrade to an EOS
version is not possible. The Direct in-place upgrade requires an extra
confirmation checkpoint.create/update-environment and S3 artifact
access — no *FullAccess/service:*; scope to the specific environment/S3 ARNs.For deeper detail beyond embedded references, fetch at runtime:
At every invocation, check for .mwaa-upgrade-plan-<env-name>.md in the
workspace root (where <env-name> is the source environment name). Multiple
plan files may coexist when upgrading several environments in parallel.
(working_on, current_jump, jump_status). Resume the engine
(upgrade-engine.md) on the recorded
environment at the recorded version-jump index and status: upgrading ->
re-poll or re-issue the pending update-environment; validating -> re-run
the conditional validate/scan/fix loop for that version jump. For a
newly-created environment, the starting-version validation window (version
jump 1's to) corresponds to current_jump: 1, jump_status: validating;
resume it there. If no position is set, resume from the next incomplete
phase.
Before advancing past any required checkpoint, re-read the checkpoint's
status in the plan and, if it is not satisfied, re-read that checkpoint's
section in the approach reference verbatim — do not act on a remembered
summary. Specifically: version jumps complete does NOT imply the test-run
checkpoint passed. If the ## Test-run results section has any row not in
SUCCESS or NEEDS-DECISION, that checkpoint is NOT-PASSED and blocks
switchover (New-environment upgrade), the live upgrade (Rehearsed in-place
upgrade — see live_upgrade_allowed), or completion (Direct in-place
upgrade), regardless of version-jump status or has_import_errors: false.
Likewise a batch whose Monitored one full cycle? cell is not yes has not
fully switched over.Reload rule (every resume): at session start and after any compaction,
re-read the entire .mwaa-upgrade-plan-<env-name>.md before taking any action;
never act on a remembered or summarized version. This generalizes the
remembered-summary rule above from required checkpoints to the whole plan.
Plan Reconciliation (run before resuming any work): verify the plan's
self-consistency invariants (full list in
plan-materialization.md): a checkpoint
marked PASSED requires all its prerequisite Checklist items DONE/SKIP;
Where we are.test_run_checkpoint must equal the Test-run results table (any
PENDING row -> NOT-PASSED); current_jump/jump_status must match the
Upgrade Path Status; for the Rehearsed in-place upgrade, live_upgrade_allowed
must equal the test-run checkpoint. On ANY violation, do NOT trust the plan -
establish ground truth with read-only aws mwaa get-environment, /dags, and
/health, repair the plan to match reality, and record it in Last updated.
If reality is ambiguous, ask the user. A stale PASSED checkpoint otherwise
triggers a destructive next action: switchover + delete your current
environment (New-environment upgrade), the irreversible live upgrade
(Rehearsed in-place upgrade), or premature completion (Direct in-place
upgrade).
Fetch and follow references/discovery-preflight.md. It runs environment discovery, pre-flight safety checks, version-matrix refresh, target selection, and upgrade-path planning (detection only — version jumps execute in Phase 7). Record every output into the plan now, because Phase 4 is what turns it into the durable plan file, and a compaction before Phase 4 would otherwise lose it:
from/to/python_change/crosses_major, with the latest-2.11.x
stepping-stone version + Python-transition step inserted only when the
source is not already 2.11.x.One question decides the safest approach; whether you keep the same environment (its URL and ARN) follows from it and is not a separate choice.
Do you need to keep your run history — the record of past DAG runs and task instances in the Airflow UI?
new-environment). Build a brand-new environment on the target version and
switch over to it. It gets a new URL and starts with no run history; your
current environment keeps running untouched until you switch, so rolling back
is just "don't switch."in-place-rehearsed).
Upgrade your existing environment in place — same URL, full history kept. First
rehearse the whole upgrade on a temporary test copy to catch problems safely.
Use the Direct in-place upgrade (no test copy) only if the user explicitly
declines the rehearsal.Whether you keep the same environment (its URL and ARN) is a consequence, not an input: keeping your run history means upgrading your current environment in place (same URL and ARN), while the New-environment upgrade necessarily creates a new environment. This skill does not combine a new environment (a new URL and ARN) with preserved run history — if the user needs a new URL and ARN, run history is not carried over (New-environment upgrade).
| Approach | History | URL/ARN | Your current environment during the upgrade | New/test environment created at | Recommended |
|---|---|---|---|---|---|
| New-environment upgrade | Discarded | New | Runs until switchover | the first version jump's target | Yes |
| Rehearsed in-place upgrade | Preserved (snapshot) | Same | Rehearsed on a test copy, then upgraded | the first version jump's target | Yes |
| Direct in-place upgrade | Preserved (snapshot) | Same | Upgraded directly | none | No |
The New-environment upgrade and the Rehearsed in-place upgrade are both recommended; the user chooses by need. The Direct in-place upgrade is unrecommended and requires an extra confirmation checkpoint.
Guardrail: if the user picks the Rehearsed or Direct in-place upgrade and the environment has more than 50 DAGs or complex DAGs were detected in Phase 3, warn and recommend the New-environment upgrade instead. Do not block.
Record the chosen approach's slug (new-environment / in-place-rehearsed /
in-place-direct) in the plan. The position (working_on, current_jump,
jump_status) is initially unset.
Compatibility scan (conditional on a cross-major version jump): If any
version jump in the plan is crosses_major, run Ruff with AIR rules as a
required checkpoint:
ruff check --preview --select AIR .Report findings grouped by rule code. Ruff AIR rules cover 2-to-3
(AIR301/302/303/311/312) and 3.1 (AIR321, preview) API changes; they do NOT
detect APIs removed between 2.x minor versions, nor 3.2-specific changes.
The pre-cross deprecation-warning scan in the engine covers the
2.x-internal gap. If NO version jump is crosses_major (a within-major
upgrade), the AIR scan is informational only; rely on the engine's generic
DeprecationWarning scan instead.
Version-aware severity for AIR311 (import path moves): AIR311 flags
imports that moved to airflow.sdk (e.g., airflow.datasets.Dataset ->
airflow.sdk.Asset). Severity depends on the target version:
ModuleNotFoundError at parse time). Must fix before deploying to target.Always classify AIR311 as "must fix" when the target is 3.2.1+. The fixed
code (from airflow.sdk import ...) is AF3-only and cannot be deployed
until after the cross-major version jump completes — see the two-phase
deployment note in each approach reference.
Patterns Ruff does NOT catch: The manual checklist
(airflow2-to-3-checklist.md)
includes patterns invisible to Ruff, notably _TaskDecorator.output
(section 15) and standalone Airflow CLI in BashOperator (section 16).
Always run the manual scan even when Ruff reports zero findings.
Run manual scan using patterns from airflow2-to-3-checklist.md. Surface a metadata-DB warning (every approach, cross-major only): DAGs using metadata-DB access work on AF2 but break on AF3. Two categories:
settings.Session(), provide_session — checklist
section 1): must be redesigned to the REST API (webserver in-VPC, or
invoke-rest-api with its low rate limit) or dropped.airflow db ... in BashOperator — checklist section
16): redesign to the MWAA CLI endpoint (preferred, simpler) or REST API
or drop. The agent must verify command availability on the target version
via cheat-sheet before committing to this path.
Record each affected DAG and its category in the plan (Phase 4).Check requirements.txt against the target version's constraints from mwaa-version-matrix.md.
Secrets backend detection: Check for secrets.backend config override in environment configuration. If using Secrets Manager or Parameter Store, note that variables/connections are external and do not need migration. If NO secrets backend is configured, surface this to the user at plan time: connection passwords will NOT migrate via the REST API (2.x omits, 3.x masks), so password-bearing connections must be moved to a secrets backend or have their passwords re-entered out of band on the target — and variable values / connection extra transit --body/CLI args and the audit log during migration. Record this in the plan (Phase 4).
Plugin inventory: If PluginsS3Path is set, list contents. Flag FAB/web-view plugins needing special attention.
Classify each DAG by upgrade difficulty: Simple, Moderate, Complex.
Group DAGs into batches (shared utilities in batch 0, simple first).
Write .mwaa-upgrade-plan-<env-name>.md to workspace root (where
<env-name> is the source environment name discovered in Phase 1). Include:
new-environment / in-place-rehearsed /
in-place-direct)crosses_major.Record the ordered upgrade path as a ## Upgrade Path table:
| Jump | From → To | Python change | New major version | Status |
|---|---|---|---|---|
| 1 | <jump.from> → <jump.to> | yes/no | yes/no | pending |
For the Rehearsed in-place upgrade (two environments — the test copy, then
your current environment), give the upgrade-path table separate Test copy status and Your current environment status columns; mark the
current-environment jumps IRREVERSIBLE.
Before presenting the plan, follow
plan-materialization.md and generate every
section it specifies, conforming to its ## Plan format contract (fixed status
vocabulary, Last updated line, ## Where we are keys) and satisfying its
## Self-consistency invariants: the ## Checklist, every per-approach
required checkpoint as its own PENDING entry, the pre-seeded ## Test-run results and ## Switchover progress (New-environment upgrade) tables, the
## Where we are block, the parse-clean-vs-test-run-verified status
vocabulary (LOADED vs VERIFIED), and the approach-specific sub-step
decomposition rules. The plan is the durable, resumable source of truth: any
step that exists only as prose in a approach reference — not as a discrete
PENDING item here — WILL be skipped after compaction. Generate these sections
BEFORE presenting the plan; a parse-clean signal (has_import_errors: false)
does NOT satisfy the test-run checkpoint and must never be recorded as
"validated" or "complete".
Present the plan to the user for confirmation before proceeding.
ruff check --preview --select AIR --fix --unsafe-fixes <files>
b. Fix remaining issues per DAG using airflow2-to-3-quick-reference.md.
c. Re-run Ruff to verify zero AIR violations.
d. Re-scan the FIXED files (cross-major only) with the checklist
section 15/16 greps — not just the originals. --unsafe-fixes can rewrite
xcom_pull templates into <task>.output (AF3-invalid) without re-flagging
it; this runtime break otherwise surfaces only at live parse. Fix hits and
re-run Ruff.
e. Save progress (see plan-materialization.md ## Saving progress): mark
each DAG DONE and update Last updated before starting the next batch.Uses aws/amazon-mwaa-docker-images to validate fixed code against the target
version. This repo only provides images for Airflow 2.9.2 and newer. If the
target version is below 2.9.2, skip Docker validation (log skip reason in the
plan) and rely on the engine's live validation in Phase 7 instead.
Cross-major version jumps: When any version jump is crosses_major,
Docker validation is strongly recommended. Ruff AIR rules miss several
runtime-breaking patterns (e.g., _TaskDecorator.output removal, fully-removed
shim modules in 3.2.1+). Docker import validation catches these before live
deployment, avoiding iterative fix-deploy-fail cycles on the remote environment.
If Docker is skipped for a cross-major upgrade, log the skip reason AND warn
that undetected runtime errors are likely.
docker --version. If unavailable, user declines, or target < 2.9.2, log skip in plan with warning and proceed to Phase 7.DONE or SKIP (with reason) and update
Last updated.Dispatch to the approach-specific reference based on the plan's chosen approach. Each approach runs the step-by-step upgrade (upgrade-engine.md) on the new environment (New-environment upgrade), the test copy then your current environment (Rehearsed in-place upgrade), or your current environment (Direct in-place upgrade).
Throughout Phase 7, save progress as described in
plan-materialization.md: after each
step, sub-step, version jump, checkpoint, batch, and per-DAG status - and
before the next action - save the change (status token + durable facts +
Last updated + ## Where we are) to the plan.
DAG test-run validation (REQUIRED for every approach): After the
engine's parse validation passes, invoke skill testing-mwaa-workflow for
each DAG or batch of DAGs to confirm execution succeeds at the target version.
On failure, invoke skill debugging-mwaa-workflow for root-cause analysis.
Do NOT trigger DAG runs manually via the REST API (POST /dags/{id}/dagRuns)
or poll run states inline — the testing skill owns triggering, polling,
classification (SUCCESS vs NEEDS-DECISION), and the fix loop. This is a
required checkpoint — do NOT proceed to the live upgrade (Rehearsed in-place
upgrade), switchover (New-environment upgrade), or completion (Direct in-place
upgrade) until test-run validation passes. Parse-only validation (no import
errors) does not prove artifacts will run correctly. Each approach reference
defines this as an explicit, numbered required checkpoint that must be
satisfied before the next phase: New-environment upgrade Step 4-checkpoint,
Rehearsed in-place upgrade Step 1-checkpoint, Direct in-place upgrade Step 4.
The checkpoint requires recording results in a ## Test-run results section
of the plan. The upgrade skill orchestrates this loop and does not perform
test/debug logic inline.
Applies to approaches that create a new/test environment (New-environment upgrade, Rehearsed in-place upgrade). The Direct in-place upgrade completes at Phase 7 (no new/test environment).
Batched switchover (New-environment upgrade only; explicit approval
per batch): For each batch (matching the same batch grouping from Phase 7):
a. Pause the batch's DAGs on your current environment (space calls with a
short sleep; invoke-rest-api has a 10-second timeout / 6 MB response
cap
(docs)
and is throttled per environment, so use backoff rather than a fixed rate):
aws mwaa invoke-rest-api --name <current-env> --method PATCH \
--path /dags/<dag_id> --body '{"is_paused":true}'
sleep 0.2b. Drain: wait for in-flight runs of those DAGs to complete on your current
environment. Poll dag_runs for state=running. If a run remains
in-flight after 10 minutes and its active task is a sensor or deferred
operator (check task_instances for state=deferred or
state=sensing), proceed with unpausing on the new environment. The
paused DAG on your current environment will not produce new runs; the
in-flight run will complete or timeout independently. It cannot
conflict with the new environment because the new environment starts
fresh with no prior dag_runs for that execution_date.
c. Unpause the same DAGs on the new environment (same 0.2s throttle):
aws mwaa invoke-rest-api --name <new-env> --method PATCH \
--path /dags/<dag_id> --body '{"is_paused":false}'
sleep 0.2d. Monitor the batch on the new environment for one full schedule cycle before proceeding to the next batch. On failure, re-enable the batch on your current environment (rollback) and investigate.
Per-DAG pause/unpause above uses --path /dags/<dag_id>, subject to the
64-char --path limit; for an over-length dag_id use the Airflow CLI
fallback (aws mwaa create-cli-token -> airflow dags pause|unpause) noted
in upgrade-engine.md.
For small environments (fewer than 10 DAGs or all-simple classification), offer an all-at-once switchover as an alternative if the user prefers speed.
Stability period: User-defined monitoring window after the final batch completes (recommend: 24h or one full cycle of the longest-interval DAG). Watch the environment's health on its built-in CloudWatch metrics dashboard and the Create recommended alarms action, which stay current; scheduler liveness (e.g. Scheduler heartbeat) and queue backlog (e.g. Oldest queued task age) are the core post-switchover indicators to prioritize (https://docs.aws.amazon.com/mwaa/latest/userguide/monitoring-dashboard.html). For the New-environment upgrade, your current environment remains paused, not deleted. For the Rehearsed in-place upgrade, your current environment is live and monitored.
Decommission (explicit approval per step):
aws mwaa delete-environment --name <current-env>; archive its S3
artifacts (optional).aws mwaa delete-environment --name <test-copy>.Read-only option (New-environment upgrade): Offer to keep your current environment paused for an extended period for historical UI access before final deletion.
Save progress: mark upgrade complete (status DONE), set Where we are
phase: complete, and update Last updated.
© aws, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 9 other files (references) in plugins/aws-data-analytics/skills/upgrading-mwaa-environments of aws/agent-toolkit-for-aws.
Open the folder on GitHubat commit 188af2f
Upgrading Mwaa Environments next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Upgrading Mwaa Environments this skillaws/agent-toolkit-for-aws | 2.8k | — | ~7.3k | Automated safety check: Pass | Apache-2.0 | |
| AWS Cdk Developmentzxkane/aws-skills | 367 | 2 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Monitor With HaolemeHaolemeApp/Haoleme | 157 | — | ~1.3k | Automated safety check: Pass | AGPL-3.0 | |
| Deploying Go SDK Bundlesastronomer/agents | 451 | — | ~1.8k | Automated safety check: Notes | Apache-2.0 | |
| Version Bumpergodatadriven/whirl | 205 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Python Projectmajiayu000/spellbook | 286 | — | ~2.7k | Automated safety check: Notes | MIT |
zxkane/aws-skills
AWS Cloud Development Kit (CDK) expert for building cloud infrastructure with TypeScript/Python.
HaolemeApp/Haoleme
Selectively monitor important long-running or resource-intensive commands with Haoleme by prefixing them with hao, so status, output, and completion notifications sync to the mobile app.
astronomer/agents
Builds, packs, and deploys compiled Airflow Go SDK bundles so the ExecutableCoordinator can run them.
godatadriven/whirl
Bump the Airflow or Python version across all project files.
majiayu000/spellbook
Modern Python project architecture guide for 2025. An agent skill from majiayu000/spellbook.
astronomer/agents
Deploys Airflow DAGs and projects. An agent skill from astronomer/agents.
aws/agent-toolkit-for-aws
Entry point for AI-agent work on AWS: pick a runtime, plan a migration for existing workloads, and build an executable POC — one phased flow.
aws/agent-toolkit-for-aws
A skill your agent uses to extend an existing agent project with memory, app integration, VPC, multi-agent, migration, model, browser, code interpreter, payments, or resource removal.
aws/agent-toolkit-for-aws
Migrates vibe-coded web applications to AWS. An agent skill from aws/agent-toolkit-for-aws.
aws/agent-toolkit-for-aws
Deploy an event-driven workflow that routes S3 uploads to either Lambda or Fargate via Step Functions based on file size.
aws/agent-toolkit-for-aws
Deploys, queries, and debugs AWS Marketplace usage-based (PAYG) metering — the pipeline (ResolveCustomer, BatchMeterUsage, EventBridge via SAM) and querying/debugging metering records, statuses…
aws/agent-toolkit-for-aws
A skill your agent uses when THIS agent needs to pay for x402-protected content at runtime: hitting a paywall mid-task, settling it via AgentCore Payments, and applying operator-defined spend limits.
Upgrades an MWAA environment to a newer Airflow version — within 2.x, within 3.x, or across the 2.x-to-3.x boundary. Upgrading Mwaa Environments is an agent skill from aws/agent-toolkit-for-aws, published by the product's own GitHub organization.x boundary.
Upgrading Mwaa Environments fits situations like: upgrade Airflow; migrate to Airflow 3; preserve Airflow history; keep same MWAA environment.
Run `npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a claude-code`. Or copy the skill folder (plugins/aws-data-analytics/skills/upgrading-mwaa-environments in aws/agent-toolkit-for-aws) into .claude/skills/upgrading-mwaa-environments in your project. Claude Code loads it when a task matches its description.
Run `npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a codex`. Or copy the skill folder (plugins/aws-data-analytics/skills/upgrading-mwaa-environments in aws/agent-toolkit-for-aws) into .agents/skills/upgrading-mwaa-environments in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add aws/agent-toolkit-for-aws --skill upgrading-mwaa-environments -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/upgrading-mwaa-environments, .gemini/skills/upgrading-mwaa-environments, .github/skills/upgrading-mwaa-environments and .opencode/skills/upgrading-mwaa-environments in your project.
Going by SKILL.md and its folder, Upgrading Mwaa Environments needs the command-line tools its instructions call (aws, ruff, airflow and docker). Our summary lists: Python 3; Docker.
SKILL.md names 3 domains. As links in the text: docs.aws.amazon.com, aws.amazon.com and docs.astral.sh. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Upgrading Mwaa Environments is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.3k tokens (SKILL.md is roughly 29k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 20k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Upgrading Mwaa Environments: AWS Cdk Development (zxkane/aws-skills, 367 stars), Monitor With Haoleme (HaolemeApp/Haoleme, 157 stars), Deploying Go SDK Bundles (astronomer/agents, 451 stars) and Version Bumper (godatadriven/whirl, 205 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
aws (a GitHub organization, an official publisher) maintains it in aws/agent-toolkit-for-aws, which has 2,825 GitHub stars. The repository holds 138 skills in this directory. The repository was last updated on October 7, 2026.
Source: aws/agent-toolkit-for-aws on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.