比方说,在我的.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的安全组失败原因:无效的ID:“ {” Fn :: GetAtt“:[” LoadBalancerSecurityGroup“,” GroupId“]}”“(期望” sg -...“)
知道我在做什么错吗?我确信这是有可能的,否则,如果您不能从选项部分中引用自定义资源,那么作为Elastic Beanstalk堆栈的一部分创建自定义资源的用途将受到限制。
我已经以确保首先创建要引用的资源的方式命名了文件。