AWS Lambda Boto3: запуск экземпляра с лямбда-бото3 Python Eroor - PullRequest
3 голосов
/ 22 сентября 2019

при попытке запуска экземпляра из экземпляра функции Python, который не запускается, но не получает синтаксическую ошибку Python.

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'
        ])

    amis = sorted(images, key=lambda x: x['CreationDate'], reverse=True)
    print amis[0]['ImageId']
    INSTANCE = ec2.create_instance(ImageId='ImageId', InstanceType='t2.micro', MinCount=1, MaxCount=1)
    print(INSTANCE[0].id)

Пожалуйста, помогите .....

1 Ответ

2 голосов
/ 22 сентября 2019

Вы определили 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)
...