スケジュールされたLambdaの監視 CloudWatchアラーム作成
はじめに
AWSの代表的なサーバーレスサービスであるLambda関数は、EventBridgeのスケジュール機能を利用することで、自動的にトリガーさせることができます。しかし、スケジュールが正常に動作しているかを確認するには、Lambdaのログを手動でチェックする必要があり、運用コストがかかる可能性があります。
そこで、CloudWatchを活用してLambdaのメトリクスを監視し、異常が発生した際に自動的にアラームを発報し、SNSやLambdaアクションを通じて通知を行う方法を紹介します。
CloudWatchアラームとは?
CloudWatchアラームは、指定したメトリクスの値がしきい値を超えた場合に、SNSやLambdaアクションを通じて通知や処理を実行する機能です。Lambdaをスケジュール実行する場合、CloudWatchメトリクスを活用して期待する回数の実行が行われているかを監視できます。
Lambdaのメトリクス
Lambdaのメトリクスには以下のようなものがあります。
メトリクス名 | 説明 |
---|---|
Invocations | Lambda関数が呼び出された回数 |
Errors | エラーが発生した回数 |
Duration | 実行時間 (ミリ秒) |
Throttles | 実行がスロットルされた回数 |
DeadLetterErrors | DLQにメッセージが送信できなかった回数 |
IteratorAge | イベントソースマッピングの遅延 |
この中で、スケジュール実行の監視にはInvocations
メトリクスを使用します。
スケジュール実行の監視
例えば、Lambdaが12時間ごとに1回実行されるスケジュールの場合、1日に2回 (24時間で2回) 実行されることが期待されます。この実行回数をCloudWatchアラームで監視し、期待した回数に満たない場合に通知を送るように設定します。
CloudWatchアラームの設定手順
-
メトリクスの選択
- AWSマネジメントコンソールのCloudWatchにアクセス。
- [メトリクス] → [Lambda] を選択。
-
Invocations
メトリクスを選択。 - 該当のLambda関数を選択。
-
アラームの作成
- メトリクスのしきい値を
1日2回未満
に設定。 - しきい値の計算期間を24時間に設定。
- アラームの状態が
異常 (ALARM)
になった場合のアクションを指定。 - SNSトピックを作成し、メール通知を設定。
- 必要に応じてLambdaアクションを設定し、追加の処理を行う。
- メトリクスのしきい値を
-
アラームの有効化
- 設定を保存し、アラームを有効化。
Lambdaアクションでの通知処理
SNS通知だけでなく、Lambdaを使ってより高度な処理を行うことも可能です。例えば、
- SlackやTeamsに通知を送信
- Lambdaの再実行処理を自動化
- 異常検知後の対応ログを保存
以下は、SNS経由でSlackに通知を送るLambda関数の簡単な例です。
import json
import urllib3
def lambda_handler(event, context):
webhook_url = "https://hooks.slack.com/services/your/webhook/url"
message = {
"text": "🚨 Lambdaのスケジュール実行回数が不足しています!"
}
http = urllib3.PoolManager()
response = http.request(
"POST",
webhook_url,
body=json.dumps(message),
headers={"Content-Type": "application/json"}
)
return {
"statusCode": response.status,
"body": response.data.decode("utf-8")
}
add-permissionの設定は必要か?
LambdaをEventBridgeでスケジュール実行する場合、add-permissionを使用して適切な権限を設定する必要がある場合があります。通常、EventBridgeからLambdaを直接トリガーする場合は、Lambdaのリソースポリシーに適切な権限が付与されるため、手動で設定する必要はありません。しかし、異なるAWSアカウントやカスタムのIAMロールを使用する場合は、以下のように明示的に権限を付与することが推奨されます。
aws lambda add-permission \
--function-name my-function-name \
--statement-id AlarmAction \
--action 'lambda:InvokeFunction' \
--principal lambda.alarms.cloudwatch.amazonaws.com \
--source-account 111122223333 \
--source-arn arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name
この設定により、EventBridgeからLambda関数を適切にトリガーできるようになります。
まとめ
CloudWatchアラームを活用することで、スケジュールされたLambdaの実行状況を自動的に監視し、異常時に通知を行うことができます。
✅ 監視ポイント
-
Invocations
メトリクスを使用してLambdaの実行回数をチェック - 期待した回数に満たない場合にCloudWatchアラームを設定
- SNSやLambdaアクションを利用して自動的に通知や対応を実行
- 必要に応じてadd-permissionを設定し、権限エラーを防ぐ
これにより、スケジュールされたLambdaのトラブルを迅速に検知し、対策を講じることができます。