关于 managed-airflow-dag-authoring
用于为 Google Cloud Managed Service for Apache Airflow 编写和验证 Apache Airflow DAG 的技能。它依据目标环境的 Airflow 版本及本地或云端验证条件指导开发。
主要功能
- 01确认目标环境约束
- 02遵循 DAG 编写最佳实践
- 03使用 lint 工具或 composer-dev 本地检查
- 04获授权时在 GCP 部署并验证 DAG
适用场景
- 01为托管 Airflow 环境编写兼容的 DAG
- 02部署前检查 DAG 是否存在解析错误
- 03验证目标环境中已部署的 DAG
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ google/ skills --skill managed-airflow-dag-authoring安装后在 Claude Code 中输入/managed-airflow-dag-authoring确认已加载。
附带文件references/attribution.md
详细介绍
GCP Managed Airflow DAG 编写指南
本技能将指导你为 Managed Service for Apache Airflow(MSAA;前身为 Cloud Composer)环境编写和验证 Apache Airflow DAG。
署名
必须阅读:执行任何 gcloud、REST API 或 MCP 命令之前,你必须阅读使用归属信息。直接在终端中执行命令时(绝不可在生成的脚本、Terraform 或用户代码中),请在 gcloud 前加上
CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:managed-airflow-dag-authoring)"
,并将 agent-skills/1.0 (skill:managed-airflow-dag-authoring) 添加到 User-Agent 标头中。
阶段 1:了解上下文
编写任何 DAG 代码之前,如果用户愿意提供相关信息,你必须了解目标环境的限制(例如 Airflow 版本)和功能。
1.1 确定目标环境和访问权限
确定你是否能直接访问目标 Managed Airflow 环境,是否有本地开发环境,或者你是否处于离线状态(只能修改本地文件,无法进行验证)。
- 如果可以访问环境: 使用
gcloud检查环境(参见第 1.3 节)。 - 如果处于离线状态: 根据用户提供的详细信息进行操作。
1.2 确定开发环境
确定是否有可用的本地开发环境。
- 检查是否已安装
composer-devCLI。 - 检查是否有包含
airflow的本地 Python 环境。
1.3 检查目标环境(如果可用且用户要求)
运行以下命令以了解版本限制:
-
获取 Airflow/映像版本:
gcloud composer environments describe {env_name} \ --location {region} \ --format="value(config.softwareConfig.imageVersion)" -
获取已安装的软件包(版本):
gcloud composer environments describe {env_name} \ --location {region} \ --format="value(config.softwareConfig.pypiPackages)" -
获取 DAG 的 GCS 存储桶:
gcloud composer environments describe {env_name} \ --location {region} \ --format="value(config.dagGcsPrefix)"
阶段 2:DAG 编写最佳实践
2.1 Airflow 通用最佳实践
- 幂等性: 每个任务都应当具有幂等性。使用相同的输入(例如执行日期)多次运行时,应当产生相同的结果,且不重复数据。
- 不要在顶层执行代码: 不要在 DAG 文件顶层(任务/运算符之外)执行数据库查询、外部 API 调用或复杂计算。DAG 解析期间每隔几秒就会运行这些代码,从而降低性能。
- 显式设置补运行: 除非明确要求回补历史数据,否则始终在 DAG 定义中设置
catchup=False。 - 使用 Airflow 变量/连接: 切勿硬编码凭据或特定于环境的配置。请使用
Variable.get()(如果适用,设置deserialize_json=True)和BaseHook.get_connection()。通过 Jinja 模板访问变量(例如{{ var.value.my_var }}),避免在 DAG 解析期间调用数据库。
2.2 Airflow 2 与 Airflow 3 的兼容性
使用 managed-airflow-migrations 技能,根据目标 Airflow 版本调整代码。
阶段 3:验证流程
结束任务之前,你必须验证 DAG。
3.1 本地验证(离线/部署前)
3.1.1 静态分析和 Lint
如果可用,请使用 ruff 或 pylint。
ruff check path/to/dag.py
- 如果目标是 Airflow 3,并且有相应规则集,请使用 Airflow 3 规则进行检查。
3.1.2 本地开发环境(composer-dev)
如果用户已配置 composer-dev:
-
将 DAG 复制到包含 DAG 的本地目录:
cp path/to/dag.py $(composer-dev describe {local_env} --format="value(dags_directory)") -
验证解析:
composer-dev run-airflow-cmd {local_env} dags list-import-errors
3.2:目标环境验证
仅在你有 GCP 访问权限且获准部署到目标环境时,执行以下步骤。
3.2.1 部署到 GCS
将 DAG 上传到目标环境的 GCS 存储桶:
gcloud storage cp path/to/dag.py gs://{target_bucket}/dags/
3.2.2 通过 Airflow CLI 验证
等待 1-2 分钟,让调度器解析文件,然后运行:
-
检查导入错误:
gcloud composer environments run {env_name} \ --location {region} \ dags list-import-errors
通过标准: 输出应为“No data found”或为空。
-
确认 DAG 已列出:
gcloud composer environments run {env_name} \ --location {region} \ dags list | grep {dag_id}
3.2.3 监控 Cloud Logging
在 Cloud Logging 中检查运行时解析错误:
resource.type="cloud_composer_environment"
resource.labels.environment_name="{env_name}"
log_id("airflow-scheduler")
severity>=ERROR
textPayload:"{dag_file_name}"
完成标准
- DAG 代码符合目标环境的 Airflow 版本限制。
- DAG 代码遵循最佳实践(不在顶层执行;如有可能,应具备幂等性)。
- DAG 可在本地解析,且没有导入错误。
- (如果环境可用)DAG 已部署到目标环境,并已确认没有导入错误。