创建附加SSM的EC2实例时遭遇IAM实例配置文件参数错误的技术咨询
解决EC2实例创建时的IAM实例配置文件参数错误
我来帮你拆解这两个AWS API参数问题,都是配置IAM实例配置文件时容易踩的坑:
第一个错误:InvalidParameterCombination - 同时使用ARN和Name参数
问题原因
AWS的RunInstances API有明确规则:指定IamInstanceProfile时,不能同时提供Arn和Name字段,二者选其一即可。这两个参数都是用来唯一标识实例配置文件的,同时传会让API无法确定你要使用的目标资源。
解决办法
直接删除其中一个参数就行。推荐用Name字段,它更直观易记,不需要复制冗长的ARN:
IamInstanceProfile={ 'Name': 'AmazonEC2RoleforSSM' },
第二个错误:InvalidParameterValue - 无效的IAM实例配置文件ARN
问题原因
你用的ARN arn:aws:iam::aws:instance-profile/AmazonEC2RoleforSSM 格式完全错了!正确的ARN格式应该是arn:aws:iam::YOUR_12_DIGIT_ACCOUNT_ID:instance-profile/INSTANCE_PROFILE_NAME,其中YOUR_12_DIGIT_ACCOUNT_ID是你自己AWS账号的12位数字ID,而不是示例里的aws。
虽然AmazonEC2RoleforSSM是AWS托管的角色,但对应的实例配置文件是存在于你的AWS账号下的,必须用自己的账号ID替换才能生效。
解决办法
有两种可靠的修正方式:
- 只使用Name参数(最推荐):就像第一个问题的解决办法,直接写实例配置文件的名称
AmazonEC2RoleforSSM,AWS会自动在你的账号下匹配对应的资源。 - 使用正确的ARN:先通过IAM控制台或CLI命令获取正确的ARN:
- 用CLI查询命令:
aws iam get-instance-profile --instance-profile-name AmazonEC2RoleforSSM - 从返回结果里复制
Arn字段,替换到代码中即可。
- 用CLI查询命令:
修改后的完整代码示例
def createInstances(self): instances = self.ec2_client.create_instances( ImageId="ami-09e67e426f25ce0d7", # Ubuntu Server 20.04 LTS (HVM), SSD Volume Type MinCount=1, MaxCount=1, InstanceType="m4.2xlarge", KeyName="ec2-key-pair", IamInstanceProfile={ 'Name': 'AmazonEC2RoleforSSM' # 仅保留Name参数 }, # DryRun=True, # 测试完成后记得注释或删除这行,否则不会实际创建实例 TagSpecifications=[ { 'ResourceType': 'instance', 'Tags': [ { 'Key': 'department', 'Value': 'dev' }, ] }, ], ) print(instances["Instances"][0])
额外验证步骤
- 先确认你的AWS账号里确实存在
AmazonEC2RoleforSSM实例配置文件:登录IAM控制台,在「实例配置文件」页面搜索该名称即可。 - 如果之前没创建过,需要先创建实例配置文件并关联
AmazonEC2RoleforSSM角色(AWS托管角色通常已存在,只需绑定到实例配置文件即可)。
内容的提问来源于stack exchange,提问作者Arun Kumar
相关产品推荐
相关产品推荐

