LambdaのタイムアウトをCloudWatch Alarmで検知し、メール通知する方法

AWS

はじめに

Lambda関数は非常に便利なサーバーレス実行環境ですが、処理が完了せずにタイムアウトしてしまうことがあります。
このタイムアウトを放置すると、システムの異常に気づくのが遅れたり、無駄なリトライによるコストの増加につながる可能性があります。

本記事では、LambdaのタイムアウトエラーをCloudWatch Alarmで検知し、SNS経由でメール通知する仕組みを構築する方法を解説します。

全体構成図

Lambda関数の作成(タイムアウトを意図的に発生させる)

Pythonコード例(1秒タイムアウト+無限ループ)

import time

def lambda_handler(event, context):
    while True:
        time.sleep(0.1)

Lambda関数作成

Python3.13で関数を作成します。

設定タブの一般設定の編集ボタンを押下し、タイムアウトを1秒に設定する。

SNSトピック+メールサブスクリプションの作成

トピック作成

AmazonSNSにアクセスし、新しいトピックを作成します。

タイプはスタンダードにして作成します。

Screenshot

サブスクリプションの作成

作成したトピックのページから、サブスクリプションを作成します。

プロトコルをEmailを作成し、エンドポイントを自分のメールアドレスにします。

メール認証

AWSから認証メールが届くのでconfirmにします。
Gmailを利用している場合は、Gmail あるいはネットワーク環境・セキュリティツールの挙動でunsubscribe状態になることがあるので別タブで認証するなどしましょう

CloudWatch Alarmの作成

CloudWatch Alarmにアクセスし、新しいアラームを作成します。

Screenshot

メトリクスを選択します。
Lambda > 関数名別 > 対象関数のErrorを選択します。

Screenshot
Screenshot
Screenshot

統計を最大にし、閾値を1以上にします。

SNSトピックを選択して作成します。

Screenshot

動作確認

Lambda関数のテストタブででLambdaを手動実行しタイムアウトエラーを起こす

数分以内にSNS → メール通知が届くかチェック

まとめ

Lambdaのタイムアウトは検知されにくいため、能動的な監視が重要です。

Lambda関数がタイムアウトした場合、エラーログがCloudWatchに記録されるものの、外部からは一見して異常に気づきにくいケースが多いです。特に非同期実行やEventBridge経由でのトリガー時には、明確な失敗通知が届かないこともあります。そのため、タイムアウトを確実に把握するには、明示的な監視設計(CloudWatchアラームやSNS通知など)が必要不可欠です。

コメント

タイトルとURLをコピーしました