Как вставить идентификаторы ресурсов AWS в файлы конфигурации приложения

#amazon-web-services #amazon-elastic-beanstalk

#amazon-веб-сервисы #amazon-elastic-beanstalk

Вопрос:

Я следую руководству AWS по развертыванию сайта HA WordPress в Elastic Beanstalk, которое включает использование eb-php-wordpress расширения. Процесс требует редактирования нескольких файлов конфигурации с известными идентификаторами ресурсов перед развертыванием приложения.

В частности, в инструкциях указано редактировать efs-create.config файл с идентификатором VPC и идентификаторами подсети. Файл, помимо прочего, помогает установить OptionSettings свойство AWS::ElasticBeanstalk::Environment ресурса. По этой причине я подозреваю, что я должен просто иметь возможность ссылаться на него Ref: . Правильно ли это, хотя, поскольку VPC будет создан другим файлом, а стек Cloudformation среды EB создается рядом со стеком VPC, а не «внутри» него? Должен ли я использовать Fn:: вызов для получения информации?

Раздел файла конфигурации, с которым я работаю, выглядит следующим образом:

 option_settings:
  aws:elasticbeanstalk:customoption:
    EFSVolumeName: "EB-EFS-Volume"
    VPCId: "vpc-XXXXXXXX"
## Subnet Options
    SubnetA: "subnet-XXXXXXXX"
    SubnetB: "subnet-XXXXXXXX"
    SubnetC: "subnet-XXXXXXXX"
    SubnetD: "subnet-XXXXXXXX"
  

Будет ли строка идентификатора что-то вроде

 VPCId: {Ref: VPC}
  

Где VPC имя ресурса VPC, который я создал? Или, проще говоря, как мне ссылаться на идентификатор VPC VPC по умолчанию, если я буду придерживаться этого?

Ответ №1:

Согласно Ref документам, вы должны иметь возможность использовать для получения различных идентификаторов ресурсов с именем elastic beanstalk. Однако VPC не является одним из этих именованных ресурсов (то есть ресурсов с логическим идентификатором), а является свойством одного из именованных ресурсов, в данном случае логический идентификатор AWSEBSecurityGroup равен, а свойство равно VpcId , поэтому вы должны иметь возможность получить его с помощью GetAtt :

{ "Fn::GetAtt" : [ "AWSEBSecurityGroup", "VpcId" ] }

из документации по функциям и документации CloudFormation

Аналогичный подход должен работать и для подсетей.

Комментарии:

1. Неплохо. Спасибо. Это будет работать, если я создам новый VPC или использую существующий, да?

2. Продолжение: ресурс AWSEBV2LoadBalancer содержит массив подсетей, а не идентифицирует каждую по отдельности. Правильно ли я полагаю, что в этом случае я бы использовал Fn::Select для присвоения каждого идентификатора подсети одной из строк в моем вопросе?

3. Возможно, как { "Fn::Select" : [ "0", [ { "Fn::GetAtt" : [ "AWSEBLoadBalancer", "Subnets" ] ] }