Прямо сейчас у меня есть объем хранилища 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.
Я тоже использую рубин 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)
})