为什么CloudFormation不会创建我的数据库?

时间:2016-09-20 13:06:11

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

我一直在CloudFormation上收到此错误:

Cannot create a db.t2.small database instance because no subnets exist
in availability zones with sufficient capacity for VPC and storage 
type : standard for db.t2.small.
Please first create at least one new subnet; choose from these
availability zones: us-west-2b, us-west-2a, us-west-2c.

除了通过CloudFormation安全地创建和配置我的应用程序之外,我没有为VPC及其子网设定特定目标。数据库必须能够与EC2实例通信。理想情况下,我也可以使用PgAdmin安全地访问数据库,但这不是一个交易破坏者。

以下是配置文件各部分的相关行:

DatabaseInstance:
 Type: AWS::RDS::DBInstance
 Properties:
   AllocatedStorage: 1
   DBInstanceClass: db.t2.small
   PubliclyAccessible: no

VirtualPrivateNetwork:
 Type: "AWS::EC2::VPC"
   Properties: 
     CidrBlock: 10.0.0.0/16

PrivateSubnet:
 Type: "AWS::EC2::Subnet"
   Properties: 
     AvailabilityZone: us-west-2b
     CidrBlock: 10.0.1.0/24
     VpcId:
       Ref: VirtualPrivateNetwork

PublicSubnet:
  Type: "AWS::EC2::Subnet"
  Properties: 
    AvailabilityZone: us-west-2b
    CidrBlock: 10.0.0.1/24
    VpcId:
      Ref: VirtualPrivateNetwork

有关为什么它会给我这个令人沮丧的错误消息的任何想法?

1 个答案:

答案 0 :(得分:1)

在我看来,你在EC2-VPC中有一个与之关联的默认VPC,除非你另有说明,否则所有新数据库实例都是在默认的VPC中创建的。

转到RDS页面并查找

Supported Platforms

如果支持的平台指示VPC,请检查默认VPC。

请查看此页面以获取详细说明:Check RDS VPC

为了满足您的要求,我建议您在与EC2实例相同的VPC中创建数据库,但可能在不同的私有子网中隔离它?或者尝试在现有的默认VPC中创建新子网。最后,您可以了解如何进行此操作,但要在VPC中实现数据库实例创建,您可以尝试以下方法:

1)创建数据库子网组并为其附加子网。 2)将上面的数据库子网组连接到数据库实例。

例如:

     "PrivateSubnet2":{
     "Type":"AWS::EC2::Subnet",
     "Properties":{
        "VpcId":{
           "Ref":"VirtualPrivateNetwork"
        },
        "CidrBlock":"10.0.3.0/24"
        "AvailabilityZone":"us-west-2c"
     }
  },

      "myDBSubnetGroup":{
     "Type":"AWS::RDS::DBSubnetGroup",
     "Properties":{
        "DBSubnetGroupDescription":"RDS subnet group",
        "SubnetIds":[
           {
              "Ref":"PrivateSubnet"
           },
           {
              "Ref":"PrivateSubnet2"
           }
        ]
     }
  },

DatabaseInstance:
 Type: AWS::RDS::DBInstance
 Properties:
  AllocatedStorage: 1
  DBInstanceClass: db.t2.small
  PubliclyAccessible: no
  "DBSubnetGroupName":{
    "Ref":"myDBSubnetGroup"
     },

如果您遇到任何问题,请与我们联系。