能否通过Amazon Managed Airflow的DAG执行EC2实例上的Python脚本?
Amazon Managed Airflow(MWAA)执行EC2实例上Python脚本的可行方案
以下3种常用落地方式可直接参考:
方案1:通过AWS Systems Manager(SSM) RunCommand远程执行 (推荐)
无需给EC2开放公网端口或SSH访问权限,安全性最高,适合生产环境使用。
前置要求
- 目标EC2实例已安装SSM Agent,且实例绑定的IAM角色包含
AmazonSSMManagedInstanceCore权限 - MWAA 执行角色已添加SSM相关权限:
ssm:SendCommand、ssm:GetCommandInvocation
实现步骤
- 在MWAA DAG中使用
SSMRunCommandOperator调用EC2上的Python脚本 - 示例代码如下:
from airflow.providers.amazon.aws.operators.ssm import SSMRunCommandOperator run_python_script = SSMRunCommandOperator( task_id="run_ec2_python_script", instance_ids=["i-xxxxxx"], # 替换为你的EC2实例ID document_name="AWS-RunShellScript", parameters={ "commands": ["python3 /opt/scripts/your_script.py"], # 替换为EC2上Python脚本的绝对路径 "workingDirectory": ["/opt/scripts/"] # 替换为脚本所在目录 }, wait_for_completion=True, aws_conn_id="aws_default" # MWAA默认已配置该连接,可直接使用 )
方案2:通过SSH Operator远程执行
适合习惯传统SSH访问、且EC2已经配置了SSH访问规则的场景。
前置要求
- MWAA所在VPC与目标EC2的VPC已打通(同VPC或通过 peering 连接)
- EC2安全组已开放22端口给MWAA的安全组入站
- 已将EC2的SSH私钥存储到MWAA的 Secrets Manager 或者 Airflow 连接配置中
实现步骤
- 在MWAA DAG中使用
SSHOperator执行远程脚本 - 示例代码如下:
from airflow.providers.ssh.operators.ssh import SSHOperator run_python_script = SSHOperator( task_id="run_ec2_python_script", ssh_conn_id="ec2_ssh_conn", # 提前在Airflow连接中配置EC2的SSH信息:主机IP、用户名、私钥 command="python3 /opt/scripts/your_script.py", cmd_timeout=3600 # 根据脚本执行时长调整超时时间 )
方案3:脚本无EC2本地依赖时的简化方案
如果你的Python脚本不依赖EC2上的本地文件、本地服务等专属资源,可以直接将脚本同步到MWAA关联的S3桶的dags/或者plugins/目录下,直接在MWAA DAG中通过PythonOperator调用执行,无需远程访问EC2。
注意事项
- 需要同步脚本所有依赖包到MWAA的
requirements.txt中 - 如果脚本有外部存储读写需求,需要给MWAA执行角色添加对应服务(如S3、RDS等)的访问权限
注意:所有方案执行前都要先在EC2本地测试Python脚本的执行逻辑、权限配置正常,再放到MWAA上调度,减少调试成本。
内容的提问来源于stack exchange,提问作者jsrathnayake
相关产品推荐
相关产品推荐

