2017-11-11 243 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。