如何在.ebextensions中获取负载均衡器的ARN?

时间:2019-08-30 08:31:26

标签: amazon-web-services amazon-cloudformation amazon-elastic-beanstalk

我想使用ebextensions将cloudwatch警报添加到弹性beantalk环境中。

所以我创建了一个.ebextensions/cloudwatch-alarms.confg文件,如下所示:

Resources:
  ELBLatencyAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": HIGH ELB latency." ]]}
      Namespace: AWS/ApplicationELB
      MetricName: Latency
      Dimensions:
      - Name: LoadBalancer
        Value : "arn:aws:elasticloadbalancing:xx-xxxxxx-1:123456789012:loadbalancer/app/awseb-AWSEB-oooooooooooo/12b68287xxxxxxxx"
      Statistic: Average
      Period: 300
      EvaluationPeriods: 1
      Threshold: 
        Fn::GetOptionSetting:
          OptionName: ELBLatency
          DefaultValue: "0.5"
      ComparisonOperator: GreaterThanThreshold

我还没有弄清的一件事是如何使用函数获取负载均衡器的ARN。

负载均衡器arn:aws:elasticloadbalancing:xx-xxxxxx-1:123456789012:loadbalancer/app/awseb-AWSEB-oooooooooooo/12b68287xxxxxxxx的arn由弹性beantalk创建。在创建环境之前我不知道。

我认为大概可以使用here中描述的功能来获取负载均衡器的信息。但是我还没想办法。

有人知道该怎么做吗?

1 个答案:

答案 0 :(得分:1)

根据docs

  

当您将此资源的逻辑ID传递给固有的Ref函数时,Ref将返回负载均衡器的Amazon资源名称(ARN)。

因此,如果您使用的是当前负载均衡器(即ALB或NLB,而不是CLB),则应该能够在负载均衡器的逻辑名称上使用Ref函数:

Value: !Ref MyLoadBalancer

我还发现this list的“内置” beanstalk资源名称对于获取与自动生成以供模板使用的体系结构相关的属性非常有用。

仅供参考,资源的“逻辑名称”通常是您为其分配的名称,作为模板中Resources属性的子代,例如

Resources:
   MyLoadBalancer:
   ...
   MyS3Bucket:
   ...

此处的逻辑名称为MyLoadBalancerMyS3Bucket。如果尚未定义它们,则使用上面链接中的列表中的名称,因此您的负载均衡器可能是AWSEBLoadBalancerAWSEBV2LoadBalancer,具体取决于它是传统负载均衡器还是当前负载均衡器。< / p>