如何获取Cloudwatch alarm所有实例的InstanceId,我正在尝试创建一个cloudwatch Alarm,以便在磁盘使用率达到90%时发送电子邮件。
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输出:我应该能够获得instance-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发布于 2017-11-11 14:55:25
看起来你的情况是:
DiskSpaceAvailable的指标您希望创建一个CloudFormation模板这是不可能的。
亚马逊CloudWatch模板可以创建资源,也可以引用资源,但它不能出去发现资源,也不能在发现的资源上执行循环。
例如,模板可以创建一个实例,然后专门为该实例添加警报。但是,它不会自动发现资源。
您可以编写一个可以做任何您想做的事情的AWS Lambda-backed Custom Resource (您必须编写代码),但是您的代码需要创建警报而不是CloudFormation。
底线:你的用例最好是通过你自己的代码(Lambda或者直接的代码)来完成,而不是使用CloudFormation。
发布于 2018-10-23 17:00:04
您的问题是当cloudwatch检测到磁盘实例使用率超过90%时发送邮件。
这是cloudwatch任务的基础:在cloudwatch告警本身中创建邮件通知,设置邮件并保存。
更多细节在这里(这是一个与CPU相关的示例,但原理是相同的):
https://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/US_AlarmAtThresholdEC2.html
如果您需要实例本身的instance-id,可以通过它的元数据获得它的instance-id:
curl http://169.254.169.254/latest/meta-data/instance-idhttps://stackoverflow.com/questions/47234362
复制相似问题