RDS与云形成和AZ问题

Gle*_*eeb 18 amazon-web-services amazon-rds aws-cloudformation

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

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

数据库子网组不符合可用区域覆盖要求.请添加子网以覆盖至少2个可用区域.目前的报道:1

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

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

wjo*_*dan 10

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

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

至于为此选择另一个AZ而不给用户带来负担,有很多方法可以实现这一点.例如,您可以使用Fn::GetAZs和Fn :: Select内部函数自动选择辅助AZ .如果您允许用户选择主要AZ,则还需要一个条件以确保辅助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: ""}]
      # ...
Run Code Online (Sandbox Code Playgroud)