在 boto 中使用增加的房间体积大小创建 AWS ami 的正确语法是什么?

What is the proper syntax to create AWS ami with the increased room volume size in boto?

我有用 boto(不是 boto3!)编写的程序。该程序成功创建了 AMI,但使用的是标准根卷。我像在 boto3 中一样添加了 BlockDeviceMappings,但出现了一堆错误。

ami_id = instance.create_image(name=get_name("ami"),
                               description="MP\
                               %s" % (get_name("ami")[-3:]),
                               BlockDeviceMappings=[
            {
                'DeviceName': '/dev/sda1',
                'Ebs': {
                    'VolumeSize': 30,
                },
            },
        ],)

检查过这个脚本,语法不正确。 boto 中的正确语法是什么?

就像你提到的,你的语法是错误的。我没试过这个,但这应该给你一个线索。 boto.ec2.blockdevicemapping

class boto.ec2.blockdevicemapping.BlockDeviceMapping(connection=None)

表示创建ec2时BlockDeviceTypes的集合 实例。

dev_sda1 = BlockDeviceType()
dev_sda1.size = 100 # change root volume to 100GB instead of default
bdm = BlockDeviceMapping()
bdm[‘/dev/sda1’] = dev_sda1
ami_id = instance.create_image(name='...', block_device_mapping=bdm, ....)

根据helloV的建议我修改了代码,但最终的脚本有些不同。在 boto(不是 boto3)中,不能将 block_device_mapping 包含到 instance.create_image 中,需要使用方法 connection.create_image。所以工作代码如下:

dev_sda1 = BlockDeviceType()
dev_sda1.size = 30 # change root volume to 30GB instead of default
bdm = BlockDeviceMapping()
bdm['/dev/sda1'] = dev_sda1

ami_id = ec2_connection.create_image(instance.id, name="NewAmi,  description="NewAMI",
                               block_device_mapping=bdm)