Допустим, в моей папке .ebextensions
есть файл 01-resources.config
, содержащий что-то вроде
Resources:
LoadBalancerSecurityGroup:
Type: "AWS::EC2::SecurityGroup"
Properties:
GroupName: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, "-ELB-SecurityGroup" ]] }
GroupDescription: "and so on..."
Тогда есть 02-options.config
, содержащий:
option_settings:
aws:elbv2:loadbalancer:
SecurityGroups:
- { "Fn::GetAtt" : [ "LoadBalancerSecurityGroup", "GroupId" ] }
AccessLogsS3Prefix: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, "-LoadBalancerLogs"]] }
В обоих случаях Elastic Beanstalk (или CloudFormation) может оценить / заменить параметр AWSEBEnvironmentName
. Но "Fn::GetAtt"
(или, в качестве альтернативы, "Ref"
) не оценивается. При обновлении среды я получаю такие ошибки:
Не удалось обновить группу безопасности с именем: sg-xxxxx Причина: неверный идентификатор: "{" Fn :: GetAtt ": [" LoadBalancerSecurityGroup "," GroupId "]}" (ожидается "sg -...")
Есть идеи, что я делаю не так? Я уверен, что это должно быть возможно, в противном случае создание пользовательских ресурсов в составе стека Elastic Beanstalk будет иметь ограниченное использование, если вы не можете ссылаться на него из раздела параметров.
Я уже назвал файлы таким образом, чтобы убедиться, что ресурс, на который я ссылаюсь, создается первым.