はじめに
こんにちは!エクネスの24卒入社の新卒エンジニア、藤嶌です!
現在、フードロス事業「ロスヘル」のシステムの設計・開発・運用を担当しています。
今回は、AWS CloudWatch Alarmで検知したメトリクスをSlackに自動通知する仕組みを構築してみたので、その手順を備忘録としてまとめました。
AWSの監視を使っていて、
・「アラームが発報されても気づくのが遅れる…」
・「メール通知だと見逃しやすい…」
といった悩みを持っている方には、少しでも参考になればうれしいです。
AWS Chatbotから「Amazon Q Developer in chat applications」へ名称変更されたことで、少し戸惑った方もいるかもしれません。
初歩的な内容かもしれませんが、同じように気になっている方の助けになれば幸いです。

全体アーキテクチャのイメージ

上記のアーキテクチャ図は、SlackとAWSを連携させた構成を示しています。
CloudWatch Logsで設定したメトリクスをCloudWatch Alarmで検知し、SNSトピックを経由してSlackへ通知する仕組みを構築しています。
それでは、この構成をもとに実装していきます!
実装
事前準備
今回の構成を実装する前提として、以下の環境が整っていることを想定しています。
・CloudWatch Logsにアプリケーションやシステムのログが出力されていること
・通知を受け取るSlackワークスペースとチャンネルが準備されていること
これらを前提に、次のステップではCloudWatch Logsのメトリクス設定から進めていきます。
メトリクスフィルターの作成
①ロググループの選択
事前にCloudWatch Logsに出力されている対象のロググループを選択します。
メトリクスフィルターは、ここで選んだロググループに紐づけられます。
②メトリクスフィルターの作成
「メトリクスフィルターの作成」をクリックします。

③フィルターパターンの定義
検知したいログを抽出するためのフィルターパターンを定義します。
今回は、ログ内に“Warning:”を含む行を検知対象とするため、以下のように設定します。

④メトリクスの設定
検知したログをメトリクスとして集計するための設定を行います。
- メトリクス名前空間(例:test-metrics-name)
- メトリクス名(例:test-metrics)
- メトリクス値(通常は「1」固定)
- デフォルト値(通常は「0」固定)

⑤確認と作成
設定内容を確認し、問題がなければ「メトリクスフィルター作成」を押下します。
メトリクスフィルターが作成されると、CloudWatchメトリクスに新しいメトリクスが追加され、アラームの設定が可能になります。

SNSトピックの作成とAmazon Q Developer in chat applicationsの連携
①Simple Notification Service(SNS)トピックの作成
AWS マネジメントコンソールでSimple Notification Service(SNS)を開き、「トピックの作成」を選択します。
②トピック名の入力
任意のトピック名(例:test-sns)を入力し、必要に応じてアクセス許可などを設定し、「トピックの作成」をクリックすると作成されます。

③Amazon Q Developer in chat applicationsの設定開始
AWS マネジメントコンソールでAmazon Q Developer in chat applications(旧称: AWS Chatbot)を選択します。
④チャットクライアントの選択
チャットクライアントで「Slack」を選択し、「クライアントを設定」をクリックします。
⑤権限リクエストの許可
「Amazon Q Developerが○○ワークスペースにアクセスする権限をリクエストしています」と表示されるので、「許可する」をクリックします。
⑥設定済みクライアントの選択
許可した Slack ワークスペースが「設定済みクライアント」に表示されるので、該当ワークスペースを選択します。
⑦新しいチャンネルの設定
「新しいチャンネルを設定」をクリックします。
⑧ チャンネルの指定(プライベートチャンネル)
設定したいチャンネルのIDを設定します。
※今回はプライベートチャンネルで設定します。

■ブラウザの場合
1.Slack の対象チャンネルを開きます。
2.ブラウザのアドレスバーに表示される URL を確認します。
3.下記URLの「CXXXXXXX」の部分がチャンネルIDになります。
https://app.slack.com/client/ワークスペースID/チャンネルID
https://app.slack.com/client/TXXXXXXX/CXXXXXXX
■PCアプリの場合
1.対象チャンネル名を右クリック
2.チャンネル詳細を表示するをクリック
3.チャンネル情報タブの下部にチャンネルIDが表示されています。
また、「チャンネル名を右クリック→コピー→リンクをコピー」からもブラウザの場合同様「CXXXXXXX」を取得可能です。
⑨ロール名の入力
Amazon Q DeveloperがSNSにアクセスできるよう、IAMロールを作成します。

⑩SNSトピックの設定(SNS→Amazon Q Developer in chat applicationsの設定)
①~②で作成したSNSトピックを設定します。
⑪設定の完了
すべての項目を入力・設定後、「設定」 ボタンをクリックします。
CloudWatch Alarmの設定
①アラームの作成
AWSマネジメントコンソールでCloudWatchを開き、アラームの作成を選択してください。
②メトリクスの選択
「カスタム名前空間」を選択し、先ほど作成した名前空間(例:test-metrics-name)を開き、メトリクス名(例:test-metrics)を選択します。
③アラーム条件の設定
アラームを下記のように設定します。(ログの種類によって、統計や期間を変更してください。)
- 統計:平均値
- 期間:5分
- 条件:閾値 >= 1 の場合にアラームを発火する
- その他の設定:欠落データを適正(しきい値を超えていない)として設定

④通知先の設定(CloudWatch→SNSの設定)
通知の送信先を「SNSトピックの作成とAmazon Q Developer in chat applicationsの連携」の①~②で作成したSNSトピックを選択します。

⑤アラーム名の設定
アラームを識別しやすいよう、わかりやすい名前を設定します。(例:test-alarm)

⑥ アラームの作成
設定内容を確認し、問題がなければ「アラームの作成」をクリックします。
まとめ
今回は、CloudWatch LogsからSlackにアラートを通知する仕組みを
「CloudWatch → SNS → Amazon Q Developer in chat applications → Slack」という構成で紹介しました。
コード不要で構築できるうえに、AWS公式サービスだけで完結するので
シンプルかつ保守もしやすいのがポイントです。
今後は、IAMロールの権限最小化や、Amazon Q Developer in chat applicationsの活用方法なども
少しずつ掘り下げていければと思います。
さいごに
ここまでお読みいただきありがとうございました!
今回の記事は、「テックブログをはじめます」宣言からの、記念すべき最初の投稿になります!
まだまだ駆け出しのエンジニアですが、
設定や構成に誤りなどがあれば、ぜひご指摘いただけると嬉しいです。
それでは、次回の投稿もお楽しみに!