Cloudwatch获取InstanceId
问题描述:
如何获取Cloudwatch Alarm的所有实例的InstanceId,如果磁盘使用率达到90%,我正尝试创建一个CloudWatch警报以发送电子邮件。Cloudwatch获取InstanceId
Resources:
EC2DiskHealth:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": Disk Usage" ]]}
Namespace: System/Linux
MetricName: DiskSpaceAvailable
Dimensions:
- Name: InstanceId
Value : { "Ref" : "instance-id" }
- Name: Filesystem
Value: /dev/xvda1
- Name: MountPath
Value:/
Statistic: Average
Period: 60
EvaluationPeriods: 5
Threshold:
Fn::GetOptionSetting:
OptionName: ELBHealth
DefaultValue: "90"
ComparisonOperator: GreaterThanThreshold
AlarmActions:
- arn:aws:sns:awsregion:sns
InsufficientDataActions:
- arn:aws:sns:awsregion:sns
OKActions:
- arn:aws:sns:awsregion:sns
输出: 我应该能够获得实例ID,以便报警工作。
Dimensions:
- Name: InstanceId
Value : { "Ref" : "instance-id" }
错误:
Service:AmazonCloudFormation, Message:Template format error: Unresolved resource dependencies [instance-id] in the Resources block of the template
答
看来,你的情况是:
- 你有一些现有的亚马逊EC2实例
- 您正在运行的情况下,一些脚本/代码定期向Amazon CloudWatch发送称为
DiskSpaceAvailable
的指标 - 你想创建一个CloudFormation模板
- 时
DiskSpaceAvailable
超过一定指标
这是不可能的模板应该为每一个EC2实例报警。
Amazon CloudWatch模板可以创建资源并可以引用资源,但它不能出去查找资源,也不能在发现的资源上执行循环。
例如,模板可以创建实例,然后专门为该实例添加警报。但是,它不会自动发现资源。
你可以编写一个AWS Lambda-backed Custom Resource,它可以做任何你想做的事(你必须编写代码),但是你的代码需要创建警报而不是CloudFormation。
底线:您的用例最好通过您自己的代码(Lambda或直接代码)完成,而不是使用CloudFormation。