Al crear una imagen (AMI) en AWS con boto3 lib, proporciona los siguientes parámetros:

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

Recibo este error: Missing required parameter in input: "InstanceId" Pero cuando creo una imagen desde la interfaz de usuario, no se requiere una identificación de instancia.

En la imagen a continuación, puede ver que puedo crear la imagen desde la página 'Instantáneas', sin especificar el Id. De instancia.

enter image description here

¿Alguien sabe de una solución? Gracias.

1
codebee 4 oct. 2019 a las 00:45

3 respuestas

La mejor respuesta

Use esta función register_image para crear imágenes a partir de instantáneas

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'
)
1
Josh 7 oct. 2019 a las 18:26

Cuando crea una imagen desde la consola, selecciona seleccionar la instancia y selecciona la opción crear imagen. Por lo tanto, la consola utiliza la identificación de instancia seleccionada para pasarla al crear la imagen.

Cuando necesite crear una imagen usando boto3, debe indicarle a la API para qué instancia está creando la imagen, por lo tanto, debe pasar los parámetros. Prueba esto

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
Juned Ahsan 3 oct. 2019 a las 22:27

De la documentación oficial aquí: https: // boto3. amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.create_image

Se requiere "InstanceId": debe contener el ID de instancia desde el que está intentando crear la imagen.

0
JohnB 3 oct. 2019 a las 22:18
58227287