Как использовать boto3 для создания AMI из моментального снимка Amazon EBS - PullRequest
0 голосов
/ 04 октября 2019

При создании изображения (AMI) в AWS с использованием boto3 lib, предоставляя следующие параметры:

ec2.create_image(Name=name, BlockDeviceMappings=[{'DeviceName':device_name,'Ebs':{'SnapshotId':snapshot_id, 'DeleteOnTermination': delete_on_term,
            'VolumeSize':10, 'VolumeType':'gp2'}}])

Я получаю эту ошибку: Missing required parameter in input: "InstanceId" Но когда я создаю изображение из интерфейса пользователя, идентификатор экземпляра не требуется.

На рисунке ниже видно, что я могу создать изображение со страницы «Снимки» без указания идентификатора экземпляра.

enter image description here

Кто-нибудь знает об обходном пути? Спасибо.

Ответы [ 3 ]

1 голос
/ 07 октября 2019

используйте эту функцию register_image для создания изображения из снимков

response = client.register_image(
    ImageLocation='string',
    Architecture='i386'|'x86_64'|'arm64',
    BlockDeviceMappings=[
        {
            'DeviceName': 'string',
            'VirtualName': 'string',
            'Ebs': {
                'DeleteOnTermination': True|False,
                'Iops': 123,
                'SnapshotId': 'string',
                'VolumeSize': 123,
                'VolumeType': 'standard'|'io1'|'gp2'|'sc1'|'st1',
                'Encrypted': True|False,
                'KmsKeyId': 'string'
            },
            'NoDevice': 'string'
        },
    ],
    Description='string',
    DryRun=True|False,
    EnaSupport=True|False,
    KernelId='string',
    Name='string',
    BillingProducts=[
        'string',
    ],
    RamdiskId='string',
    RootDeviceName='string',
    SriovNetSupport='string',
    VirtualizationType='string'
)
0 голосов
/ 04 октября 2019

Когда вы создаете изображение из консоли, вы выбираете выбрать экземпляр и выбираете опцию создания изображения. Таким образом, консоль использует выбранный идентификатор экземпляра, который будет передан для создания изображения.

Когда вам нужно создать изображение с помощью boto3, вам нужно указать API, для какого экземпляра вы создаете изображение, следовательно, вам нужнопередать параметры. Попробуйте это

ec2.create_image(instance_id=yourInstanceId, Name=name, BlockDeviceMappings=[{'DeviceName':device_name,'Ebs':{'SnapshotId':snapshot_id, 'DeleteOnTermination': delete_on_term,
            'VolumeSize':10, 'VolumeType':'gp2'}}])
0 голосов
/ 04 октября 2019

Из официальной документации здесь: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.create_image

Требуется «InstanceId» - он должен содержать идентификатор экземпляра, для которого вы пытаетесь создать образ из.

...