大家下午好:
我有一个CloudFormation模板,该模板创建带有内部NLB的EBS Web环境。我的计划是,然后创建一个VPC链接和API网关以代理Web工作者,从根本上保持VPC私有。我可以通过控制台来完成此任务,而POC的效果很好。但是我真正想做的是获取为EBS Web环境创建的NLB的ARN,并将其用作CloudFormation模板的输出,然后将其用作创建VPC的CF模板的输入。链接。我的问题是,有可能吗?如果是这样,在这种情况下,如何获得NLB的ARN?我可以分两步完成这项壮举。手动将ARN作为参数传递给第二个模板。但是,如果可能的话,我真的很想通过编程来做到这一点。
在此用例上可以提供的任何链接,示例或建议,将不胜感激。
答案 0 :(得分:0)
我想做类似的事情,但是问题是,包含EBS资源的第一个CF堆栈实际上剥离了包含Web应用程序资源的第二个CF堆栈。 NLB在第二个堆栈中。
第二个堆栈模板是由EBS生成的,您无法对其进行控制,这意味着您无法定义输出。
您可以使用AWS Cli列出第二个堆栈的资源,并根据资源类型查找NLB资源,然后获取ARN。这样做的问题是您不知道第二个堆栈的名称,因此将再次需要您在问题中描述的两阶段部署。
答案不多,但我会继续挖掘。
这类似于How To Extract Load Balancer Name from Elastic Beanstalk Environment in CloudFormation
答案 1 :(得分:0)
您还可以使用.ebextensions机制创建自定义。
最近,我不得不将WAF附加到ElasticBeanstalk应用程序负载均衡器。如果您创建一个.config文件并将其放在.ebextensions中,请配置您的环境并自定义其包含的AWS资源。如果您没有为任何资源指定自定义名称,则可以使用此处提供的标准资源名称进行引用 (https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-format-resources-eb.html)
NLB与ALB一样,使用相同的默认资源名称,因此医生要求使用AWSEBV2LoadBalancer。
我的配置看起来像
Resources:
PublicWAF:
Type: AWS::WAFRegional::WebACLAssociation
Properties:
ResourceArn: {"Ref" : "AWSEBV2LoadBalancer" }
WebACLId:
Fn::GetOptionSetting:
OptionName: waf_id
其中Ref返回负载均衡器的Amazon资源名称(ARN)。
我想您可以将VPC链接的Cloudformation放置在Elastic Beanstalk应用程序的.config文件中。合理的警告,我在配置中使用YAML,但必须在Reference函数上使用JSON格式才能使其在我的环境中正常工作。
ResourceArn: {"Ref" : "AWSEBV2LoadBalancer" }