Вы определили ec2 дважды,
ec2 = boto3.client('ec2')
ec2 = boto3.resource('ec2')
client = boto3.client('ec2')
и даже еще раз для клиента.Пожалуйста, используйте только один client
или resource
.Кроме того, нет create_instance
, и кажется, что это опечатка функции create_instances
для ресурса.
Вот пример:
import boto3
ec2 = boto3.resource('ec2', region_name='us-east-2')
def lambda_handler(event, context):
images = ec2.images.filter(
Filters=[
{
'Name': 'description',
'Values': [
'lambdaami',
]
},
],
Owners=[
'self'
])
AMI = sorted(images, key=lambda x: x.creation_date, reverse=True)
IMAGEID = AMI[0].image_id
INSTANCE = ec2.create_instances(ImageId=IMAGEID, InstanceType='t2.micro', MinCount=1, MaxCount=1)
print(INSTANCE[0].image_id)
Чтобы сделатьизображение из экземпляра и ждать этого,
import boto3
import time
ec2 = boto3.resource('ec2', region_name='us-east-2')
def lambda_handler(event, context):
instanceId = 'What instance id you want to create an image'
response = ec2.Instance(instanceId).create_image(Name='Image Name')
imageId = response.image_id
while(ec2.Image(imageId).state != 'available'):
time.sleep(5) # Wait for 5 seconds for each try.
# Since we know the imageId, no needs for other codes
instance = ec2.create_instances(ImageId=imageId, InstanceType='t2.micro', MinCount=1, MaxCount=1)
print(instance[0].image_id)