如何使用 boto3 从 Amazon EBS 快照创建 AMI

How to use boto3 to create an AMI from an Amazon EBS Snapshot

使用 boto3 库在 AWS 中创建映像 (AMI) 时,提供以下参数:

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" 但是当我从用户界面创建图像时,不需要实例 ID。

在下图中,您可以看到我可以从 'Snapshots' 页面创建图像,而无需指定实例 ID。

有人知道解决方法吗?谢谢

来自这里的官方文档: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.create_image

"InstanceId" 是必需的 - 它必须包含您尝试创建图像的实例 ID。

从控制台创建映像时,您 select select 实例和 select 创建映像选项。因此控制台使用要传递的 selected 实例 ID 来创建图像。

当您需要使用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'}}])

使用此功能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'
)