技术咨询:如何从Python脚本或Control-M作业触发MWAA DAG?
1. 直接在Control-M作业中调用MWAA CLI/API(通过VPC内资源)
如果公网调用受限,可将Control-M部署在与MWAA同VPC的子网,或通过VPC peering、VPN连接让Control-M所在网络访问MWAA私有端点。随后在Control-M作业中执行AWS CLI命令触发DAG:
aws mwaa start-dag-run --name <你的DAG名称> --execution-date <执行时间> --region <区域>
也可在Control-M作业环境配置AWS凭证后,用Python脚本调用boto3库:
import boto3 client = boto3.client('mwaa', region_name='<你的区域>') response = client.start_dag_run( Name='<你的DAG名称>', ExecutionDate='<执行时间>' )
注意要给Control-M的执行角色配置AmazonMWAAFullAccess或最小权限的IAM策略(允许mwaa:StartDagRun操作)。
2. 使用Control-M的AWS集成插件
Control-M自带AWS集成组件,无需额外写脚本,可直接在Control-M作业中配置调用MWAA的操作。借助该插件能直接触发DAG运行,同时复用Control-M的调度、依赖管理和监控能力。需要在Control-M环境安装并配置AWS插件,再创建对应作业类型,指定MWAA集群信息、DAG名称等参数。
3. 通过Amazon EventBridge触发
在Control-M作业中发送自定义事件到EventBridge,再配置EventBridge规则:当收到该事件时调用MWAA的StartDagRun API。这种方式适合解耦Control-M与MWAA的场景,EventBridge还可添加过滤、重试逻辑。
- Control-M作业中执行发送事件的命令:
aws events put-events --entries '[{"Source":"control-m.mwaa.trigger","DetailType":"StartDag","Detail":"{\"dag_name\":\"<你的DAG名称>\"}"}]' --region <区域>
- 在EventBridge中创建规则,匹配对应事件源和类型,目标选择MWAA的
StartDagRun动作并配置DAG参数。
4. 借助EC2跳板机
若Control-M无法直接访问MWAA的VPC,可在MWAA所在VPC内部署EC2实例作为跳板。Control-M通过SSH连接到该EC2,再在EC2上执行触发DAG的脚本或CLI命令。需给Control-M服务器配置SSH访问EC2的权限,同时EC2要有访问MWAA的权限和AWS凭证。
内容的提问来源于stack exchange,提问作者Sabarijeyanth veerasekaran

