Lambda 関数が失敗する場合のトラブルシューティング方法を教えてください。

所要時間3分
0

AWS Lambda 関数を呼び出すと、失敗してエラーが返されます。Lambda 関数が失敗する場合のトラブルシューティング方法を教えてください。

解決方法

Lambda 関数の失敗をトラブルシューティングするには、この記事に記載されている 1 つ以上の AWS サービスや機能を使用して、エラーの原因を特定します。次に、表示されているリンクに従って、各問題のトラブルシューティングのベストプラクティスを確認します。

アクセス許可エラーの特定とトラブルシューティング

Lambda デプロイパッケージのセキュリティアクセス許可が正しくない場合は、次のいずれかのエラーが表示されます。

  • EACCES: パーミッションが拒否されました、'/var/task/index.js' を開く
  • cannot load such file -- function ( — function のファイルをロードできません)
  • [ Errno 13] アクセス許可が拒否されました:'/var/task/function.py'

AWS Identity and Access Management(IAM) ユーザー(または継承するロール)に、関数を呼び出すアクセス許可がない場合、次のエラーが表示されます。

ユーザー:arn:aws:iam::123456789012:user/developer は、my-function のリソース上で lambda:InvokeFunction を実行する権限がありません。

Lambda アクセス許可エラーのトラブルシューティングを行うには

AWS CloudTrail の Lambda ログファイルのエントリを確認します。Lambda を呼び出すリクエスタには、関数を呼び出すために必要な AWS Identity and Access Management (IAM) のアクセス許可が必要です。必要なアクセス許可を付与するには、Lambda 関数のアクセス許可を更新します。

詳細については、「AWS Lambda ログファイルエントリの概要」、「AWS Lambda Identity and Access のトラブルシューティング」および「IAM: Lambda: InvokeFunction は許可されていません」を参照してください。

コードエラーの特定とトラブルシューティング

Lambda コードに問題がある場合は、多くの種類のエラーが表示されます。以下は、より一般的な Lambda コード関連のエラーの一部です。

  • Unable to marshal response: Object of type AttributeError is not JSON serializable (応答をシリアライズできません: AttributeError 型のオブジェクトは JSON シリアル化できません)
  • 問題: ランタイムに含まれている AWS SDK が最新バージョンではありません
  • (Node.js) Function returns before code finishes executing ( ( Node.js) コードの実行が完了する前に関数が戻る)
  • KeyError

Lambda コードエラーのトラブルシューティングを行うには

1.    AWS Lambda の Amazon CloudWatch Logs を確認します。

CloudWatch を使用して、関数のコードで生成されたすべてのログを表示し、潜在的な問題を特定できます。詳細については、「AWS Lambda の Amazon CloudWatch Logs へのアクセス」を参照してください。関数ログの詳細については、使用しているプログラミング言語の次の Lambda 関数のロギング手順を参照してください。

注: 関数がスタックトレースを返している場合、スタックトレースのエラーメッセージは、エラーの原因を指定します。

2.    AWS X-Ray を使用して、コードパフォーマンスのボトルネックを特定します。Lambda 関数でダウンストリーム AWS リソース、マイクロサービス、データベース、HTTP ウェブ API を使用している場合は、AWS X-Ray を使用して問題のトラブルシューティングを行います。詳細については、「AWS X-Ray で AWS Lambda を使用する」を参照してください。

3.    関数のデプロイパッケージが必要な依存関係をインポートできることを確認します。使用しているプログラミング言語のデプロイパッケージの指示に従います。

注: また、Lambda レイヤー を使用して、デプロイパッケージの外部で依存関係を追加できます。

4.    (コンテナイメージとしてデプロイされたコードの場合) ランタイムインターフェイスクライアントをインストールし、イメージを正しくデプロイしていることを確認します。使用しているプログラミング言語のコンテナイメージの指示に従います 。

ネットワークエラーの特定とトラブルシューティング

Lambda ネットワーク構成に問題がある場合は、さまざまな種類のエラーが表示されます。以下は、Lambda ネットワーク関連の最も一般的なエラーの一部です。

関数が Virtual Private Cloud (VPC) にあり、インターネットアクセスを失うか、タイムアウトすると、次のエラーが表示されます。

connect ETIMEDOUT 176.32.98.189:443 (ETIMEDOUT 176.32.98.189:443 を接続する)
10.00 秒後にタスクがタイムアウトしました

関数がある VPC が Elastic Network Interface の制限に達すると、次のエラーが表示されます。

ENILimitReachedException: The elastic network interface limit was reached for the function's VPC (関数の VPC で Elastic Network Interface の制限に達しました。)

Transmission Control Protocol (TCP) 接続が切断されると、次のエラーが表示されます。

Connection reset by peer (ピアによる接続のリセット)

Lambda ネットワークエラーのトラブルシューティングを行うには

1.    関数が到達しようとしているエンドポイントへの有効なネットワークパスがあることを確認します。詳細については、VPC 内のリソースにアクセスできるように Lambda 関数を設定するを参照してください。

2.    (Amazon VPC に接続された関数の場合)関数がインターネットにアクセスできることを確認します。詳細については、「Amazon VPC に接続されている Lambda 関数にインターネットアクセスを許可するにはどうすればよいですか?」を参照してください。 VPC の Lambda 関数のタイムアウト問題をトラブルシューティングする方法を教えてください。

注: VPC 設定を確認した後、関数コードがパブリックエンドポイントに到達しない理由を特定できない場合は、 VPC フローログをオンにします 。VPC フローログを使用すると、VPC との間で送受信されるすべてのネットワークトラフィックを確認できます。これにより、特定のリクエストが拒否された理由またはルーティングされなかった理由を特定できます。詳細については、「 Lambda のネットワークの問題のトラブルシューティング 」を参照してください。

スロットルエラーの特定とトラブルシューティング

関数がスロットルされると 、次のエラーが表示されます。

Rate exceeded (速度を超過しました)
429 TooManyRequestsException

Lambda スロットリングエラーのトラブルシューティングを行うには

Lambda の CloudWatch メトリックスを確認します。詳細については、AWS Lambda の CloudWatch メトリクスを参照してください。

監視する主なメトリック:

  • ConcurrentExecutions
  • UnreservedConcurrentExecutions
  • スロットル

注: Lambda 関数を呼び出すリクエストが、同時実行数の制限よりも速く到着した場合、リクエストは 429 スロットリングエラーで失敗します。詳細については、AWS Lambda 関数のスケーリングを参照してください。「Rate exceeded」および 429「TooManyRequestsException」エラーを伴う Lambda 関数のスロットリングをトラブルシューティングする方法を教えてください。

Invoke API 500 エラーおよび Invoke API 502 エラーの特定とトラブルシューティング

呼び出し要求が失敗した場合は、次の 502 または 500 のサーバー側エラーのいずれかが表示されます。

  • InvalidRuntimeException
  • InvalidSecurityGroupIDException
  • InvalidZipFileException
  • KMSAccessDeniedException
  • KMSNotFoundException
  • ou have exceeded the maximum limit for Hyperplane ENIs for your account (アカウントの Hyperplane ENI の上限を超えました)
  • SubnetIPAddressLimitReachedException

Lambda Invoke API 500 エラーおよび 502 エラーのトラブルシューティングを行うには

Lambda 関数を呼び出す際の 502 エラーと 500 エラーをトラブルシューティングするにはどうすればよいですか? 考えられるエラーのリストと説明については、Lambda Invoke API リファレンスのエラー参照してください。

コンテナイメージエラーの特定とトラブルシューティング

コンテナイメージを使用していて、コンテナイメージに問題がある場合は、次のいずれかのエラーが表示されます。

  • 「errorType」: 「Runtime.InvalidEntrypoint」
  • エラー: You are using an AWS CloudFormation template, and your container ENTRYPOINT is being overridden with a null or empty value. (AWS CloudFormation テンプレートを使用していて、コンテナのエンドポイントが null つまり空の値でオーバーライドされています。)

Lambda コンテナイメージのエラーをトラブルシューティングするには

Lambda のコンテナイメージの問題のトラブルシューティングの手順に従います 。

注: エラーの原因となっている問題の種類が不明な場合は、この資料の「Lamda コードエラーの特定とトラブルシューティング 」セクションの手順に従います。


関連情報

Lambda アプリケーションのモニタリングとトラブルシューティング

AWS Lambda でのエラー処理と自動再試行

AWS公式
AWS公式更新しました 1年前