Terraform创建EC2启动模板报无效ARN 缺失instance-profile路径
问题原因
- AWS EC2服务无法直接绑定IAM角色,必须通过**IAM实例配置文件(Instance Profile)**作为中间载体完成角色关联。两类资源的ARN路径规则存在明确差异:IAM角色的ARN路径段为
role/,实例配置文件的ARN路径段为instance-profile/,和报错提示要求的格式完全对应。 - 现有配置仅创建了IAM角色资源,未创建对应的实例配置文件资源,且错误将IAM角色的ARN直接传入启动模板的
iam_instance_profile配置块,最终传入API的ARN值为arn:aws:iam::1234444444444:role/assess-instance-role,不符合参数格式要求,触发校验报错。 - 当前运行的Terraform v1.2.3、AWS Provider v3.75.2版本不存在相关逻辑兼容问题,无需调整环境版本。
修复方案
- 新增
aws_iam_instance_profile资源,将已创建的ECS实例角色关联到该实例配置文件。 - 修改启动模板中
iam_instance_profile块的参数引用,替换为实例配置文件的ARN(也可直接引用实例配置文件名,两种写法效果完全一致)。
修正后的配置片段:
resource "aws_launch_template" "launch-template" { image_id = data.aws_ami.ecs.id instance_type = "c5.large" iam_instance_profile { # 替换为实例配置文件ARN,禁止直接引用IAM角色ARN arn = aws_iam_instance_profile.ecs_instance_profile.arn # 简化写法可直接传名称:name = aws_iam_instance_profile.ecs_instance_profile.name } } resource "aws_iam_role" "ecsInstanceRole" { name = "assess-instance-role" assume_role_policy = data.aws_iam_policy_document.assume_role_policy.json } # 新增:和角色绑定的IAM实例配置文件 resource "aws_iam_instance_profile" "ecs_instance_profile" { name = "assess-instance-profile" role = aws_iam_role.ecsInstanceRole.name }
注意事项
- IAM实例配置文件与IAM角色为一一对应关系,给EC2实例、启动模板、Auto Scaling组配置实例IAM权限时,传入的参数目标必须是实例配置文件资源,不能直接使用IAM角色。
- 配置修改完成后先执行
terraform plan确认变更计划,确认会新增实例配置文件、修改启动模板配置后,再执行terraform apply即可正常完成资源创建。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

