Lambda での呼び出しに関する問題のトラブルシューティング - AWS Lambda

Lambda での呼び出しに関する問題のトラブルシューティング

Lambda 関数を呼び出すと、Lambda はリクエストを検証し、イベントを関数 (非同期呼び出しの場合はイベントキュー) に送信する前にスケーリングキャパシティーをチェックします。呼び出しエラーは、リクエストのパラメータ、イベント構造、関数の設定、ユーザーのアクセス許可、リソースに対するアクセス許可、または制限に関する問題が原因で発生する場合があります。

関数を直接呼び出した場合は、Lambda からのレスポンスに呼び出しエラーが表示されます。イベントソースマッピングまたは別のサービスを通じて関数を非同期的に呼び出した場合は、ログ、デッドレターキュー、または失敗イベントの送信先にエラーが表示されることがあります。エラー処理オプションと再試行の動作は、関数を呼び出した方法とエラーの種類によって異なります。

Invoke オペレーションが返す可能性のあるエラータイプのリストについては、呼び出し を参照してください。

IAM: lambda:InvokeFunction は許可されていません

エラー: ユーザー (arn:aws:iam::123456789012:user/developer) によるリソース (my-function) に対する lambda:InvokeFunction の実行は許可されていません

AWS Identity and Access Management (IAM) ユーザー、または引き受けるロールには、関数を呼び出すためのアクセス権限が必要です。この要件は、Lambda 関数、および関数を呼び出す他のコンピューティングリソースにも適用されます。AWS マネージドポリシーの AWSLambdaRole を IAM ユーザーに追加するか、ターゲット関数で lambda:InvokeFunction アクションを許可するカスタムポリシーを追加します。

注記

他の Lambda API オペレーションとは異なり、IAM アクションの名前 (lambda:InvokeFunction) と関数を呼び出すための API オペレーションの名前 (Invoke) は一致しません。

詳細については、「AWS Lambda アクセス権限」を参照してください。

Lambda: オペレーションは ResourceConflictException を実行できません

エラー: ResourceConflictException: 今回はオペレーションを実行できません。現在、この関数は次の状態にあります: 保留中

関数の作成時に Virtual Private Cloud (VPC) に接続すると、Lambda が Elastic Network Interface を作成するまでの間、関数は Pending 状態になります。この間は、関数を呼び出したり変更したりすることはできません。関数の作成後に VPC に接続すると、更新が保留中である間に関数を呼び出すことができます。ただし、そのコードや設定を変更することはできません。

詳細については、「Lambda 関数の状態」を参照してください。

Lambda: 関数が Pending のままとなっています

エラー: 関数が数分間 Pending 状態で止まっている。

関数が 6 分を超えて Pending 状態で止まっている場合は、以下のいずれかの API オペレーションを呼び出して、ブロックを解除します。

Lambda は保留中のオペレーションをキャンセルし、関数を Failed 状態に移します。その後、関数を削除して再作成するか、更新した関数を試すことができます。

Lambda: 1 つの関数がすべての同時実行を使用しています

問題: 1 つの関数がすべての利用可能な同時実行を使用しているため、他の関数がスロットリングされる。

AWS リージョンで AWS アカウントで使用可能な同時実行をプールに分割するには、予約済みの同時実行を使用します。予約同時実行により、関数は常に割り当てられた同時実行にスケールでき、割り当てられた同時実行を超えることはありません。

一般: 他のアカウントまたはサービスで関数を呼び出すことはできません

問題: 関数を直接呼び出すことはできるが、別のサービスやアカウントから呼び出すと関数が実行されない。

他のサービスやアカウントから関数を呼び出すためのアクセス許可を、関数のリソースベースのポリシーで付与します。別のアカウントから呼び出す場合、そのアカウントのユーザーにも関数を呼び出すためのアクセス権限が必要です。

一般: 関数の呼び出しはループしています

問題: 関数がループ内で連続して呼び出される。

これは、通常、関数が管理するリソースが、この関数をトリガーするのと同じ AWS のサービス内にある場合に発生します。例えば、Amazon Simple Storage Service (Amazon S3)バケットにオブジェクトを保存する関数を作成した場合、このバケットにこの関数を再度呼び出す通知が設定されていることがあります。関数の実行を停止するには、関数の設定のページで [Throttle] (スロットリング) を選択します。その後、再帰呼び出しの原因となったコードパスまたは設定エラーを特定します。

Lambda: プロビジョニングされた同時実行によるエイリアスルーティング

問題: エイリアスのルーティング中の、プロビジョニングされた同時実行の Spillover Invocations。

Lambda は、単純な確率モデルを使用して 2 つの関数バージョン間でトラフィックを分散します。低いトラフィックレベルでは、各バージョンで設定されたトラフィックの割合と実際の割合の間に大きな差異が生じる場合があります。関数がプロビジョニングされた同時実行を使用する場合、エイリアスルーティングがアクティブである間に、プロビジョニングされた同時実行インスタンスの数を高く設定することで、過剰呼び出しを防ぐことができます。

Lambda: プロビジョニングされた同時実行によるコールドスタートします

問題: プロビジョニングされた同時実行を有効した後に、コールドスタートが発生します。

