如何使用Boto启动EC2实例,指定EBS的大小?

Iro*_*low 26 python amazon-ec2 boto amazon-web-services

我正在使用boto/python来启动一个从EBS卷启动的新EC2实例.在我启动实例时,我想覆盖引导EBS卷的默认大小.

我发现没有可能适合我的启动代码的boto方法或参数:

ec2 = boto.connect_ec2( ACCESS_KEY, SECRET_KEY, region=region )

reservation = ec2.run_instances( image_id=AMI_ID, 
                                 key_name=EC2_KEY_HANDLE, 
                                 instance_type=INSTANCE_TYPE,
                                 security_groups = [ SECGROUP_HANDLE, ] )
Run Code Online (Sandbox Code Playgroud)

此网页显示如何使用命令行工具增加正在运行的EC2实例的EBS卷的大小,但我想在指定EC2实例时使用boto:

j0n*_*nes 42

您必须先创建块设备映射:

dev_sda1 = boto.ec2.blockdevicemapping.EBSBlockDeviceType()
dev_sda1.size = 50 # size in Gigabytes
bdm = boto.ec2.blockdevicemapping.BlockDeviceMapping()
bdm['/dev/sda1'] = dev_sda1 
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以在run_instances通话中提供阻止设备地图:

reservation = ec2.run_instances( image_id=AMI_ID, 
                                 key_name=EC2_KEY_HANDLE, 
                                 instance_type=INSTANCE_TYPE,
                                 security_groups = [ SECGROUP_HANDLE, ],
                                 block_device_mappings = [bdm])
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并没有很好地记录,但可以在源代码中找到该示例.

  • **重要说明**:在Boto中,默认情况下为"delete_on_termination = False".但是,在Web控制台中,默认情况下会选中"终止时删除"复选框. (6认同)
  • 在较新版本的Boto中,`run_instances()`方法中的参数`block_device_mappings`已经被重命名为`block_device_map`,并且应该是`BlockDeviceMapping`类型,而不是这样的数组. (3认同)
  • 这有效!谢谢!像我这样的其他新手的一个警告:我认为我会聪明并将`/ dev/sda1`更改为`/ dev/xvda1`,因为在我运行的Ubuntu实例上,这是启动卷的名称,根据`df -h`命令.无论出于何种原因,失败的错误消息:"无效的设备名称/ dev/xvda1"所以我将其更改回`/ dev/sda1`并且一切顺利. (2认同)
  • 迟来的评论,但也许有用。您可以使用 boto.ec2.image.Image 对象中的“block_device_mapping”值,对其进行修改,然后直接将其用作 boto.ec2.image.Image.run() 的 run_instances() 的“block_device_map”参数 (2认同)