在创建boto3 ec2时附加角色实例错误

时间:2018-02-20 21:17:07

标签: amazon-web-services amazon-s3 amazon-ec2 boto3

我刚刚开始阅读有关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')

2 个答案:

答案 0 :(得分:0)

您的代码有:

IamInstanceProfile={
    'Name': instanceProfile
}

但是,没有名为instanceProfile的变量。

您似乎也在混合instanceProfileinstance_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