2017-11-11 4 views
0

Cloudwatch Alarm의 모든 인스턴스에 대한 InstanceId를 얻으려면 어떻게해야합니까? 디스크가 90 % 사용량에 도달하면 전자 메일을 보내려면 cloudwatch 경보를 작성하려고합니다.Cloudwatch 인스턴스 가져 오기

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 인스턴스가

  • 당신은 인스턴스에 대한 몇 가지 스크립트/코드를 실행 한

    • DiskSpaceAvailable이라는 통계를 Amazon CloudWatch에 정기적으로 보내십시오.
    • 당신은 DiskSpaceAvailable 특정 메트릭

    을 초과하는 것이 불가능한 경우 템플릿은 모든 EC2 인스턴스에 대한 알람을 만들어야합니다 CloudFormation 템플릿

  • 를 작성하고 싶습니다.

    Amazon CloudWatch 템플릿은 리소스를 만들 수 있지만 리소스를 참조 할 수는 있지만 리소스를 찾아서 발견 할 수 없으며 발견 된 리소스에 대해 루프를 수행 할 수도 없습니다.

    템플릿은 예를 들어 인스턴스를 만든 다음 해당 인스턴스에 대해 특별히 경보를 추가 할 수 있습니다. 그러나 리소스를 자동으로 검색하지는 않습니다.

    원하는대로 (코드를 작성해야 함) AWS Lambda-backed Custom Resource을 쓸 수 있지만 코드는 CloudFormation 대신 경보를 만들어야합니다.

    하단 : 유즈 케이스는 CloudFormation을 사용하는 것이 아니라 자신의 코드 (람다 또는 바로 코드)를 사용하는 것이 가장 좋습니다.

  • 관련 문제