2014-12-18 38 views
0

这怎么可能与博托时获得可用性区错了吗?宝途上创建一个EC2体积现货实例

<Response><Errors><Error><Code>InvalidVolume.ZoneMismatch</Code><Message>The volume 'vol-6c954e27' is not in the same availability zone as instance 'i-3c7d1113'</Message></Error></Errors><RequestID>8332fa44-3ca5-4a4e-aef4-ce928c258a03</RequestID></Response> 

1)I使一个点请求:

req = conn_spot.request_spot_instances(price=self.spot_price,instance_type=self.instance_type, ebs_optimized=self.ebs_optimized,           image_id=self.ami,availability_zone_group=self.zone,key_name=self.keypair,security_groups=[self.security_group]) 

2)I附体积:

region_id = boto.ec2.get_region(self.region_id, aws_access_key_id=self.aws_access_key_id, 
           aws_secret_access_key=self.aws_secret_access_key) 
conn = ec2.connection.EC2Connection(region=region_id, aws_access_key_id=self.aws_access_key_id, 
             aws_secret_access_key=self.aws_secret_access_key) 
conn.create_volume(self.volume, self.zone,volume_type=self.volume_type,iops=self.iops) 

区通过设置self.zone其是用于两者都相同的是us-east-1a,但服务器是在我们创建的东东1e,而音量是us-east-1a我错过了什么?

没有当场要求无视我需要带?

+0

我不熟悉伯特(我更喜欢使用REST API直接),但它听起来像,从http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-pricing-interruptions.html #spot-az-provision,如果你想在所有情况下控制你的实例的启动位置,你最好指定* subnet *而不是“可用区域组”。 – 2014-12-19 03:44:40

回答

0

RequestSpotInstances documentation

AvailabilityZoneGroup

用于出价的逻辑分组的用户指定的名称。

当您指定在现货实例请求一个可用性区域集团,在要求所有现货实例在同一个可用性区域被启动。实例接近度由此参数维护,但可用区的选择不是。该组仅适用于相同实例类型的竞价型实例的出价。只要组中至少有一个实例仍处于活动状态,则在同一可用区中启动使用相同可用区组名称指定的其他竞价型实例请求。

所以,这个领域实际上并不指定特定的可用性区域。相反,它是用户指定的名称,用于将实例组合在一起保存在同一个可用区中。

placement字段用于指定可用性区域,但我怀疑这只是在EC2-Classic,可使用。

在VPC下运行时,实际上应指定subnet_id,因为每个子网都位于单个可用区域内。

get_only_instances()启动实例的详细信息中提取可用区域,然后将该值用于create_volume()调用也是明智的。这将保证匹配的可用区域。