AWS Cost Anomaly Detection(コスト異常検出)の通知をSlackに連携してみました
こんにちはクラスメソッドのスジェです。
cost anomaly detectionを設定することでコストの異常活動を監視することができます。
なお、その通知を様々な対象に出せることができます。
cost anomaly detectionとSlackを連携するためには
- AWS Chatbotと統合
- Slackのメール+AWS SNSの組み合わせ
などの方法が採用できる思っています。
今回はSlackのメール+AWS SNS を利用する方法について書いてみました。
Chatbotと統合する方法については以下の記事を参考してください。
前提
AWS Cost Anomaly Detection は Cost Explorer の機能です。そのためAWS コスト異常検出にアクセスするには、Cost Explorer が有効になっている必要があります。
Chatbotを導入せずにAWSの通知をSlackに送るためには2択があります。
- Slackのメールアドレスを利用
- Slack webhookを利用
本記事では「Slackのメールアドレスを利用」することになります。
そのためにはSlackで「PRO」以上のプランが必須うになります。
もし「PRO」プランがない場合はwebhookを利用するために以下の記事を参考してください。
作ってみよう
作業は以下の流れで実施します。
- Slackチャンネルのメールアドレス取得
- AWS SNSのトピックおよびサブスクリプション作成
- Cost Anomaly Detectionのサブスクリプションおよびモニター作成
Slackチャンネルのメールアドレス取得
まずはSlackのメールアドレスを確認します。
チャンネルのメールアドレスはチャンネルの詳細から発行できます。
- 右上の点を押して、チャンネルの詳細を確認します。

- メールボタンをクリックしますと、メールアドレスが表示されます。メモしておきましょう。

AWS SNSのトピックおよびサブスクリプション作成
続きましてAWS SNSのトピックとSlackのメールアドレスをサブスクリプションに追加します。
- AWS コンソールから「SNS」を検索します。続きましてトピックを作成します。

- タイプをスタンダードに選択し、トピックの名前と表示名を指定します。

- トピックのARNをコピしておきます。「編集」をクリックします。

- 「アクセスポリシー - オプション」をクリックして、エディターに以下の記事を参考にしてポリシーを追加します。
ポリシー例
{
"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": "arn:aws:sns:ap-northeast-1:123456789000:test-cad",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "123456789000"
}
}
},
{
"Sid": "ALLOWCAD",
"Effect": "Allow",
"Principal": {
"Service": "costalerts.amazonaws.com"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:ap-northeast-1:123456789000:test-cad"
}
]
}
- 続きましてサブスクリプションを作成します。

- プロトコルは「Eメール」を指定します。エンドポイントにはSlackのメールアドレスを記入します。

- サブスクリプション登録後に承認メールがSlackのチャンネルに送信されます。「Confirm Subscription」をクリックします。

- サブスクリプションの状態が「確認済み」に更新されたことを確認します。

Cost Anomaly Detectionのサブスクリプションおよびモニター作成
SNSサブスクリプションの作成まで終わったらCost Anomaly Detectionを操作します。
Cost Anomaly Detectionは「Billing and Cost Management」サービスから入ることができます。
コンソールに「Billing and Cost Management」を検索し、左側メニューで「コスト異常検出」をクリックします。
初めての方は「ご利用開始に当たって」をクリックします。

表示されるツアーのモーダルは「X」を押してクローズします。
- アラートサブスクリプションから作成します。

- 各オプションを指定します。設定後、サブスクリプションを作成します。
- 頻度
- 個別のアラート:異常が検出された場合にすぐにアラート
- 日次概要:前日のトップ 10 アラートの日次概要
- 週次概要:週次概要を含む E メール通知
- Amazon SNS ARN の入力
- 上記で作成しましたAWS SNS トピックのARNを入力
- しきい値
- アラートを生成する異常値を設定する数値 [1]

- アラートを生成する異常値を設定する数値 [1]
- 頻度
- サブスクリプション作成後、コストモニターを作成します。

- 目的に合わせてもモニタータイプを選択します。モニター名を指定します。
- タイプの詳細は以下の記事を参考してください。
- アラートサブスクリプションは複数指定することができます。本記事では2番で作成しましたサブスクリプションを指定しました。サブスクリプションの指定が終わったらモニターを作成します。

結果
コスト異常が検出されましたら「検出された異常」からその内容が確認できます。
イメージは以下のブログを参考してください。
各項目の詳細は以下のドキュメントを参考してください。
おわりに
Chatbotを利用するとアラムを受信してから、その次のアクションもSlackで操作することもできます。
ですが、他のツールを導入したくなかったり、異常検出が発生したことだけ認知が必要だったりする場合は本記事のようにSlackチャンネルのメールアドレスに通知メールが届くように設定する方法も考慮できると思います。
お読みいただきありがとうございます。
本記事ではテストのために低いしきい値を設定しました ↩︎







