はじめに
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にアクセスし、新しいトピックを作成します。

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

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

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

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

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

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



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


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

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

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

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