Ошибка формата шаблона: неразрешенные зависимости ресурса - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь создать экземпляр EC2 с шаблоном ниже:

Parameters:
  KeyName:
    Default: TestKeyPair
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
    Type: AWS::EC2::KeyPair::KeyName
Resources:
  Dev:
    Properties:
      ImageId: ami-4e79ed36
      InstanceType: t2.micro
      KeyName: !Ref 'KeyName'
      SecurityGroups:
        - !Ref 'SSH'
    Type: AWS::EC2::Instance

, но получаю:

An error occurred (ValidationError) when calling the CreateChangeSet operation: Template format error: Unresolved resource dependencies [SSH] in the Resources block of the template

Я не могу понять, что не так в шаблоне, так как безопасностьгруппа с именем "SSH" уже присутствует:

$ aws ec2 describe-security-groups --group-names SSH
....
"IpPermissions": [
    {
        "ToPort": 22,
        "IpRanges": [
            {
                "CidrIp": "0.0.0.0/0"
            }
        ],
        "FromPort": 22,
        "IpProtocol": "tcp",
        "UserIdGroupPairs": [],
        "PrefixListIds": [],
        "Ipv6Ranges": []
    }
],
"GroupName": "SSH",
"GroupId": "sg-3b8bc345",
"Description": "Enable SSH access via port 22",
"OwnerId": "150811659115",
"VpcId": "vpc-a84688cf"
....

1 Ответ

0 голосов
/ 05 июня 2018

!Ref работает только для логического идентификатора, который существует в шаблоне.Это не означает, что вы не можете ссылаться на существующую группу безопасности, это просто означает, что вам придется ссылаться на нее другим способом.Для вашего конкретного случая использования я предлагаю вам передать группу безопасности в качестве параметра стека следующим образом:

Parameters:
  KeyName:
    Default: TestKeyPair
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
    Type: AWS::EC2::KeyPair::KeyName
  SSHSecurityGroup:
    Description: SecurityGroup that allows access to the instance via SSH
    Type: AWS::EC2::SecurityGroup::Id
Resources:
  Dev:
    Properties:
      ImageId: ami-4e79ed36
      InstanceType: t2.micro
      KeyName: !Ref 'KeyName'
      SecurityGroups:
        - !Ref SSHSecurityGroup
    Type: AWS::EC2::Instance

При создании стека вам просто нужно передать группу безопасности SSH в соответствующее поле.


При этом у вас не будет много динамических настроек, если вы сделаете это таким образом.Вы должны либо определить группу безопасности в этом шаблоне и ссылаться на нее напрямую (используя !Ref), либо создать шаблон, который управляет всеми группами безопасности и использовать функцию экспорта / импорта CloudFormation для ссылки на группы безопасности между стеками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...