RDS与云形成和AZ问题

时间:2015-11-15 17:07:07

标签: amazon-web-services amazon-rds amazon-cloudformation

我正在使用云形成来创建包含RDS实例的设置。

由于出现以下错误,我在创建RDS实例时遇到了一些困难:

  

数据库子网组不符合可用区覆盖要求。   请添加子网以覆盖至少2个可用区域。当前   覆盖范围:1

问题是整个设置都在一个AZ上......我该怎么办?只是在不同的AZ中创建一个额外的子网,其中没有任何内容只适用于RDS?

也许AWS可以通过某种方式自动创建该子网,让我摆脱困境。我不想要那个额外的子网,我不想让我的用户为此选择另一个AZ负担。

4 个答案:

答案 0 :(得分:8)

是的,即使对于完全包含在单个可用区[AZ]中的部署,您也必须在不同的AZ中创建一个额外的子网并将其包含在您的数据库子网组中。此要求的基本原理是支持高可用性多可用区部署,如RDS用户指南的Working with a DB Instance in a VPC部分所述:

  

对于多可用区部署,为区域中的两个或更多可用区定义子网允许Amazon RDS在需要时在另一个可用区中创建新备用数据库。您甚至需要为单可用区部署执行此操作,以防您希望在某些时候将它们转换为多可用区部署。

至于为此选择另一个AZ而不给用户增加负担,有很多方法可以做到这一点。例如,您可以使用Fn::GetAZsFn::Select内在函数自动选择辅助AZ。如果您允许用户选择主要AZ,则您还需要Condition以确保辅助AZ不等于所选的主要AZ。

这是一个示例模板代码段:

Parameters:
  PrimaryAZ:
    Type: AWS::EC2::AvailabilityZone::Name
    Description: Primary AZ
Conditions:
  IsFirstPrimaryAZ:
    Fn::Equals:
    - !Ref PrimaryAZ
    - Fn::Select [0, {Fn::GetAZs: ""}]
Resources:
  Subnet1:
    Type: "AWS::EC2::Subnet"
    Properties:
      AvailabilityZone: !Ref PrimaryAZ
      # ...
  Subnet2:
    Type: "AWS::EC2::Subnet"
    Properties:
      AvailabilityZone:
        Fn::If:
        - IsFirstPrimaryAZ
        - Fn::Select [1, {Fn::GetAZs: ""}]
        - Fn::Select [0, {Fn::GetAZs: ""}]
      # ...

答案 1 :(得分:1)

是。只需删除其中一个子网,然后使用不同的可用区再次创建相同的子网。

答案 2 :(得分:0)

只需添加有关此问题的更多详细信息。  我解决了在RDS>子网组中评估子网组的问题。  (子网组是仅在RDS上下文中存在的概念。在VPC上下文中不存在)

在我的情况下,第一次尝试创建RDS Mysql选择我的个性化VPC(不是默认VPC)时自动创建了一个子网组,但是我认为RDS脚本创建了一个子网组,从我的VPC中选择了前三个子网:< / p>

  • 子网1区域1a,
  • 子网2区域1a,
  • 子网3区域1b

我创建了3个用于RDS的专用子网:

  • 子网4区域1a,
  • 子网5区域1b,
  • 子网6区域1c

    不可能修改子网组,然后创建一个子网组,然后选择3个具有相同acl和路由配置的子网,每个子网都位于不同的区域(1a,1b,1c)。然后,我删除了另一个配置错误的子网组。 返回RDS仪表板,在Create RDS中单击,选择所需的所有数据库详细信息,选择所需的VPS,然后看到选定的子网组名称。问题已解决。

答案 3 :(得分:-2)

创建一个新的主题,该主题与其他主题的可用区域不同