我正在使用云形成来创建包含RDS实例的设置。
由于出现以下错误,我在创建RDS实例时遇到了一些困难:
数据库子网组不符合可用区覆盖要求。 请添加子网以覆盖至少2个可用区域。当前 覆盖范围:1
问题是整个设置都在一个AZ上......我该怎么办?只是在不同的AZ中创建一个额外的子网,其中没有任何内容只适用于RDS?
也许AWS可以通过某种方式自动创建该子网,让我摆脱困境。我不想要那个额外的子网,我不想让我的用户为此选择另一个AZ负担。
答案 0 :(得分:8)
是的,即使对于完全包含在单个可用区[AZ]中的部署,您也必须在不同的AZ中创建一个额外的子网并将其包含在您的数据库子网组中。此要求的基本原理是支持高可用性多可用区部署,如RDS用户指南的Working with a DB Instance in a VPC部分所述:
对于多可用区部署,为区域中的两个或更多可用区定义子网允许Amazon RDS在需要时在另一个可用区中创建新备用数据库。您甚至需要为单可用区部署执行此操作,以防您希望在某些时候将它们转换为多可用区部署。
至于为此选择另一个AZ而不给用户增加负担,有很多方法可以做到这一点。例如,您可以使用Fn::GetAZs
和Fn::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>
我创建了3个用于RDS的专用子网:
子网6区域1c
不可能修改子网组,然后创建一个子网组,然后选择3个具有相同acl和路由配置的子网,每个子网都位于不同的区域(1a,1b,1c)。然后,我删除了另一个配置错误的子网组。 返回RDS仪表板,在Create RDS中单击,选择所需的所有数据库详细信息,选择所需的VPS,然后看到选定的子网组名称。问题已解决。
答案 3 :(得分:-2)
创建一个新的主题,该主题与其他主题的可用区域不同