AWS Lambda 関数で断続的なエラーが発生したため、Amazon CloudWatch Logs を使用して関数がタイムアウトしたかどうかを判断したいです。
解決策
Lambda 関数の呼び出しがタイムアウトすると、失敗した呼び出しに関する CloudWatch ログには Error メッセージではなく、Task timed out というエラーメッセージが表示されます。Lambda 関数の CloudWatch ロググループを確認する際、"Task timed out" というキーワードを検索します。ログで Error メッセージのみを検索した場合は、検索結果では呼び出しタイムアウトのエラーではなく、コードに関連する実行時エラーのみが返されます。詳細については、「Amazon CloudWatch を使用して AWS Lambda のエラーを監視する」を参照してください。
関連するタイムアウトした呼び出しのリクエスト ID を使用して、呼び出しがタイムアウトした各タイミングでのログ全体を取得します。
開始する前に、Lambda 関数に CloudWatch Logs にログをアップロードするために必要な AWS Identity and Access Management (IAM) アクセス許可があることを確認してください。
タイムアウトした呼び出しのリクエスト ID を取得する
次の手順を実行します。
- Lambda コンソールを開きます。
- ナビゲーションペインで [関数] を選択します。
- 該当する Lambda 関数を選択し、[監視] タブを選択します。
- [CloudWatch ログの表示] を選択すると、CloudWatch コンソールで [ロググループの詳細] ページが開きます。
- [Logs Insights で表示] を選択します。
- Logs Insights のクエリテキストボックスで次のクエリを入力してから、[クエリを実行] を選択します。
fields @timestamp, @requestId, @message, @logStream| filter @message like "Task timed out"
| sort @timestamp desc
| limit 100
応答は、タイムアウトした呼び出しに関するリクエスト ID のリストを Task timed out 出力に返します。
詳細については、「CloudWatch Logs Insights を使用してログデータを分析する」を参照してください。
注: ロググループが大規模な場合は、Logs Insights のクエリに datetime 関数を追加すると検索範囲を制限できます。詳細については、「CloudWatch Logs Insights 言語のクエリ構文」を参照してください。
リクエスト ID に CloudWatch Logs Insights のクエリを実行する
注: CloudWatch Logs Insights のクエリでは、クエリするデータ量に応じた料金が発生します。詳細については、「Amazon CloudWatch の料金」を参照してください。
タイムアウトした呼び出しのリクエスト ID を使用して、呼び出しがタイムアウトした各タイミングでのログ全体を取得します。クエリを作成すると、特定のリクエスト ID に関するすべてのログを検索できます。詳細については、「ログの解析と構造化ロギング」を参照してください。
特定したタイムアウトエラーをトラブルシューティングする方法については、「Lambda 関数呼び出しのタイムアウトエラーをトラブルシューティングする方法」を参照してください。