AWS Lambda 创建 EC2 并关联 EIP

AWS Lambda create EC2 and associate EIP

我正在尝试部署一个 EC2 实例并将 EIP 关联到它,但是在尝试关联 EIP 时出现错误,因为该实例不是 运行。这是我的代码:

import boto3
from botocore.exceptions import ClientError
 
AMI = 'ami-0bf84....'    
INSTANCE_TYPE = 't2.micro'
KEY_NAME = 'EC2company'
SUBNET_ID = 'subnet-065....'
 
 
ec2 = boto3.client('ec2')
 
def lambda_handler(event, context):
 
    instance = ec2.run_instances(
        ImageId=AMI,
        InstanceType=INSTANCE_TYPE,
        KeyName=KEY_NAME,
        SubnetId=SUBNET_ID,
        MaxCount=1,
        MinCount=1
    )
        
    waiter = ec2.get_waiter('instance_running')
    
    try:
        response = ec2.associate_address(
            AllocationId='eipalloc-0bc.....',
            InstanceId=instance['Instances'][0]['InstanceId'],
        )
        print(response)
    except ClientError as e:
        print(e)

我想这个问题与以错误的方式应用服务员有关,但我不确定我应该怎么做。

根据 EC2 waiters,您可以创建一个服务员:

waiter = client.get_waiter('instance_running')

然后您激活服务员:

waiter.wait(InstanceIds=['i-xxx']

它每 15 秒轮询一次 EC2.Client.describe_instances(),直到达到成功状态。 40 次检查失败后返回错误。