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
相关产品推荐
相关产品推荐

