こんにちは、カスタマーサクセス課の下山です。 久しぶりのブログ投稿です。
CloudFormationでCost Anomaly Detectionを設定する機会があったので紹介します。
はじめに
Cost Anomaly Detection自体の機能については弊社の他メンバーのブログをご覧ください。
今回設定する内容(概要)
- モニタータイプは「AWS のサービス」です
- アラート頻度は「個々のアラート」です
- メール通知用にSNSも設定しています
テンプレート
{ "Parameters": { "MonitorName": { "Type": "String", "Default": "MonitorTest" }, "SubscriptionName": { "Type": "String", "Default": "AlertSubscriptionTest" }, "Threshold": { "Type": "Number", "Default": "100" }, "Endpoint": { "Type": "String", "Default": "xxx@yyy.co.jp" } }, "Resources": { "SNSTopic": { "Type": "AWS::SNS::Topic", "Properties": { "TopicName": "cost-anomaly-detection-sns-topic" } }, "SNSSubscription": { "Type": "AWS::SNS::Subscription", "Properties": { "Endpoint": { "Ref": "Endpoint" }, "Protocol": "email", "TopicArn": { "Ref": "SNSTopic" } } }, "SNSTopicPolicy": { "Type": "AWS::SNS::TopicPolicy", "Properties": { "PolicyDocument": { "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:Publish", "SNS:RemovePermission", "SNS:SetTopicAttributes", "SNS:DeleteTopic", "SNS:ListSubscriptionsByTopic", "SNS:GetTopicAttributes", "SNS:AddPermission", "SNS:Subscribe" ], "Resource": { "Ref": "SNSTopic" }, "Condition": { "StringEquals": { "AWS:SourceOwner": { "Ref": "AWS::AccountId" } } } }, { "Sid": "AWSAnomalyDetectionSNSPublishingPermissions", "Effect": "Allow", "Principal": { "Service": "costalerts.amazonaws.com" }, "Action": "SNS:Publish", "Resource": { "Ref": "SNSTopic" } } ] }, "Topics": [ { "Ref": "SNSTopic" } ] } }, "AnomalyServiceMonitor": { "Type": "AWS::CE::AnomalyMonitor", "Properties": { "MonitorName": { "Ref": "MonitorName" }, "MonitorType": "DIMENSIONAL", "MonitorDimension": "SERVICE" } }, "AnomalySubscription": { "Type": "AWS::CE::AnomalySubscription", "Properties": { "SubscriptionName": { "Ref": "SubscriptionName" }, "Threshold": { "Ref": "Threshold" }, "Frequency": "IMMEDIATE", "MonitorArnList": [ { "Ref": "AnomalyServiceMonitor" } ], "Subscribers": [ { "Type": "SNS", "Address": { "Ref": "SNSTopic" } } ] } } } }
※(2022/11/25修正)CostAnomalyDetectionでの検知をSNSトピックにフックする際にトピックポリシーが適切に設定されている必要がありますのでテンプレート内で定義するように修正しました。
注意事項等
- Cost Anomaly Detectionはグローバルなサービスであるため、バージニアリージョンでテンプレートを流す必要があります。
- 同一テンプレートでSNSを設定する場合はSNS設定はバージニアリージョンに属すことになります。
最後に
- テンプレート化しておけばStackSetsで設定することもできるので、アカウント開設時の下処理の一つにも使えます。