【发布时间】:2019-01-24 14:54:23
【问题描述】:
我使用以下代码 sn-p 在 CloudFormation 中创建了 Elastic Beanstalk 和 CloudWatch 警报:
"ElasticBeanstalkEnvironment": {
"Type": "AWS::ElasticBeanstalk::Environment",
"Properties": {
"ApplicationName": "my-app",
"EnvironmentName": "my-eb",
"SolutionStackName": "64bit Amazon Linux 2018.03 v3.0.1 running Tomcat 8 Java 8",
"OptionSettings": [
{
"Namespace": "aws:elb:loadbalancer",
"OptionName": "CrossZone",
"Value": "true"
},
{
"Namespace": "aws:elb:listener:80",
"OptionName": "ListenerProtocol",
"Value": "HTTP"
},
{
"Namespace": "aws:elb:listener:80",
"OptionName": "InstancePort",
"Value": "80"
},
etc...
]
},
"CloudWatchBacken500XXAlarm": {
"Type": "AWS::CloudWatch::Alarm",
"Properties" : {
"AlarmActions": ["arn:aws:sns:us-east-1:12345678:mysnstopic"],
"Namespace": "AWS/ELB",
"Dimensions": [{
"Name": "LoadBalancerName",
"Value" : {
"Fn::GetAtt": [
"ElasticBeanstalkEnvironment",
"EndpointURL"
]
}
}],
"MetricName": "HTTPCode_Backend_5XX",
"Statistic": "Sum",
"Period": "60",
"EvaluationPeriods": "1",
"ComparisonOperator": "GreaterThanOrEqualToThreshold",
"Threshold": "1"
}
}
您可以看到 CloudWatch 警报配置为在 Elastic Beanstalk 的负载均衡器收到 5XX 错误时发出警报。但是我无法获得看起来像这样的负载均衡器名称属性:
awseb-e-a-AWSEBLoa-AY8LC6V30OAW
取而代之的是 Fn::GetAtt("EndpointURL") 属性返回负载均衡器的 DNSName,它看起来像这样:
awseb-e-a-AWSEBLoa-AY8LC6V30OAW-175133046.us-east-1.elb.amazonaws.com
这将无法正确创建 CloudWatch 警报,因为它期望获取负载均衡器名称而不是 DNSName。
获取负载均衡器名称的最佳方法是什么?我不想将负载均衡器创建为外部资源,例如“AWS::ElasticLoadBalancing::LoadBalancer”,或者尝试使用一些子字符串方法从 DNSName 字符串中提取名称字符串。
【问题讨论】:
标签: amazon-web-services amazon-elastic-beanstalk amazon-cloudformation elastic-load-balancer