mcpField
A
authoring-mwaa-workflow

authoring-mwaa-workflow

github.com/aws数据与数据库3.3k962 次安装今天更新
代码仓库

关于 authoring-mwaa-workflow

用于为 Amazon MWAA 创建生产级工作流文件,并根据目标选择 Provisioned 的 Python DAG 或 Serverless 的 YAML 工作流。也可指导部署和测试,状态变更须经过明确确认。

主要功能

  1. 01按目标选择 Python DAG 或 YAML
  2. 02创建 Provisioned 和 Serverless 文件
  3. 03指导部署与重新部署
  4. 04提供部署并测试等选项
  5. 05执行确认与安全防护

适用场景

  1. 01为 MWAA Provisioned 创建 Python DAG
  2. 02为 MWAA Serverless 编写 YAML 工作流
  3. 03部署或更新已获批准的工作流
  4. 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.md
authoring-serverless-workflow.md
dag-patterns.md
deploying-mwaa.md
serverless-code-packaging.md
yaml-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 步:选择路径

按以下顺序评估:

  1. 是否提供了可解析的目标? 无论是否包含其他关键词,目标引用都是明确的路由信号:
    • 预置式环境(ARN 格式如 arn:aws:airflow:<region>:<account>:environment/<name>,或可通过 aws mwaa get-environment 解析的名称)→ 转到 路径 A。
    • Serverless 工作流 ARN (arn:aws:airflow-serverless:<region>:<account>:workflow/<name>)→ 转到 路径 B。
  2. 是否同时包含两条路径的关键词? 如果请求同时包含两条路径的关键词,且没有可解析的目标,则根据意图消除歧义:
    • Serverless 支持 PythonOperator,因此,操作符级别的 python 线索(PythonOperator、python_callable、“Python 函数/任务”) 与路径 B 线索(yaml、serverless、工作流 ARN)同时出现时并不构成歧义 → 转到 路径 B。
    • 转换语境(“将我的 Python DAG 转换为 serverless”)→ 此技能不适用;转换不在范围内。
    • 若明确的预置式线索(Python DAG、provisioned)与 Serverless 线索同时出现,且没有目标 → 提出澄清问题。
  3. 是否只出现一条路径的关键词? 只有部署目标相关术语才算作路径 A 线索:provisioned、Python DAG 或“为我的环境提供一个 .py 文件” → 转到 路径 A。yaml 或 serverless → 转到 路径 B。操作符级别的 Python 提及不算路径 A 线索。
  4. 没有路由信号? 单独出现“DAG”或“Workflow”含义不明确,不能指示路径。请询问:目标是 MWAA 预置式(Python DAG) 还是 MWAA Serverless(YAML)?

路径

遵循所选路径的参考资料(无需查看另一条路径的参考资料):

完成所选路径的 编写 步骤后,继续执行下方的 部署与测试。

部署与测试(可选,写入完成后)

所有部署和重新部署均由编写流程负责。详情请参阅 references/deploying-mwaa.md。

步骤
  1. 询问 — 根据工件是否有计划任务,提供相应选项。 使用符合路径的措辞提出问题:

    • 已预置:“将此 DAG 部署到某个环境”(DAG 会上传到环境的 S3 存储桶)。
    • 无服务器:“部署此工作流”(工作流是独立资源——绝不要说“部署到环境”)。

    如果 DAG/工作流有计划任务:

    • 部署并测试 — 部署、取消暂停,并立即触发一次运行
    • 部署并取消暂停 — 部署、取消暂停,让它按计划运行(不立即触发)
    • 仅部署 — 上传到 S3,保持暂停

    如果 DAG/工作流没有计划任务(仅手动触发):

    • 部署并测试 — 部署,并立即触发一次运行
    • 仅部署 — 上传到 S3,保持暂停(不提供“取消暂停”选项——没有计划任务)

    用户也可以拒绝所有选项。

  2. 部署:

    • **已预置:**将 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 时复用。
  3. 如果选择“部署并取消暂停” — 按步骤 2 部署,然后取消暂停。 不要触发运行,也不要调用 testing-mwaa-workflow。

  4. 如果选择“部署并测试” — 按步骤 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 版本匹配

参考资料

安全注意事项

  • 会修改状态的操作(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 中的“安全默认设置”。

评论

支持 Markdown