创建新的 EC2 实例时,是否可以指定与我的 EBS 存储相同的可用区域?

创建新的 EC2 实例时,是否可以指定与我的 EBS 存储相同的可用区域?

现在我在us-east-2b可用区中有一个 EBS 存储卷。但是,我有一些代码可以自动执行创建实例的过程,并将其用作us-east-2其可用区。问题是实例似乎是在它想要的任何可用区中创建的 -- us-east-2aus-east-2bus-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我也为此使用了 ruby ​​。知道这是否可行吗?

如果我尝试指定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

答案1

错过了文档中的一个步骤,然后意识到我可以指定一个具体的可用区(例如 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)
        })

相关内容