添加Launch Template至IaC后AWS Batch作业卡在Runnable状态求助
以下是针对你的Terraform配置问题的具体排查点和修复方案:
1. Launch Template缺失Batch代理安装逻辑
当自定义Launch Template时,AWS不会自动配置Batch代理,必须手动添加用户数据(user_data)来安装并启动代理,否则EC2实例无法注册到Batch计算环境,导致作业一直处于Runnable状态。
修改你的Launch Template资源,添加user_data块:
resource "aws_launch_template" "conversion_launch_template" { name = "conversion-launch-template" block_device_mappings { device_name = "/dev/sda1" ebs { volume_size = 80 } } iam_instance_profile { name = "conversion-pipeline-batch-iam-instance-profile" } # 添加Batch代理初始化脚本(适配Amazon Linux 2) user_data = base64encode(<<-EOF #!/bin/bash yum update -y yum install -y amazon-ecs-init # 将计算环境名称写入ECS配置文件 echo ECS_CLUSTER=${aws_batch_compute_environment.conversion_pipeline.compute_environment_name} >> /etc/ecs/ecs.config systemctl enable --now ecs EOF ) }
2. 实例角色配置不一致
检查Launch Template中指定的IAM实例配置文件conversion-pipeline-batch-iam-instance-profile,与Compute Environment里instance_role引用的aws_iam_instance_profile.conversion_pipeline_batch.arn是否为同一资源。如果是不同配置文件,需统一为同一个:
# 修改Launch Template中的实例配置文件引用,与计算环境保持一致 iam_instance_profile { name = aws_iam_instance_profile.conversion_pipeline_batch.name }
3. 实例角色权限不足
确保Batch实例角色附加了AmazonEC2ContainerServiceforEC2Role托管策略,该策略包含实例与Batch服务通信、拉取容器镜像、写入日志等必要权限。如果使用自定义策略,需包含以下核心权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability", "logs:CreateLogStream", "logs:PutLogEvents", "batch:RegisterJobDefinition", "batch:SubmitJob", "batch:DescribeJobs" ], "Resource": "*" } ] }
4. 安全组出站规则限制
确认Batch计算环境使用的安全组允许HTTPS(443端口)出站流量,实例需要访问AWS Batch服务、ECR镜像仓库、S3等资源。若使用私有子网,需确保子网配置了NAT网关,保证实例能正常访问外部资源。
5. 子网资源不足
检查指定的子网是否有可用私有IP地址,以及是否有足够的CPU、内存配额来启动实例。若子网IP耗尽或资源不足,Batch无法启动新实例,作业会持续处于Runnable状态。
内容的提问来源于stack exchange,提问作者Yafaa Ben Tili

