关于 authoring-mwaa-workflow
用于为 Amazon MWAA 创建生产级工作流文件,并根据目标选择 Provisioned 的 Python DAG 或 Serverless 的 YAML 工作流。也可指导部署和测试,状态变更须经过明确确认。
主要功能
- 01按目标选择 Python DAG 或 YAML
- 02创建 Provisioned 和 Serverless 文件
- 03指导部署与重新部署
- 04提供部署并测试等选项
- 05执行确认与安全防护
适用场景
- 01为 MWAA Provisioned 创建 Python DAG
- 02为 MWAA Serverless 编写 YAML 工作流
- 03部署或更新已获批准的工作流
- 04打包 Serverless 任务的自定义代码
MCP 相关
可选用 AWS MCP 服务运行 AWS CLI 命令,以获得沙盒执行和审计日志。该技能也支持普通 AWS CLI,不依赖 MCP 专用工具。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ aws/ agent-toolkit-for-aws --skill authoring-mwaa-workflow安装后在 Claude Code 中输入/authoring-mwaa-workflow确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/authoring-provisioned-dag.mdauthoring-serverless-workflow.mddag-patterns.mddeploying-mwaa.mdserverless-code-packaging.mdyaml-schema.md详细介绍
编写 MWAA 工作流
AWS MCP 服务(可选,但建议使用): 通过 AWS MCP 服务运行此技能中的 AWS CLI 命令,可获得沙箱执行和审计日志记录。此处的每条命令也都适用于普通 AWS CLI,因此此技能不要求使用 MCP 服务或任何仅限 MCP 的工具。
为 Amazon MWAA 编写生产级工作流制品。路由到以下两种路径之一:Python DAG(预置式)或 YAML 工作流(Serverless)。
执行说明 — 分步轮询: 每当等待 AWS 操作进入终止状态或就绪状态时,每次调用只发出 一次状态检查,并在你自己的循环中决定是否再次检查。绝不要让单条命令或脚本阻塞等待 操作完成(不要使用
while+sleep直到完成),无论操作是什么,也无论需要等待多久。
防护措施 — 此技能自身文件的位置(MCP 与本地安装)
此技能可以通过两种方式加载,它们会从不同位置解析技能自带 文件。读取参考资料前,请先确定技能是如何加载的:
- 通过 AWS MCP
retrieve_skill工具加载: 此技能未安装在本地文件系统上。你必须通过retrieve_skill并使用file参数获取每份参考资料(例如file="references/authoring-provisioned-dag.md"),然后阅读返回的内容。不要在本地对这些路径使用file_read——它们在磁盘上并不存在。 - 本地安装(例如
.kiro/skills/authoring-mwaa-workflow/或~/.claude/skills/authoring-mwaa-workflow/):使用相对路径从本地技能目录读取文件。
此区别仅适用于技能自带的打包文件。用户数据和会话制品始终从用户的工作目录读取并写入其中。切勿通过 retrieve_skill 获取或写入客户数据。
第 0 步:选择路径
按以下顺序评估:
- 是否提供了可解析的目标? 无论是否包含其他关键词,目标引用都是明确的路由信号:
- 预置式环境(ARN 格式如
arn:aws:airflow:<region>:<account>:environment/<name>,或可通过aws mwaa get-environment解析的名称)→ 转到 路径 A。 - Serverless 工作流 ARN
(
arn:aws:airflow-serverless:<region>:<account>:workflow/<name>)→ 转到 路径 B。
- 预置式环境(ARN 格式如
- 是否同时包含两条路径的关键词? 如果请求同时包含两条路径的关键词,且没有可解析的目标,则根据意图消除歧义:
- Serverless 支持
PythonOperator,因此,操作符级别的python线索(PythonOperator、python_callable、“Python 函数/任务”) 与路径 B 线索(yaml、serverless、工作流 ARN)同时出现时并不构成歧义 → 转到 路径 B。 - 转换语境(“将我的 Python DAG 转换为 serverless”)→ 此技能不适用;转换不在范围内。
- 若明确的预置式线索(
Python DAG、provisioned)与 Serverless 线索同时出现,且没有目标 → 提出澄清问题。
- Serverless 支持
- 是否只出现一条路径的关键词? 只有部署目标相关术语才算作路径 A 线索:
provisioned、Python DAG或“为我的环境提供一个.py文件” → 转到 路径 A。yaml或serverless→ 转到 路径 B。操作符级别的 Python 提及不算路径 A 线索。 - 没有路由信号? 单独出现“DAG”或“Workflow”含义不明确,不能指示路径。请询问:目标是 MWAA 预置式(Python DAG) 还是 MWAA Serverless(YAML)?
路径
遵循所选路径的参考资料(无需查看另一条路径的参考资料):
- 路径 A — Python DAG(MWAA 预置式): references/authoring-provisioned-dag.md
- 路径 B — YAML 工作流(MWAA Serverless): references/authoring-serverless-workflow.md
完成所选路径的 编写 步骤后,继续执行下方的 部署与测试。
部署与测试(可选,写入完成后)
所有部署和重新部署均由编写流程负责。详情请参阅 references/deploying-mwaa.md。
步骤
-
询问 — 根据工件是否有计划任务,提供相应选项。 使用符合路径的措辞提出问题:
- 已预置:“将此 DAG 部署到某个环境”(DAG 会上传到环境的 S3 存储桶)。
- 无服务器:“部署此工作流”(工作流是独立资源——绝不要说“部署到环境”)。
如果 DAG/工作流有计划任务:
- 部署并测试 — 部署、取消暂停,并立即触发一次运行
- 部署并取消暂停 — 部署、取消暂停,让它按计划运行(不立即触发)
- 仅部署 — 上传到 S3,保持暂停
如果 DAG/工作流没有计划任务(仅手动触发):
- 部署并测试 — 部署,并立即触发一次运行
- 仅部署 — 上传到 S3,保持暂停(不提供“取消暂停”选项——没有计划任务)
用户也可以拒绝所有选项。
-
部署:
- **已预置:**将 DAG 上传到环境的
SourceBucketArn/DagS3Path。运行部署后验证(参见 deploying-mwaa.md),确认调度器已解析新文件,且没有导入错误或 dag_id 冲突。如果不存在环境,且用户批准,则可在流程中创建一个(计划-验证-执行 + 明确确认),然后轮询CREATING->AVAILABLE(约 20-40 分钟)。用户也可以提供现有环境。 - 无服务器:
CreateWorkflow(新建)或UpdateWorkflow(重新部署); YAML 会在此处同步验证。如果工作流使用PythonOperator/BashOperator,请先构建代码包并上传到 S3,再通过--code传入(参见 references/serverless-code-packaging.md 和 references/deploying-mwaa.md)。用户也可以提供现有 ARN。 - **重新部署(修复循环):**使用相同的上传 /
UpdateWorkflow路径,在 testing-mwaa-workflow 委托修复 ARTIFACT 或 ENVIRONMENT 时复用。
- **已预置:**将 DAG 上传到环境的
-
如果选择“部署并取消暂停” — 按步骤 2 部署,然后取消暂停。 不要触发运行,也不要调用 testing-mwaa-workflow。
-
如果选择“部署并测试” — 按步骤 2 部署,如适用则取消暂停,然后使用已解析的目标(环境名称 +
dag_id,或工作流 ARN)调用 testing-mwaa-workflow。此交接属于 testing 的委托调用模式。
严格门槛: 如果用户要求测试——无论是一开始就提出(“部署并测试”),还是在对话稍后提出(“测试一下”“运行一下”“试试看”)——你都必须调用 testing-mwaa-workflow。不要手动触发、监控或验证 DAG 运行。 “部署并取消暂停”不是测试请求——它只是部署操作。
- 生产安全:
create-environment、update-environment、create-workflow和update-workflow会更改状态——确认每项操作,并说明其影响。目标名称中包含 prod 时发出警告。
故障排除
| 错误 | 原因 | 解决方法 |
|---|---|---|
| dagrun_timeout 提前终止 DAG | 小于所调用服务中设置的超时时间 | 增大 dagrun_timeout 或缩短服务超时时间 |
| YAML 验证拒绝工作流 | 类型或参数错误 | 使用 timedelta 格式;检查允许列表 |
| Serverless 中找不到 Operator | 未列入允许列表 | 使用受支持的 Operator、PythonOperator/BashOperator 或 Lambda |
| Serverless 运行:无法提取代码 / 环境已损坏 | 代码包不正确 | 文件放在 zip 根目录,不要包含 __pycache__,大小 ≤250 MB;重新打包 |
| Serverless Python 任务 ImportError | 缺少依赖或 wheel 平台不匹配 | 打包 manylinux2014_x86_64 / Py3.12 wheel;不要打包预装的软件包 |
| 模板变量未定义 | 版本不匹配 | 检查变量是否与准确的 Airflow 版本匹配 |
参考资料
- references/dag-patterns.md — Python DAG 模板
- references/yaml-schema.md — MWAA Serverless 格式
- references/deploying-mwaa.md — 部署、内联环境创建和重新部署
- references/serverless-code-packaging.md — Python/Bash 代码打包、预装软件包和限制
- references/authoring-provisioned-dag.md — 路径 A:预置 Python-DAG 编写步骤(A1–A7)
- references/authoring-serverless-workflow.md — 路径 B:Serverless YAML 编写步骤(B1–B5)
安全注意事项
- 会修改状态的操作(
create/update-environment、create/update-workflow、S3 DAG 上传)需要明确确认并说明影响;对于名称中包含 prod 的目标发出警告(参见部署 HARD-GATE)。 - IAM 最小权限原则:A5 检查仅添加制品所需的确切
Action/Resource对 — 绝不使用*FullAccess或service:*。 - 不硬编码密钥/终端节点:使用由 Secrets Manager 或 SSM Parameter Store 支持的 Airflow Variables/Connections;切勿在 DAG 代码或 CLI 示例中输出凭证。
- Serverless 代码包仅包含用户自己的模块以及固定版本、平台匹配的 wheel,不包含未经审核的第三方二进制文件。
- 数据保护:避免在 SNS/CloudWatch 通知负载和日志中包含敏感数据;依赖其加密功能。
- 内联创建资源的安全默认设置:对此技能创建的任何 S3/MWAA/SNS/CloudWatch 资源进行加密和安全限制 — 参见 deploying-mwaa.md 中的“安全默认设置”。
- AWS 安全最佳实践:运行时根据 MWAA 用户指南中的安全最佳实践页面(以及 MWAA Serverless 对应页面)验证安全状况 — AWS 会随时间更新这些内容;参见 deploying-mwaa.md 中的“安全默认设置”。