最近AWSは、Cloudwatchアラームがメトリクスに数式を使用できると発表しました。私は、2つの単一メトリクスの合計を特定のしきい値と比較するアラームを作成することにしました。これは、AWS ドキュメント私の式は SUM([m1,m2]) で、m1 と m2 は 2 つの単一のメトリックです。また、このアイデアを cloudformation テンプレート (yaml) を使用して実装することにしました。これが Cloudwatch アラームの定義です。
BillingAlarmExpression:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmActions:
- !Ref BillingAlertTopic
AlarmDescription: String
ComparisonOperator: GreaterThanOrEqualToThreshold
EvaluationPeriods: 1
Metrics:
- Id: m1
MetricStat:
Metric:
Dimensions:
- Name: ServiceName
Value: AmazonEC2
- Name: Currency
Value: USD
MetricName: EstimatedCharges
Namespace: AWS/Billing
Period: 86400
Stat: Maximum
ReturnData: False
- Id: m2
MetricStat:
Metric:
Dimensions:
- Name: ServiceName
Value: AmazonCloudwatch
- Name: Currency
Value: USD
MetricName: EstimatedCharges
Namespace: AWS/Billing
Period: 86400
Stat: Maximum
ReturnData: False
- Id: Expr1
Expression: SUM([m1,m2])
Label: Yeap
Threshold: 100
TreatMissingData: ignore
単一のメトリクス m1 と m2 は、EC2 と Cloudwatch サービスの課金コストに関係しています。私が確認したいのは、これら 2 つのサービスの課金コストが 100 ドルのしきい値を超えたかどうかです。(課金コストは N.Virginia リージョンにのみ保存されるため、上記のテンプレートを N.Virginia にデプロイしようとしたことに注意してください)。このテンプレートのデプロイ中に、Cloudformation は次のエラーで応答します。
"Invalid metrics list (Service: AmazonCloudWatch; Status Code: 400; Error Code: ValidationError; Request ID: c0748047-0378-11e9-ac36-5b1829988d18)"
Cloudformation が「metrics list」と言う場合、それは m1、m2、Expr1 の定義を参照します。さらに奇妙なのは、aws cli から上記の metrics-list 定義を使用すると、課金データが正常に返されることです。
aws cloudwatch get-metric-data --metric-data-queries file://./metric-data.json --start-time 2018-12-03T03:00:00Z --end-time 2018-12-10T04:30:00Z
ここで、metric-data.json は上記の metrics-list です。
テンプレートを作成するために、次のガイドを使用しました。https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.htmlそしてhttps://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html
Cloudformation がこのエラーを返す理由をご存知ですか? ありがとうございます!