В CloudFormation сохраните идентификатор подсети в хранилище параметров.

У меня есть шаблон CloudFormation для создания VPC и добавления к нему подсети и группы безопасности. Мне нужно сохранить идентификатор новой группы безопасности и идентификатор подсети в AWS Parameter Store.

Это отлично работает для группы безопасности, использующей Value: !GetAtt [securityGroup, GroupId] в, но я не могу понять, как ссылаться на идентификатор подсети способом, который работает с хранилищем параметров.

Вот соответствующие части CloudFormation:

Resources:

### Subnet resource ###

  subnet1:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: !Ref SubnetAvailabilityZone1
      CidrBlock: 10.2.0.0/16
      VpcId: !Ref requesterVpc

### Parameter Store resource ###

  subnet1Id:
    Type: AWS::SecretsManager::Secret
    Properties:
      Description: Lambda Subnet ID
      Name: /lambda-vpc/subnet/1
      Value: !GetAtt [subnet1, id] # <---------- this doesn't work        (Error A below)
      Value: !Ref subnet1          # <---------- this doesn't work either (Error B below)

Ошибка А

Понятно, что попытка получить атрибут 'id' подсети дает ошибку

ресурс subnet1 не поддерживает идентификатор типа атрибута в Fn :: GetAtt.

Я также пробовал SubnetId безрезультатно. Изучите документацию CF подсети показывает, что нет атрибута для идентификатора подсети, возвращаемого с помощью Fn::GetAtt.

Ошибка B

Попытка получить идентификатор подсети с помощью Fn::Ref также не работает. Несмотря на то, что в документации указано, что Ref возвращает идентификатор подсети, попытка обновления стека CF дает эту ошибку при попытке создать / обновить параметр subnet1Id:

Ошибка проверки свойства: [Обнаружены неподдерживаемые свойства в {/}: [Значение]]


person amacrobert    schedule 30.12.2020    source источник


Ответы (1)


Проблема заключалась в типе ресурса AWS, который я использовал для параметров.

Я использовал AWS::SecretsManager::Secret, но мне нужно AWS::SSM::Parameter. После переключения на это и добавления Type: String в свойства !Ref subnet1 заработало.

person amacrobert    schedule 30.12.2020
comment
В дополнение к этому я рекомендую изучить CDK, который может помочь вам упростить некоторые из этих задач в будущем. Это IaC и работает на многих разных языках, включая .Net Core, Python, Typescript и Java. - person Alex Bailey; 30.12.2020