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

所要時間3分
0

AWS Lambda 関数を呼び出すと、失敗してエラーが返されます。

解決策

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

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

Lambda ネットワーク設定に問題がある場合は、さまざまな種類のエラーが表示されます。Lambda ネットワーク関連で最も一般的なエラーを次に示します。

関数が仮想プライベートクラウド (VPC) になく、プライベート DNS 名を使用してリソースにアクセスしようとすると、次のエラーが表示されます。

UnknownHostException
エラー: getaddrinfo ENOTFOUND

関数が VPC 内にあり、インターネットにアクセスできなくなったり、タイムアウトしたりすると、次のエラーが表示されます。

connect ETIMEDOUT 176.32.98.189:443
Task timed out after 10.00 seconds

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

ENILimitReachedException: The elastic network interface limit was reached for the function's VPC.

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

Connection reset by peer
ECONNRESET
ECONNREFUSED

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

1.    関数が Amazon Virtual Private Cloud (Amazon VPC) にアクセスしようとしているエンドポイントへの有効なネットワークパスがあることを確認します。詳細については、「アウトバウンドネットワークを VPC 内のリソースに接続する」を参照してください。

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

3.    DNS 解決関連の問題をトラブルシューティングするには、VPC がプライベートリソースアクセス用に設定されていることを確認します。AWS が提供する DNS を使用していない場合は、EC2 インスタンスを使用して、カスタム提供された DHCP オプションで DNS 名が正しく解決されることを確認します。詳細については、「DNS の仕組みと、部分的または断続的な DNS 障害をトラブルシューティングする方法を教えてください」を参照してください。

注: VPC 設定を確認しても関数コードがパブリックエンドポイントに到達しない理由を特定できない場合は、VPC フローログを有効にします。VPC フローログを使用すると、VPC に出入りするすべてのネットワークトラフィックを確認できます。VPC フローログでは、特定のリクエストが拒否された理由やルーティングされなかった理由を特定することもできます。詳細については、「Troubleshoot networking issues in Lambda」を参照してください。

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

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

  • EACCES: permission denied, open '/var/task/index.js'
  • cannot load such file -- function
  • [Errno 13] Permission denied: '/var/task/function.py'

Lambda ランタイムには、デプロイパッケージ内のファイルを読み取るアクセス許可が必要です。ファイルモードは、chmod コマンドを使用して変更できます。以下のコマンド例では、現在のディレクトリ内のすべてのファイルとフォルダをすべてのユーザーが読み取れるようにします。

chmod -R o+rX .

詳細については、「Lambda におけるデプロイメントに関する問題のトラブルシューティング」を参照してください。

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

User: arn:aws:iam::123456789012:user/developer is not authorized to perform: lambda:InvokeFunction on resource: my-function

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

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

詳細については、以下を参照してください。

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

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

  • **応答を整列化できません: AttributeError 型のオブジェクトは JSON シリアル化できません **
  • **問題: ランタイムに含まれている AWS SDK は最新バージョンではありません **
  • (Node.js) コードの実行が完了する前に関数が戻る
  • KeyError

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

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

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

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

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

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

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

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

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

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

レートを超過しました
429 TooManyRequestsException

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

Lambda の CloudWatch メトリクスを確認します。詳細については、「Working with Lambda function metrics」を参照してください。

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

  • ConcurrentExecutions
  • UnreservedConcurrentExecutions
  • Throttles

注: Lambda 関数を呼び出すリクエストが、Lambda 関数のスケーリングまたは同時実行数の制限よりも速く到着した場合、リクエストは 429 スロットリングエラーで失敗します。詳細については、「Lambda function scaling」を参照してください。また、「レートを超過しました)」というエラーと 429「TooManyRequestsException」というエラーの Lambda 関数のスロットリングをトラブルシューティングするにはどうすればよいですか?」も参照してください

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

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

  • InvalidRuntimeException
  • InvalidSecurityGroupIDException
  • InvalidZipFileException
  • KMSAccessDeniedException
  • KMSNotFoundException
  • **アカウントの Hyperplane ENI の上限を超えました **
  • SubnetIPAddressLimitReachedException

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

AWS Lambda からの HTTP 502 および HTTP 500 ステータスコード (サーバー側) エラーを解決する方法を教えてください」の手順に従います。 考えられるエラーのリストと説明については、Lambda invoke API リファレンスのエラーを参照してください。

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

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

  • 「errorType」: 「Runtime.InvalidEntrypoint」
  • エラー: AWS CloudFormation テンプレートを使用していて、コンテナのエントリポイントが NULL または空の値でオーバーライドされています。

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

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


関連情報

Monitoring and troubleshooting Lambda applications

Error handling and automatic retries in Lambda

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