Прямо сейчас у меня есть том хранилища EBS в us-east-2b
зона доступности. Однако у меня есть код, который автоматизирует процесс создания экземпляра и использует us-east-2
в качестве зоны доступности. Проблема в том, что экземпляр создается в любой зоне доступности, которую он хочет - us-east-2a
, us-east-2b
, us-east-2c
... и поэтому, когда я пытаюсь присоединить том к экземпляру, возникает следующая ошибка:
Aws::EC2::Errors::InvalidVolumeZoneMismatch (The volume 'vol-XXXX' is not in the same availability zone as instance 'i-XXXX')
Чтобы обеспечить некоторую согласованность и избежать этой проблемы, я просто хотел бы создать экземпляр в определенной зоне доступности, такой как us-east-2b
, чтобы он соответствовал тому же объему хранилища EBS.
Я также использую ruby aws-sdk
для это. Есть идеи, возможно ли это?
Если я попробую указать us-east-2b
, то получу следующую ошибку:
2.5.1 :080 > @ec2 = Aws::EC2::Resource.new(region: 'us-east-2b')
Traceback (most recent call last):
2: from (irb):80
1: from (irb):80:in `new'
ArgumentError (:region option must a region name, not an availability zone name; try `us-east-2' instead of `us-east-2b')
, поэтому я не понимаю, как можно решить эту проблему. Нужно ли мне просто продолжать воссоздавать экземпляры в зоне доступности xxx-2
, пока я волшебным образом не окажусь в xxx-2b
?Или мне нужно найти другой способ непрерывной репликации моментальных снимков взад и вперед, чтобы объем хранилища EBS был согласован во всех 3 зонах доступности в us-east-2a / b / c
?
Пропустил шаг в документации и понял, что могу указать конкретную зону доступности (например, 2a, 2b, 2c), указав subnet_id
при использовании .create_instance.
Например:
instances = @ec2.create_instances({
min_count: 1,
max_count: 1,
image_id: @ec2_config[:image_id],
key_name: @ec2_config[:key_name],
security_group_ids: [@ec2_config[:security_group_id]],
instance_type: @ec2_config[:instance_type],
subnet_id: "subnet-xxxx" # availability zone us-east-2b (same as ebs volume)
})