通过 boto 和 Python API 启动 EC2 实例时,我遇到了一个奇怪的问题。只要我不尝试启动预配置的 iops 实例,一切都很好,即使我设置了其他卷映射选项(例如磁盘大小)。
volume_type
但是,如果我通过设置为'io1'
和设置为 None 以外的值来设置 iops 计数iops
,则 run_instances API 调用似乎会成功而没有错误,并且新实例会出现在“待处理”状态,但它们很快就会变为“终止”状态而不会进入“运行”状态。
在下面的代码中,使用boto
(Python 2.7 上为 2.6.0) 建立连接conn
然后us-east-1
再继续:
launch_params = {
'min_count': n_instances, 'max_count': n_instances,
'instance_type': 'm1.large',
'ebs_optimized': True
}
# Launch with provisioned iops or a larger disk if requested (EBS only)
if provisioned_iops is not None or disk_size_gb is not None:
dev_sda = boto.ec2.blockdevicemapping.EBSBlockDeviceType(connection=conn, size=disk_size_gb, delete_on_termination=True)
if provisioned_iops is not None:
dev_sda.iops=int(provisioned_iops)
dev_sda.volume_type = 'io1'
bdm = boto.ec2.blockdevicemapping.BlockDeviceMapping()
bdm['/dev/sda'] = dev_sda
launch_params['block_device_map'] = bdm
launch_params.update(self.instance_defaults)
launch_params.update(ec2_api_options)
res = conn.run_instances(ami_id, **launch_params)
...如果我尝试启动m1.large
AMI,ebs_optimized=True
并且privisioned_iops=500
run_instances 调用成功,并且实例显示为待处理,但随后又返回到终止状态,并且系统日志中没有任何内容。
无需配置 iops 即可启动。
答案1
啊。我一发布就发现了这个问题。我会把这个留给其他有同样问题的人:
run_instances
在创建实例之前不会完全验证所有参数(顺便说一下,第一个小时会向您收费)。具体来说,它确实不是检查并执行“IOPS 和卷大小之间的最大比率为 10:1”限制或“卷大小必须至少为 10GiB”对 PIOPS 卷的限制。如果您违反这些限制,您的实例将似乎已启动但随后立即终止,如果您启动了多个实例,则将花费您不少钱。
使用 50GB EBS 卷启动将允许 500 IOP。