3

大家下午好:

我有一个 CloudFormation 模板,它创建一个带有内部 NLB 的 EBS Web 环境。我的计划是创建一个 VPC 链接和 API 网关来代理 Web Worker,基本上保持 VPC 私有。我可以通过控制台完成此操作,并且 POC 效果很好。但我真正想做的是获取为 EBS Web 环境创建的 NLB 的 ARN,并将其用作 CloudFormation 模板的输出,然后我可以将其用作将创建 VPC 的 CF 模板的输入关联。我的问题是,这可能吗?如果可以,在这种情况下如何获取 NLB 的 ARN?我可以分两步完成这项壮举;手动将 ARN 作为参数传递给第二个模板。但如果可能的话,我真的很想以编程方式进行。

您可以就此用例提供的任何链接、示例或建议将不胜感激。

4

2 回答 2

0

您还可以使用 .ebextensions 机制创建自定义。

最近我不得不将 WAF 附加到 ElasticBeanstalk 应用程序负载均衡器。如果您创建 .config 文件并将其放在 .ebextensions 中,请配置您的环境并自定义其中包含的 AWS 资源。如果您没有为任何资源提供自定义名称,您可以使用此处找到的标准资源名称来引用它(https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-format-资源-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" }

于 2019-09-19T22:32:00.077 回答
0

我想做类似的事情,但问题是包含 EBS 资源的第一个 CF 堆栈实际上剥离了包含 Web 应用程序资源的第二个 CF 堆栈。NLB 在第二个堆栈中。

第二个堆栈模板由 EBS 生成,您无法控制它,这意味着您无法定义输出。

您可以使用 AWS Cli 列出第二个堆栈的资源并根据资源类型查找 NLB 资源,然后获取 ARN。这样做的问题是您不知道第二个堆栈的名称,因此再次需要您在问题中描述的两阶段部署。

答案不多,但我会继续挖掘。

更新

这类似于如何从 CloudFormation 中的 Elastic Beanstalk 环境中提取负载均衡器名称

于 2019-01-21T16:56:42.533 回答