通过 boto 和 Python API 启动 EC2 实例时,我遇到了一个奇怪的问题。只要我不尝试启动配置的 iops 实例,一切都很好,即使我设置了其他卷映射选项(如磁盘大小)也是如此。
但是,如果我通过设置volume_type
为'io1'
和设置为iops
None 以外的值来设置 iops 计数,run_instances API 调用似乎成功且没有错误,并且新实例出现在“待定”状态,但它们很快变为“终止”状态无需输入“运行”。
在以下代码中,它使用(Python 2.7 上的 2.6.0)在继续之前boto
建立连接: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
AMIebs_optimized=True
并且privisioned_iops=500
run_instances 调用成功并且该实例显示为挂起但随后返回终止,系统日志中没有任何内容。
在没有配置的 iops 的情况下启动工作正常。
啊。我一发帖就发现了问题。我会把这个留给有同样问题的其他人:
run_instances
在创建实例之前不会完全验证所有参数(顺便说一句,第一个小时会向您收费)。特别是,它不会检查和强制执行 PIOPS 卷上的“IOPS 和卷大小之间允许的最大比率为 10:1”限制或“卷大小必须至少为 10GiB”限制。如果您违反了这些限制,您的实例将看起来启动但随后立即终止,如果您启动了一堆实例,您将花费好几美元。使用 50GB EBS 卷启动将允许 500 IOP。