MWAA启动EC2实例的示例DAG运行失败问题咨询
MWAA 启动EC2实例DAG失败排障指南
你写的DAG逻辑本身没有语法问题,失败基本都是配置、权限、环境匹配类的问题,按以下顺序排查即可:
- 实例ID配置校验
代码中INSTANCE_ID = os.getenv("INSTANCE_ID", "instance-id")的逻辑是优先读名为INSTANCE_ID的环境变量,读不到就使用占位字符串instance-id。MWAA环境默认不会注入这个环境变量,如果你没有手动在MWAA环境的「环境变量」配置项中添加对应键值,代码会拿无效的占位ID调用EC2 API,直接触发「实例不存在」类错误。
修复方式二选一:- 直接将代码中该行替换为你的真实EC2实例ID,比如
INSTANCE_ID = "i-0xxxxxxxxx" - 到MWAA控制台的环境配置页,添加环境变量
INSTANCE_ID,值为你的目标EC2实例ID。
- 直接将代码中该行替换为你的真实EC2实例ID,比如
- 执行角色权限校验
MWAA运行任务时使用的是你创建环境时绑定的执行角色,该角色默认不包含EC2实例操作、状态查询的权限,调用API时会直接被AWS IAM拒绝。
你需要给该执行角色附加对应权限策略,最小权限参考如下:
*如果你使用的是AWS全球区,将ARN中的{ "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:DescribeInstances" ], "Resource": "arn:aws-cn:ec2:*:*:instance/你的目标EC2实例ID" }aws-cn替换为aws即可;如果需要批量操作多台实例,可以调整Resource字段的匹配规则。 - 区域匹配校验
EC2相关算子默认使用MWAA环境配置的默认AWS区域,如果你的目标EC2实例和MWAA环境不在同一个区域,会出现查不到实例的错误。
修复方式:给EC2StartInstanceOperator和EC2InstanceStateSensor都添加region_name参数,值为EC2实例所在的区域代码,例如region_name="cn-north-1"。 - 传感器配置优化
默认配置的EC2状态传感器容易在MWAA环境中触发资源占用、超时类问题,建议调整参数适配MWAA运行特性:
参数说明:instance_state = EC2InstanceStateSensor( task_id="ec2_instance_state", instance_id=INSTANCE_ID, target_state="running", poke_interval=30, timeout=600, mode="reschedule" )poke_interval=30:每30秒查询一次实例状态,避免调用API过于频繁timeout=600:最长等待10分钟,超过时间直接判定任务失败,避免无限等待mode="reschedule":MWAA官方推荐的传感器运行模式,等待状态时释放worker资源,不会长时间占用工作槽位
另外你代码中导入了EC2StopInstanceOperator但没有实际使用,虽然不会直接触发报错,建议删除减少不必要的依赖加载。
排障前可以先手动在EC2控制台尝试启动目标实例,如果手动启动都失败(比如EBS卷异常、vCPU配额不足、配置错误),需要先解决EC2本身的启动问题,DAG才能正常运行。
内容的提问来源于stack exchange,提问作者Musa
相关产品推荐
相关产品推荐

