メニュー
AWS Lambda
開発者ガイド

Amazon CloudWatch を使用した AWS Lambda 関数のトラブルシューティングとモニタリング

AWS Lambda はお客様の代わりに自動的に Lambda 関数をモニタリングし、Amazon CloudWatch を通じてメトリクスを報告します。コードの実行をモニタリングできるようにするため、Lambda はリクエスト数、リクエストあたりのレイテンシー、エラーを引き起こしたリクエスト数を自動的に追跡し、関連する CloudWatch のメトリクスを発行します。これらのメトリクスを利用して、CloudWatch カスタムアラームを設定できます。CloudWatch の詳細については、Amazon CloudWatch ユーザーガイド を参照してください。

AWS Lambda コンソール、CloudWatch コンソール、他の Amazon Web Services (AWS) リソースを使用して、各 Lambda 関数のリクエストレートとエラーレートを表示できます。以下のトピックでは、Lambda CloudWatch メトリクスと、それらへのアクセス方法について説明します。

コードが正常に動作しているかどうかを検証できるように、ログ記録ステートメントをコードに挿入できます。Lambda は、自動的に Amazon CloudWatch Logs と統合され、Lambda 関数と関連付けられた CloudWatch Logs グループ (/aws/lambda/<関数名>) にすべてのログをコードからプッシュできます。ロググループの詳細と、CloudWatch コンソールを通じてロググループにアクセスする方法の詳細については、『Amazon CloudWatch ユーザーガイド』の「システム、アプリケーション、カスタムログファイルのモニタリング」を参照してください。CloudWatch ログエントリにアクセスする方法については、「AWS Lambda の Amazon CloudWatch ログへのアクセス」を参照してください。

注記

Lambda 関数コードが実行されているが、数分経過してもログデータがまったく生成されない場合は、Lambda 関数の実行ロールでログデータを CloudWatch Logs に書き込むアクセス権限が付与されていない可能性があります。これらのアクセス権限が付与されるように実行ロールを正しくセットアップしていることを確認する方法については、「アクセス権限の管理: IAM ロール (実行ロール) を使用する」を参照してください。

AWS Lambda のトラブルシューティングシナリオ

このセクションでは、CloudWatch のログおよびモニタリング機能を使用して Lambda 関数をモニタリングおよびトラブルシューティングする方法について説明します。

トラブルシューティングシナリオ 1: Lambda 関数が正常に機能しない

このシナリオは、ちょうど「チュートリアル: Amazon S3 での AWS Lambda の使用」を終えたところです。ただし、S3 オブジェクトを作成したときに Amazon S3 にサムネイルイメージをアップロードするために作成した Lambda 関数が正常に機能しません。Amazon S3 にオブジェクトをアップロードすると、サムネイルイメージがアップロードされていないことがわかります。この問題は、次のようにトラブルシューティングできます。

Lambda 関数が正常に機能しない理由を特定するには

  1. コードを確認し、正常に動作していることを確認します。エラーレートが高い場合は正常に動作していないことを示している可能性があります。

    他の Node.js 関数と同様にコードをローカルでテストするか、コンソールのテスト呼び出し機能を使用して Lambda コンソール内でテストできます。または、AWS CLI コマンド Invoke を使用できます。イベントに対する応答としてコードが実行されるたびに、Lambda 関数に関連付けられたロググループ (/aws/lambda/<関数名>) にログエントリが書き込まれます。

    ログに記録される可能性のあるエラーの例を以下に示します。

    • ログにスタックトレースがある場合、コード内のエラーと考えられます。コードを見直し、スタックトレースが示しているエラーをデバッグします。

    • ログに permissions denied エラーがある場合は、実行ロールとして指定した IAM ロールに、必要なアクセス権限がない可能性があります。IAM ロールに、コードで参照されているすべての AWS リソースにアクセスするために必要なアクセス権限があることを確認します。実行ロールを正しくセットアップしたことを確認するには、「アクセス権限の管理: IAM ロール (実行ロール) を使用する」を参照してください。

    • ログに timeout exceeded エラーがある場合は、タイムアウト設定が関数コードの実行時間を超えています。これは、タイムアウトが短すぎるか、コードの実行に時間がかかりすぎているための可能性があります。

    • ログに memory exceeded エラーがある場合は、メモリ設定が低すぎます。大きい値に設定します。メモリ容量制限の詳細については、「CreateFunction」を参照してください。メモリ設定を変更すると、期間中の課金方法も変更される可能性があります。料金については、「AWS Lambda 製品のウェブサイト」を参照してください。

  2. Lambda 関数がリクエストを受信していることを確認します。

    関数コードが正常に動作していて、テストの呼び出しに正しく応答している場合でも、関数が Amazon S3 からリクエストを受信していない可能性があります。Amazon S3 が関数を呼び出すことができる場合、CloudWatch リクエストのメトリクスが増加します。CloudWatch リクエストが増加していない場合は、関数に関連付けられているアクセス権限ポリシーを確認します。

トラブルシューティングシナリオ 2: Lambda 関数の実行時のレイテンシーが増加する

このシナリオは、ちょうど「チュートリアル: Amazon S3 での AWS Lambda の使用」を終えたところです。ただし、S3 オブジェクトを作成したときに Amazon S3 にサムネイルイメージをアップロードするために作成した Lambda 関数が正常に機能しません。Amazon S3 にオブジェクトをアップロードする際、サムネイルイメージがアップロードされていることがわかりますが、コードの実行に予想よりも時間がかなりかかっています。この問題は、いくつかの方法でトラブルシューティングすることができます。たとえば、Lambda 関数の CloudWatch メトリクス "latency" をモニタリングして、レイテンシーが増加しているかどうかを確認できます。または、Lambda 関数の CloudWatch メトリクス "errors" が増加している場合は、タイムアウトエラーが原因である可能性があります。

Lambda 関数の実行時にレイテンシーが増加する理由を特定するには

  1. 異なるメモリ設定でコードをテストします。

    コードの実行に時間がかかりすぎる場合、そのロジックを実行するのに十分なコンピューティングリソースがない可能性があります。Lambda コンソールのテスト呼び出し機能を使用して、関数に割り当てられるメモリを増やし、もう一度コードをテストしてみてください。関数のログエントリでは、使用されたメモリ量、コードの実行時間、割り当てられたメモリを確認できます。メモリ設定を変更すると、期間中の課金方法が変更される可能性があります。料金については、「AWS Lambda」を参照してください。

  2. ログを使用して、実行ボトルネックの原因を調査します。

    他の Node.js 関数と同様にコードをローカルでテストするか、Lambda コンソールでテスト呼び出し機能を使用して Lambda コンソール内でテストできます。または、AWS CLI で asyncInvoke コマンドを使用できます。イベントに対する応答としてコードが実行されるたびに、Lambda 関数に関連付けられたロググループ (aws/lambda/<関数名>) にログエントリが書き込まれます。他のサービスへのコールアウトなど、コードのさまざまな部分にログ記録ステートメントを追加し、コードのさまざまな部分の実行にかかる時間を確認します。