如何在.ebextensions中动态获取Elastic Beanstalk负载均衡器的ARN?
获取Elastic Beanstalk自动创建的ALB ARN用于CloudWatch告警配置
你遇到的这个问题很常见——硬编码EB自动生成的ALB ARN确实不灵活,每次环境重建或者更新都得手动修改,完全不符合基础设施即代码的理念。
其实Elastic Beanstalk在创建ALB时,会在底层的CloudFormation栈里给这个负载均衡器分配一个固定的逻辑ID:AWSEBApplicationLoadBalancer(这正好对应你配置里用的AWS/ApplicationELB命名空间)。你只需要用CloudFormation的Ref函数引用这个ID,就能动态获取到当前环境ALB的ARN了。
修改后的.ebextensions/cloudwatch-alarms.config配置如下:
Resources: ELBLatencyAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": HIGH ELB latency." ]]} Namespace: AWS/ApplicationELB MetricName: Latency Dimensions: - Name: LoadBalancer Value : { "Ref" : "AWSEBApplicationLoadBalancer" } Statistic: Average Period: 300 EvaluationPeriods: 1 Threshold: Fn::GetOptionSetting: OptionName: ELBLatency DefaultValue: "0.5" ComparisonOperator: GreaterThanThreshold
补充说明:
- 如果你使用的是Network Load Balancer,对应的逻辑ID是
AWSEBNetworkLoadBalancer,替换掉配置里的引用即可。 - 如果你还在使用Classic Load Balancer(现在不太推荐),逻辑ID是
AWSEBLoadBalancer,同时记得把命名空间改成AWS/ELB。
这样配置后,不管你重建多少次EB环境,CloudWatch告警都会自动关联到当前环境的ALB,再也不用手动更新ARN了。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