関数での同時実行の数が、プロビジョニングされた同時実行の設定済みレベル以下の場合、コールドスタートは発生しないはずです。プロビジョニングされた同時実行が正常に動作しているかどうかを確認するには、次の手順を実行します。

  • 関数バージョンまたはエイリアスでプロビジョニングされた同時実行が有効になっていることを確認してください。

    注記

    プロビジョニングされた同時実行は、$LATEST バージョンでは設定できません。

  • トリガーで正しい関数バージョンまたはエイリアスが呼び出されることを確認します。例えば、Amazon API Gateway を使用している場合は、API Gateway が、$LATEST ではなく、プロビジョニングされた同時実行で関数バージョンまたはエイリアスを呼び出すことを確認します。プロビジョニングされた同時実行が使用されていることを確認するには、ProvisionedConcurrencyInvocations Amazon CloudWatch メトリクスを確認します。ゼロ以外の値は、関数が初期化された実行環境で呼び出しを処理していることを示します。

  • ProvisionedConcurrencySpilloverInvocations CloudWatch メトリクスをチェックして、関数の同時実行がプロビジョニングされた同時実行の設定済みレベルを超えているかどうかを判別します。ゼロ以外の値は、プロビジョニングされたすべての同時実行が使用中であり、いくつかの呼び出しがコールドスタートで発生したことを示します。

  • 呼び出し頻度 (1 秒あたりのリクエスト数) をご確認ください。プロビジョニングされた同時実行を持つ関数の最大レートは、プロビジョニングされた同時実行ごとに 1 秒あたり 10 件のリクエストです。例えば、100 のプロビジョニングされた同時実行で設定された関数は、1 秒あたり 1,000 件のリクエストを処理できます。呼び出し速度が 1 秒あたり 1,000 件のリクエストを超えると、コールドスタートがいくつか発生する可能性があります。

注記

コールドスタートが発生していなくても、初期化された実行環境における最初の呼び出しで、CloudWatch Logs でゼロ以外の Init Duration メトリクスが報告されるという既知の問題があります。当社では、CloudWatch Logs への報告を訂正するための修正を開発中です。

Lambda: プロビジョニングされた同時実行によるレイテンシーの変動性

問題: プロビジョニングされた同時実行を有効にした後、最初の呼び出しでレイテンシーの変動が発生します。

関数のランタイムとメモリ設定によっては、初期化された実行環境での最初の呼び出しでレイテンシーの変動がいくつか発生します。例えば、.NET およびその他の JIT ランタイムは、最初の呼び出し時にリソースを遅延的にロードし、レイテンシーの変動を生じさせます (通常は数十ミリ秒)。この変動は、128 MiB 関数でより明らかです。この関数の設定メモリを増やすことで、これを緩和できます。

Lambda: 新しいバージョンによるコールドスタート

問題: 関数の新しいバージョンのデプロイ中にコールドスタートが発生します。

関数エイリアスを更新すると、Lambda は、エイリアスで設定された重みに基づいて、プロビジョニングされた同時実行を新しいバージョンに自動的にシフトします。

エラー: KMSDisabledException: 使用されている KMS キーが無効になっているため、Lambda は環境変数を復号できませんでした。関数の KMS キー設定を確認してください。

このエラーは、AWS Key Management Service (AWS KMS) キーが無効になっている場合、またはキーの使用を Lambda に許可する付与が取り消された場合に発生します。許可がない場合は、別のキーを使用するように関数を設定します。その後、カスタムキーを再割り当てして許可を再作成します。

EFS: 関数は EFS ファイルシステムをマウントできませんでした

エラー: EFSMountFailureException: この関数は、アクセスポイント arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd に EFS ファイルシステムをマウントできませんでした。

関数のファイルシステムへのマウントリクエストが拒否されました。関数のアクセス許可を確認し、そのファイルシステムとアクセスポイントが存在していて使用できる状態であることを確認します。

EFS: 関数は EFS ファイルシステムに接続できませんでした

エラー: EFSMountConnectivityException: この関数は、アクセスポイント arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd で Amazon EFS ファイルポイントに接続できませんでした。ネットワーク設定を確認して、もう一度試してください。

関数は、NFS プロトコル (TCP ポート 2049) を使用して関数のファイルシステムへの接続を確立できませんでした。VPC のサブネットのセキュリティグループとルーティング設定を確認します。

EFS: タイムアウトのため、関数が EFS ファイルシステムをマウントできませんでした

エラー: EFSMountTimeoutException: この関数は、マウントのタイムアウトのため、アクセスポイント {arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd} に EFS ファイルシステムをマウントできませんでした。

関数は、そのファイルシステムに接続できましたが、マウントオペレーションがタイムアウトしました。しばらくしてから再試行し、関数の同時実行数を制限して、ファイルシステムの負荷を軽減することを検討してください。

Lambda: Lambda は時間がかかり過ぎている IO プロセスを検出しました

EFSIOException: 時間がかかりすぎている IO プロセスを Lambda が検出したため、この関数インスタンスは停止されました。

以前の呼び出しがタイムアウトし、Lambda が関数ハンドラーを終了できませんでした。この問題は、接続されたファイルシステムがバーストクレジットを使い果たし、ベースラインスループットが不十分な場合に発生することがあります。スループットを高めるには、ファイルシステムのサイズを増やすか、プロビジョニングされたスループットを使用します。詳細については、「Throughput」を参照してください。