Назад | Перейти на главную страницу

Как указать необходимый VPC и подсеть в шаблоне AWS CloudFormation

Я новичок в сервисах Amazon и особенно в CloudFormation.

Итак, я начал читать «Начало работы с CloudFormation» с сайта Amazon. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html и теперь я пытаюсь запустить пример шаблона CloudFormation https://s3.amazonaws.com/cloudformation-templates-us-east-1/WordPress_Single_Instance_With_RDS.template как описано во введении в вики.

Но прежде я удалил VPC по умолчанию и добавил новый (10.0.0.0/16) и создал в нем новую подсеть - 10.0.0.0/24. Согласно документам AWS, я не могу установить свой собственный VPC по умолчанию, и теперь шаблон CloudFormation, описанный выше, не может быть запущен, и я вижу такую ​​ошибку:

Согласно странице AWS https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-cloudformer-default-vpc/ Я могу исправить эту проблему, описав мой новый VPC, но я не знаю, почему это нужно делать правильно.

Возможно ты можешь помочь мне?

Если вы хотите продолжить использование удаленного VPC по умолчанию, вам придется обратиться в службу поддержки AWS, чтобы создать его снова. Ресурсы AWS из используемого вами шаблона зависят от него.

В противном случае вам придется немного настроить его, чтобы его можно было использовать с нестандартными VPC. Предлагаются изменения:

0) Передайте свой идентификатор VPC и идентификаторы подсети в качестве параметров CloudFormation:

    "myVPC": {
        "Description" : "Id of my VPC",
        "Type"        : "String",
        "Default"     : "vpc-XXXXXXXX"
    },

    "MySubnet": {
        "Description" : "My subnet from my VPC",
        "Type": "String",
        "Default": "subnet-YYYYYYYY"
    },      

    "RDSSubnets": {
        "Description" : "RDS subnets from my VPC",
        "Type": "CommaDelimitedList",
        "Default": "subnet-YYYYYYY1,subnet-YYYYYY2"
    },      

1) Группы безопасности должны быть созданы в вашем новом VPC, идентифицированном по идентификатору VPC:

"DBSecurityGroup": {
  "Type": "AWS::RDS::DBSecurityGroup",
  "Properties": {
===>>> "EC2VpcId" : { "Ref" : "myVPC" }, <<<====
       "DBSecurityGroupIngress": { "EC2SecurityGroupName": { "Ref": "WebServerSecurityGroup"} },
       "GroupDescription"      : "Frontend Access"
  }
},

"WebServerSecurityGroup" : {
  "Type" : "AWS::EC2::SecurityGroup",
  "Properties" : {
===>>> "VpcId" : {"Ref" : "myVPC"}, <<<====
       "GroupDescription" : "Enable HTTP access via port 80 and SSH access",
       "SecurityGroupIngress" : [
         {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"},
         {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : { "Ref" : "SSHLocation"}}
       ]
  }
}

2) измените свой экземпляр EC2 на использование вашей подсети VPC 1:

"WebServer": {
  "Type": "AWS::EC2::Instance",
  ...
  "Properties": {
     "SubnetId": { "Ref": "MySubnet1" },
  ...

3) Создайте группу подсети БД RDS с вашими подсетями VPC, выделенными для RDS (вам необходимо создать подсеть в VPC как минимум в двух Зонах доступности региона, в котором существует VPC):

"MyDBSubnetGroup" : {
  "Type" : "AWS::RDS::DBSubnetGroup",
  "Properties" : {
    "DBSubnetGroupDescription" : "Subnets available for the RDS DB Instance",
    "SubnetIds" : { "Ref" : "RDSSubnets" },
  }
},

4) измените свой экземпляр RDS, чтобы использовать вашу подсеть VPC и группу безопасности (замените DBSecurityGroups параметр с VPCSecurityGroups):

"DBInstance" : {
  "Type": "AWS::RDS::DBInstance",
  "Properties": {
      "DBSubnetGroupName" : { "Ref" : "MyDBSubnetGroup" },
      "VPCSecurityGroups" : [ { "Ref" : "DBSecurityGroup" } ],
      ...

Более подробную информацию об используемых параметрах можно найти в документации AWS: