Cloudwatch获取InstanceId

时间:2017-11-11 04:31:39

标签: amazon-web-services amazon-cloudwatch

如何获取所有Cloudwatch Alarm实例的InstanceId,我正在尝试创建一个cloudwatch警报,以便在磁盘达到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

2 个答案:

答案 0 :(得分:2)

您的情况似乎是:

  • 您有一些现有的Amazon EC2实例
  • 您正在定期向Amazon CloudWatch发送名为MyList的指标的实例上运行一些脚本/代码
  • 您希望创建CloudFormation模板
  • DiskSpaceAvailable超过某个指标
  • 时,模板应为每个EC2实例创建一个警报

这是不可能的。

Amazon CloudWatch模板可以创建资源并可以引用资源,但它无法发现并发现资源,也无法对已发现的资源执行循环。

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

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

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

答案 1 :(得分:-1)

您的问题是,当cloudwatch检测到磁盘实例使用率超过90%时,发送电子邮件。

这是cloudwatch任务的基础:在cloudwatch警报本身中创建电子邮件通知,设置电子邮件并保存。

更多详细信息(这是与CPU相关的示例,但原理相同):

https://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/US_AlarmAtThresholdEC2.html

如果您希望从实例本身获取实例ID,则可以通过其元数据获得其实例ID:

<button type="button"  >