我刚刚开始阅读有关AWS的内容,我正在尝试创建一个ec2实例并为其附加一个角色。据我所知,我需要创建一个实例配置文件,附加一个角色,然后将其附加到EC2实例,但由于下面描述的错误,我无法这样做。 我没有足够的时间,所以任何帮助都将受到高度赞赏。
这是我的代码:
创建角色:
role = iam.create_role(
Path='/',
RoleName=self.roleName,
AssumeRolePolicyDocument= str1,
Description="Allow EC2 instances to call AWS services"
)
#roleArn=role["Role"]["Arn"]
response = iam.attach_role_policy(
RoleName=self.roleName, PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess')
response = iam.attach_role_policy(
RoleName=self.roleName,
PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess'
)
创建实例配置文件并附加角色:
instance_profile = iam.create_instance_profile(InstanceProfileName=self.instanceProfile,Path='/')
iam.add_role_to_instance_profile(InstanceProfileName=self.instanceProfile, RoleName=self.roleName)
创建EC2实例:
instance = ec2.create_instances(
ImageId=imageId,
MinCount=1,
MaxCount=1,
KeyName=keyName,
InstanceType=instanceType,
IamInstanceProfile={
'Name': instanceProfile
}) code here
)
运行上面的代码时出现以下错误:
调用时发生错误(InvalidParameterValue) RunInstances操作:参数的值(mnbvinst) iamInstanceProfile.name无效。无效的IAM实例配置文件名称
一旦我重新运行应用程序并尝试为实例提供相同的名称,我就会收到以下错误。
调用时发生错误(LimitExceeded) AddRoleToInstanceProfile操作:不能超过配额 InstanceSessionsPerInstanceProfile:1
我尝试使用run_instances方法创建EC2实例,但同样的错误仍然存在
变量:
iam = boto3.client('iam')
ec2 = boto3.resource('ec2')
client = boto.client('ec2')
答案 0 :(得分:0)
您的代码有:
IamInstanceProfile={
'Name': instanceProfile
}
但是,没有名为instanceProfile
的变量。
您似乎也在混合instanceProfile
和instance_profile
:
instance_profile = iam.create_instance_profile(InstanceProfileName=self.instanceProfile,Path='/')
iam.add_role_to_instance_profile(InstanceProfileName=self.instanceProfile, RoleName=self.roleName)
第一行创建instance_profile
,但第二行引用self.instanceProfile
。
你做了一些清理工作。
答案 1 :(得分:0)
此实例配置文件是否在多个资源中使用? IAM实例配置文件限制了同时凭据会话的数量。
您可能有太多EC2资源使用相同的实例配置文件。
您可以创建实例配置文件并使用它或请求AWS增加限制: https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-iam-groups-and-users