CloudFormation выдает «Значение () для параметра groupId недопустимо. Значение не может быть пустым» при запуске экземпляра EC2 - PullRequest
0 голосов
/ 20 июня 2019

Я хотел написать полный шаблон CloudFormation для одного экземпляра Linux EC2 в общедоступной подсети. Я использовал шаблон AWS CloudFormation для создания экземпляра EC2 с группой безопасности в качестве отправной точки. Этот шаблон запускает экземпляр в VPC по умолчанию.

Моя цель состояла в том, чтобы иметь автономный шаблон, который создает все необходимое в новом стеке, но не в VPC по умолчанию. Я хотел новый VPC, группу безопасности, таблицу маршрутов, интернет-шлюз, подсеть и запустить новый экземпляр Linux EC2.

Итак, я использовал вышеуказанный шаблон, добавил необходимые ресурсы и связал их, используя Ref s. Все было хорошо: VPC, Subnet, Security Group, Internet GW, RouteTables и т. Д. Но My EC2 выдает ошибку и стек откатывается.

Причина статуса:

Value () for parameter groupId is invalid. The value cannot be empty (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx)

Ресурс EC2 в шаблоне CloudFormation выглядел следующим образом:

"EC2Instance" : {
        "Type" : "AWS::EC2::Instance",
        "Properties" : {
          "InstanceType" : { "Ref" : "InstanceType" },
          "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
          "KeyName" : { "Ref" : "KeyName" },
          "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
                            { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }
          }
      }

В сообщении об ошибке не было ясно, что делать.

1 Ответ

0 голосов
/ 20 июня 2019

После поиска по сообщению об ошибке я сталкивался со многими людьми, ворчащими по поводу смутного сообщения об ошибке, но без конкретного исправления для ресурса EC2 в шаблоне CloudFormation.

Некоторые люди упоминали, что когда вы этого не делаетезапустите EC2 в VPC по умолчанию, вместо имен групп безопасности необходимо указать идентификаторы групп безопасности.

Проверка ссылки для типа ресурса облачного формирования EC2 , такая:

SecurityGroups

[EC2-Classic, VPC по умолчанию] Имена групп безопасности.Для VPC без дефолта вместо этого вы должны использовать идентификаторы группы безопасности.

В верхней части страницы идентификаторы группы безопасности указываются для EC2 следующим образом:

"SecurityGroupIds" : [ String, ... ],

Поэтому я изменил свой ресурс EC2 следующим образом:

"EC2Instance" : {
        "Type" : "AWS::EC2::Instance",
        "Properties" : {
          "InstanceType" : { "Ref" : "InstanceType" },
          "SecurityGroupIds" : [ 
              { "Fn::GetAtt" : [ "InstanceSecurityGroup", "GroupId" ] }
            ],
          "SubnetId" : {"Ref":"TestSubnet"},
          "KeyName" : { "Ref" : "KeyName" },
          "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
                            { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }
          }
      },

, и это сработало.

...