AWS使用角色Python从LAMBDA创建实例

AWS使用角色Python从LAMBDA创建实例,python,amazon-ec2,aws-lambda,amazon-iam,amazon-vpc,Python,Amazon Ec2,Aws Lambda,Amazon Iam,Amazon Vpc,我正在尝试从LAMBDA创建EC2实例,并将IAM角色分配给EC2实例。EC2实例需要该角色,因为存在一些与S3相关的功能。我已经创建了一个安装了所需软件的AMI。 我从这个AMI创建新实例并将角色分配给EC2实例没有问题 我的问题:我创建了两个EC2实例,并为它们分配了相同的角色(相同的LAMBDA脚本)。当我尝试执行python脚本时,它在1个EC2实例中按预期执行。但在第二个实例中,它失败,错误为“botocore.exceptions.NoCredentialsError:无法定位凭据”

我正在尝试从LAMBDA创建EC2实例,并将IAM角色分配给EC2实例。EC2实例需要该角色,因为存在一些与S3相关的功能。我已经创建了一个安装了所需软件的AMI。 我从这个AMI创建新实例并将角色分配给EC2实例没有问题

我的问题:我创建了两个EC2实例,并为它们分配了相同的角色(相同的LAMBDA脚本)。当我尝试执行python脚本时,它在1个EC2实例中按预期执行。但在第二个实例中,它失败,错误为“botocore.exceptions.NoCredentialsError:无法定位凭据”。(它需要凭据)。我检查了分配给两个实例的角色,它们是相同的。我使用的是默认VPC,我看到的唯一区别是这两个实例的子网不同。我尝试使用相同的lambda脚本创建多个实例,“子网A”中的所有实例都正确执行。但是“子网B”中的实例存在访问问题

问题:当通过Lambda将角色分配给EC2时,是否需要设置任何其他参数。有谁能帮我解决这个问题吗

创建实例的Lambda代码:

ec2 = boto3.resource('ec2', region_name='us-east-2')
    response = ec2.create_instances(ImageId='ami-XXXXXXXXXX’,
                     InstanceType='t2.micro',
                     MinCount=1, MaxCount=1,
                     SecurityGroupIds=['AWS_EC2_XXXXXX’],
                     KeyName='AWS_XXXXX_KEY',
                     IamInstanceProfile={
                         'Arn': 'arn:aws:iam::XXXXXXXXXXXXX:instance-profile/AWS_EC2_SQS_S3_ROLE'
                     }
                   )
EC2实例1(无问题):

EC2实例2(有问题):


子网与
无法定位凭据的
错误之间应该没有连接。您是否能够在“不工作”实例上使用AWS CLI?例如,运行
aws s3 ls
列出存储桶。它应该使用与Python程序相同的凭据。这两个实例是否都是从同一个AMI启动的,在它们上运行时没有什么不同(例如没有改变环境变量)?Thx John。让我试试这个,看看是否有效。