Как получить бесплатный уровень AMI в AWS, используя python с boto3 - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь создать функцию в python, которая создает новый экземпляр ec2 в указанной области c. Для работы функции мне нужно указать AMI этого нового экземпляра. Проблема в том, что один и тот же AMI (например, Amazon Linux) имеет разные идентификаторы в разных регионах, и я не могу использовать изображение одного региона в другом экземпляре региона.

и я не могу понять, как я могу получить этот идентификатор AMI в этом указанном c регионе

def create_instance(region):
        ec2 = boto3.resource('ec2', region)
        instances = ec2.create_instances(InstanceType='t2.micro',
                                         MinCount=1, MaxCount=1,
                                         ImageId='AMI-id') # What do I put here?

На данный момент не очень важно, что такое AMI, кроме того факта, что это Linux и свободный уровень, так что, возможно, будет работать поиск по указанному c известному свободному уровню Linux AMI.

Я знаю, что вы можете получить все AMI, используя функцию description_images (), но как это сделать? Я фильтрую только те из них, которые Linux (может быть указана c версия) и уровень бесплатного доступа

boto3.client('ec2').describe_images(Filters["""What do I write here to get only linux free-tier AMI"""])

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Шон, попробуй это ...

ec2_client= session.client('ec2', region_name=region_name)
print(f'***region_name: {region_name}')
response= ec2_client.describe_instance_types(  
#InstanceTypes=['t2.micro']
Filters=[
    {
        'Name': 'free-tier-eligible',
        'Values': ['true']
        }
    ]
) 
#pprint(response['InstanceTypes'][0]['InstanceType'])

instance_type= response['InstanceTypes'][0]['InstanceType']
response= ec2_client.describe_images(
   Filters=[{'Name': 'name', 'Values': [instance_type]},]   
)
#pprint(response)

for image in response['Images']:
     print(image['ImageId'])

 Result:**************************************
 ***region_name: ap-south-1
 ami-0e84c461
 ami-1154187e
 ami-2f0e7540
 ami-4d8aca22
 ami-50aeed3f
 ami-77a4e718
 ami-cce794a3

Надеюсь, это поможет ...
r0ck

1 голос
/ 16 апреля 2020

AWS System Manager поддерживает список курируемых AWS Linux 2 AMI на /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2

Вот вызов CLI:

$ aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --region us-east-1

{
    "Parameters": [
        {
            "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2",
            "Type": "String",
            "Value": "ami-0323c3dd2da7fb37d",
            "Version": 27,
            "LastModifiedDate": 1586395100.713,
            "ARN": "arn:aws:ssm:us-east-1::parameter/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
        }
    ],
    "InvalidParameters": []
}

Вы должны быть в состоянии сделать то же самое в Python с SSM BOTO3 API .

...