当通过boto和Python API启动EC2实例时,我遇到了一个奇怪的问题。 一切都很好,只要我不试图启动configuration的iops实例,即使我设置了其他卷映射选项,如磁盘大小。
但是,如果我通过将volume_type设置为'io1'并将iops设置为None以外的值来设置iops计数,则run_instances API调用看起来成功而没有错误,并且新实例显示为“挂起”状态,但是它们很快会更改为没有进入“跑步”的“终止”状态。
在下面的代码中,在继续之前,它使用boto (Python 2.7上的2.6.0)build立一个连接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且ebs_optimized=True privisioned_iops=500则run_instances调用成功,实例显示为挂起,但随后返回到系统日志中没有任何内容终止。
没有提供的iops启动工作正常。
哎呀。 只要我张贴我发现问题。 我会把这个留给任何有同样问题的人:
在创build实例之前, run_instances不会完全validation所有参数(顺便说一句,您将收取第一个小时的费用)。 特别是,它不检查和执行PIOPS卷上“IOPS和卷大小之间允许10:1的最大比率”限制或“卷大小必须至less为10GiB”的限制。 如果您违反了这些限制,您的实例将会启动,但是会立即终止,如果您启动了一堆,那么您将花费很less的钱。
使用50GB EBS卷启动将允许500 IOP。