2017-11-11 121 views
0

如何获取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 

回答

2

看来,你的情况是:

  • 你有一些现有的亚马逊EC2实例
  • 您正在运行的情况下,一些脚本/代码定期向Amazon CloudWatch发送称为DiskSpaceAvailable的指标
  • 你想创建一个CloudFormation模板
  • DiskSpaceAvailable超过一定指标

这是不可能的模板应该为每一个EC2实例报警。

Amazon CloudWatch模板可以创建资源并可以引用资源,但它不能出去查找资源,也不能在发现的资源上执行循环。

例如,模板可以创建实例,然后专门为该实例添加警报。但是,它不会自动发现资源。

你可以编写一个AWS Lambda-backed Custom Resource,它可以做任何你想做的事(你必须编写代码),但是你的代码需要创建警报而不是CloudFormation。

底线:您的用例最好通过您自己的代码(Lambda或直接代码)完成,而不是使用CloudFormation。

相关问题