Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
Lambda 関数呼び出しのタイムアウトエラーをトラブルシューティングする方法を教えてください。
コード変更をデプロイしていないにもかかわらず、AWS Lambda 関数が断続的にタイムアウトしました。
解決策
Lambda 関数は、さまざまな理由でタイムアウトする場合があります。Lambda 関数のタイムアウトをトラブルシューティングするには、まず問題の原因を特定します。次に、ユースケースに基づいて問題を修正します。
Lambda 関数がタイムアウトしたことを確認する
タイムアウトした呼び出しのリクエスト ID を取得するには、Task timed out というフレーズを関数の Amazon CloudWatch ロググループで検索します。次に、関連するタイムアウトした呼び出しのリクエスト ID を使用して、呼び出しがタイムアウトした各タイミングでのログ全体を取得します。
手順については、「Lambda 関数がタイムアウトしているかどうかを確認する方法を教えてください」を参照してください。
Lambda 関数がタイムアウトする原因を特定する
次の 1 つまたは複数の方法で、関数がタイムアウトした原因となった障害点を特定します。
Lambda の CloudWatch Logs をレビューする
Amazon CloudWatch を使用することで、関数のコードで生成されたすべてのログを確認し、潜在的な問題を特定することができます。手順については、「Lambda で CloudWatch Logs を使用する」を参照してください。
関数がスタックトレースを返した場合は、スタックトレースのエラーメッセージがエラーの原因を示しています。
重要: Lambda は、各呼び出しにつき 3 行のログ (START、END、REPORT) を自動的に生成します。次のいずれかに当てはまる場合、関数の CloudWatch ログにはこの 3 行のみが表示されます。
- Lambda 関数のカスタムコードには、他に明示的なログ記録は設定されていない。
- Lambda がログを出力する関数のコードを実行できるようになる前に、関数の期間制限に達した。
CloudWatch ログを参照してもタイムアウトの原因を特定できない場合は、次の 1 つまたは複数の解決策を試してください。
- 使用した AWS SDK の再試行回数とタイムアウトの設定が、関数が初期化するのに十分な時間を確保していることを確認します。
- Lambda 関数のタイムアウト設定を一時的に増やして、関数コードがログデータを生成するのに十分な時間を確保します。
- 関数に設定されているメモリを増やすことで、呼び出し時間の待ち時間を短縮し、計算能力を向上させます。
関数のコードにさらにログ出力を追加するには、使用した Lambda ランタイムバージョンに応じて次のドキュメントを参照してください。
- Node.js での AWS Lambda 関数のログ記録
- Python での AWS Lambda 関数のログ記録
- Ruby での AWS Lambda 関数のログ記録
- Java での AWS Lambda 関数のログ記録
- Go での AWS Lambda 関数のログ記録
- C# での AWS Lambda 関数のログ記録
- PowerShell での AWS Lambda 関数のログ記録
AWS X-Ray を使用してコードパフォーマンスのボトルネックを特定する
Lambda 関数がダウンストリームの AWS リソース、マイクロサービス、データベース、HTTP ウェブ API を使用している場合は、AWS X-Ray がコードパフォーマンスの問題のトラブルシューティングに役立ちます。
詳細については、「AWS X-Ray を使用して Lambda 関数の呼び出しを視覚化する」を参照してください。
Lambda Insights を使用して関数のシステムレベルのメトリクスを収集する
Lambda Insights は、CPU 時間、メモリ、ディスク、ネットワークメトリクスなどのシステムレベルのメトリクスを収集します。コールドスタートや Lambda ワーカーのシャットダウンなどの診断情報も収集されるため、Lambda 関数の問題を切り分けるのに役立ちます。
注: Lambda Insights を使用すると、AWS アカウントに料金が発生します。Lambda 拡張機能が消費した呼び出し時間に対して、1 ミリ秒単位で料金が発生します。
VPC フローログを参照し、特定の呼び出しリクエストが拒否されたりルーティングされなかったりした理由を特定する
VPC フローログを使用すると、Amazon Virtual Private Cloud (Amazon VPC) に出入りするすべてのネットワークトラフィックを確認できます。
詳細については、「Lambda でのネットワーク機能に関する問題のトラブルシューティング」を参照してください。
注: VPC フローログを設定する場合、次の変数が適用されます。
- フローログを CloudWatch Logs または Amazon Simple Storage Service (Amazon S3) に発行すると、Vended Logs に対するデータインジェストとアーカイブの料金が適用されます。
- Lambda 関数が Amazon VPC 内のリソースにアクセスするように設定した場合、Lambda はその関数を Elastic ネットワークインターフェイスに割り当てます。Lambda 関数に関連するネットワークトラフィックを特定するには、その関数のネットワークインターフェイスを見つける必要があります。詳細については、「Lambda で作成した Elastic ネットワークインターフェイスをデタッチしたり削除したりできない理由を知りたいです」を参照してください。
HTTP ワイヤトレースを使用して、呼び出し中に関数のコードによって生成されるネットワークリクエストを詳細に記録する
詳細については、「HTTP ワイヤトレースを記録する」を参照してください。
Lambda 関数のタイムアウトを防ぐためのベストプラクティス
Lambda 関数がべき等であることを確認する
一時的なネットワークの問題により、API コールに想定よりも時間がかかる場合があります。ネットワークの問題も、再試行や API リクエストの重複の原因となります。Lambda 関数がべき等であることを確認し、このような事態に備えてください。
詳細については、「Lambda 関数をべき等にする方法を教えてください」を参照してください。
関数の静的ロジックを関数ハンドラーの外部で初期化する
Lambda 関数を初期化すると、Lambda は呼び出しの Init フェーズを完了させるために最大 10 秒を割り当てます。この時間制約に対応するために、初期化コードでは関数ハンドラーの外部で次のアクションを実行することがベストプラクティスです。
- ライブラリと依存関係をインポートする
- 初期構成をセットアップする
- 他のダウンストリームサービスおよびリソースへの接続を初期化する
この静的な初期化を行うことで、これらのリソースはサンドボックスごとに 1 回初期化され、同じランタイム環境において、今後のすべての呼び出しで再利用できます。
詳細については、「静的初期化を最適化する」を参照してください。
注: Lambda はダウンストリームリソースへのアイドル接続を削除します。関数で持続的な接続を維持できるようにするには、使用する Lambda ランタイムに関連付けられた TCP keepAlive 変数を使用します。
使用している AWS SDK の再試行回数とタイムアウトの設定で、関数を初期化するのに十分な時間を確保していることを確認する
AWS SDK を使用して API コールを行ったが、呼び出しが失敗した場合、AWS SDK は自動的に呼び出しを再試行します。AWS SDK が再試行する回数と各再試行の期間は、各 AWS SDK ごとの設定によって決まります。関数の初期化には、デフォルトの AWS SDK 設定で確保された時間よりも長くかかる場合があります。
詳細については、「AWS SDK を使用して Lambda 関数を呼び出す際の再試行とタイムアウトの問題をトラブルシューティングする方法を教えてください」を参照してください。
(オプション) Lambda 関数にプロビジョニングされた同時実行を設定する
プロビジョニングされた同時実行は、要求された数のランタイム環境を初期化し、関数の呼び出しにすぐに応答できるように準備します。関数にプロビジョニングされた同時実行を設定するには、「プロビジョニングされた同時実行を設定する」の手順を実行します。
注: プロビジョニングされた同時実行を設定すると、AWS アカウントに料金が発生します。プロビジョニングされた同時実行は、関数のバージョンまたは Lambda 関数のエイリアスで設定できます。
Lambda 関数に十分なシステムリソースがあることを確認する
Lambda 関数の呼び出しに割り当てられるネットワーク帯域幅と CPU の量は、関数のメモリ設定によって決まります。
詳細については、「メモリと計算能力」を参照してください。
関数ハンドラーが文字列を返す前に、Lambda 関数が使用するバックグラウンドプロセスを確実に完了させる
詳細については、「AWS Lambda でのコンテナの再利用について」を参照してください。
Lambda 関数が、統合された AWS サービスの最大タイムアウト設定以内に動作するように構成されていることを確認する
Lambda 関数の最大呼び出しタイムアウト制限は 15 分ですが、他の AWS サービスではタイムアウト制限が異なる場合があります。
例えば、Amazon API Gateway は、Lambda 関数のプロキシ呼び出しが完了するまで最大 29 秒間待機します。
詳細については、「API Gateway を Lambda 関数と統合する際に発生するエラーを解決する方法を教えてください」を参照してください。 「他の AWS サービスによるイベントで Lambda を呼び出す」も参照してください。
関数がアクセスしようとしているエンドポイントへの有効なネットワークパスがあることを確認する
ネットワーク設定を確認するには、「Amazon VPC 内の Lambda 関数で発生するタイムアウトの問題をトラブルシューティングする方法を教えてください」の手順を実行してください。
- 言語
- 日本語

関連するコンテンツ
- 質問済み 8ヶ月前
- 質問済み 8ヶ月前
- 質問済み 8ヶ月前