はじめに
本記事ではLambda、CloudWatch、SNSを利用してエラーを通知を行います。
CloudWatchに出力されるLambdaのログにおいて、Errorログが吐かれた際にはそれをトリガーとし、対象のメールアドレスに通知を送付します。
環境
Python:3.12
Lambda関数の作成
loggingモジュールを使用して、意図的にエラーを起こすLambda関数を作成します。
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
try:
logger.info("This is an info message.")
# 意図的にエラーを発生
raise ValueError("Output an error message.")
except Exception as e:
logger.error(f"An error occurred: {e}")
raise e
CWでメトリクスフィルターの作成
CloudWatch > ロググループ から対象のLambda関数のロググループを選択します。
メニューから「メトリクスフィルターの作成」をクリック。
今回はERROR
ログに吐かれる事をトリガーにしたいので、フィルターパターンに ERROR
を入力し次へ進みます。
メトリクスの詳細では任意の名前と値を記入しメトリクスを作成します。
SNSトピックの作成
通知先の設定のためSNSからトピックを作成します。
通知先のメールアドレスを設定します。
サブスクリプション > サブスクリプションの作成 から次のように選択。
- トピックARN:上記で作成したリソースのもの
- プロトコル:Eメール
- エンドポイント:任意のメールアドレス
サブスクリプションを作成後、設定したメールアドレスに認証通知がくるので、Confirm subscription
から登録しておきます。
CloudWatchアラームの作成
CloudWatch > ロググループ から対象のLambda関数のロググループを選択します。
メトリクスフィルターメニューから対象のフィルターにチェックを入れ、「アラームを作成」をクリック。
任意のメトリクス名を設定します。
通知の送付先にはSNSで作成したトピック名を指定します。
動作確認
Lambdaをテスト実行し意図的にエラーをだしてみると、1分後くらいにメールが届いている事を確認できました。
CloudWatch > アラーム から対象のアラーム名を選択し、履歴メニューからも正常にアラームが実行されいている事を確認できます。
設定したメールアドレスに通知が来ないときは、SNSの暗号化の影響の可能性があります。
参考:https://dev.classmethod.jp/articles/tsnote-sns-topic-policy-encryption-cloudwatch-001/
参考