You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CI/CD场景下,如何通过GitHub Actions在PR合并时触发Amazon MWAA的Airflow DAG?

拉取请求合并时触发MWAA中Airflow DAG的实现方案(基于GitHub Actions)

当然有可行的实现方案,核心思路是通过GitHub Actions监听PR合并事件,调用AWS官方API触发MWAA中的指定DAG运行。下面是具体的实施步骤:

1. 配置AWS IAM权限

首先需要创建一个具备触发MWAA DAG权限的IAM身份(用户或角色),推荐使用IAM角色配合GitHub OIDC(更安全,无需存储长期密钥),也可以用IAM用户。

IAM权限政策示例

给身份绑定以下政策,替换占位符为你的实际信息:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "airflow:TriggerDagRun",
      "Resource": "arn:aws:airflow:<AWS区域>:<AWS账号ID>:environment/<你的MWAA环境名>"
    }
  ]
}

如果用OIDC,还需要给IAM角色配置信任策略,允许GitHub的OIDC提供商扮演该角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<AWS账号ID>:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
        },
        "StringLike": {
          "token.actions.githubusercontent.com:sub": "repo:<你的GitHub用户名>/<仓库名>:*"
        }
      }
    }
  ]
}

2. 配置GitHub仓库密钥

根据你选择的IAM身份类型,在GitHub仓库的Settings > Secrets and variables > Actions中添加对应的密钥:

  • 若用IAM用户:添加AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION
  • 若用OIDC:添加AWS_ROLE_ARN、AWS_REGION

3. 编写GitHub Actions工作流文件

在仓库的.github/workflows目录下创建trigger-mwaa-dag.yml文件,内容如下(根据IAM身份类型选择对应配置):

方案A:使用IAM用户

name: Trigger MWAA DAG on PR Merge
on:
  pull_request:
    types: [closed]
    branches: [main] # 替换为你的目标合并分支

jobs:
  trigger-dag:
    # 仅当PR被合并时触发
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
      - name: 配置AWS凭证
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: 触发MWAA DAG运行
        run: |
          aws airflow trigger-dag-run \
            --dag-id <你的DAG ID> \
            --region ${{ secrets.AWS_REGION }} \
            --environment-name <你的MWAA环境名>
            # 可选:传递PR元数据给DAG
            # --conf '{"pr_number": "${{ github.event.pull_request.number }}", "pr_author": "${{ github.event.pull_request.user.login }}"}'

方案B:使用OIDC(推荐)

name: Trigger MWAA DAG on PR Merge
on:
  pull_request:
    types: [closed]
    branches: [main] # 替换为你的目标合并分支

jobs:
  trigger-dag:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
      - name: 配置AWS OIDC角色
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
          aws-region: ${{ secrets.AWS_REGION }}
          role-session-name: GitHubActions-MWAA-Trigger

      - name: 触发MWAA DAG运行
        run: |
          aws airflow trigger-dag-run \
            --dag-id <你的DAG ID> \
            --region ${{ secrets.AWS_REGION }} \
            --environment-name <你的MWAA环境名>

4. 测试验证

创建一个PR并合并到目标分支,查看GitHub Actions的运行日志,同时登录MWAA的Airflow UI,检查目标DAG是否已被触发执行。

关键注意事项

  • 权限最小化:严格限制IAM身份的权限,仅保留airflow:TriggerDagRun动作,避免过度授权。
  • 事件过滤:通过if: github.event.pull_request.merged == true确保只有合并的PR才触发流程,防止PR关闭但未合并时误触发。
  • 元数据传递:如果需要在DAG中使用PR相关信息,可以通过--conf参数传递JSON数据,DAG内通过dag_run.conf["pr_number"]这类方式获取。

内容的提问来源于stack exchange,提问作者AlizaminJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:25:24