

# Lambda での呼び出しに関する問題のトラブルシューティング
<a name="troubleshooting-invocation"></a>

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

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

`Invoke` オペレーションが返す可能性のあるエラータイプのリストについては、[呼び出し](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html) を参照してください。

**Topics**
+ [Lambda: 初期化フェーズ中に関数がタイムアウトします (Sandbox.Timedout)](#troubleshooting-timeouts)
+ [IAM: lambda:InvokeFunction は許可されていません](#troubleshooting-invocation-noauth)
+ [Lambda: 有効なブートストラップ (Runtime.InvalidEntrypoint) が見つかりませんでした](#troubleshooting-invocation-bootstrap)
+ [Lambda: オペレーションは ResourceConflictException を実行できません](#troubleshooting-invocation-ResourceConflictException)
+ [Lambda: 関数が Pending のままとなっています](#troubleshooting-invocation-pending)
+ [Lambda: 1 つの関数がすべての同時実行を使用しています](#troubleshooting-invocation-allconcurrency)
+ [一般: 他のアカウントまたはサービスで関数を呼び出すことはできません](#troubleshooting-invocation-cannotinvoke)
+ [一般: 関数の呼び出しはループしています](#troubleshooting-invocation-loop)
+ [Lambda: プロビジョニングされた同時実行によるエイリアスルーティング](#troubleshooting-invocation-alias)
+ [Lambda: プロビジョニングされた同時実行によるコールドスタートします](#troubleshooting-invocation-coldstart)
+ [Lambda: 新しいバージョンによるコールドスタート](#troubleshooting-invocation-newversion)
+ [Lambda: ランタイムでの予期しない Node.js の終了 (Runtime.NodejsExit)](#troubleshooting-invocation-nodejs-exit)
+ [EFS: 関数は EFS ファイルシステムをマウントできませんでした](#troubleshooting-invocation-efsmount)
+ [EFS: 関数は EFS ファイルシステムに接続できませんでした](#troubleshooting-invocation-efsconnect)
+ [EFS: タイムアウトのため、関数が EFS ファイルシステムをマウントできませんでした](#troubleshooting-invocation-efstimeout)
+ [Lambda: Lambda は時間がかかり過ぎている IO プロセスを検出しました](#troubleshooting-invocation-ioprocess)
+ [コンテナ: CodeArtifactUserException エラー](#troubleshooting-deployment-container-artifact)
+ [コンテナ: InvalidEntrypoint エラー](#troubleshooting-deployment-container-entrypoint)

## Lambda: 初期化フェーズ中に関数がタイムアウトします (Sandbox.Timedout)
<a name="troubleshooting-timeouts"></a>

 **エラー:** *Task timed out after 3.00 seconds* 

[初期化](lambda-runtime-environment.md#runtimes-lifecycle-ib)フェーズがタイムアウトすると、Lambda は、次の呼び出しリクエストが到着したときに `Init` フェーズを再実行することで、実行環境を再度初期化します。これは、[抑制された初期化](lambda-runtime-environment.md#suppressed-init)と呼ばれます。ただし、関数に短い[タイムアウト時間](configuration-timeout.md) (通常は 3 秒程度) が設定されている場合、割り当てられたタイムアウト時間中に抑制された初期化が完了せず、`Init` フェーズが再びタイムアウトすることがあります。また、抑制された初期化は完了しても、[呼び出し](lambda-runtime-environment.md#runtimes-lifecycle-invoke)フェーズが完了するまでの十分な時間が残らないために、`Invoke` フェーズがタイムアウトします。

タイムアウトエラーを減らすには、以下のうち 1 つ以上の方法を使用します。
+ **関数のタイムアウト時間を延長する**: [タイムアウト](configuration-timeout.md)を延長して、`Init` フェーズと `Invoke` フェーズが正常に完了する時間を与えます。
+ **関数メモリ割り当てを増やす**: [メモリ](configuration-memory.md)を増やすと、比例して CPU 割り当ても増加するため、`Init` フェーズと `Invoke` フェーズの両方を高速化できます。
+ **関数の初期化コードを最適化する**: 初期化に必要な時間を短縮して、設定されたタイムアウト時間内に `Init` フェーズと `Invoke` フェーズを完了できるようにします。

## IAM: lambda:InvokeFunction は許可されていません
<a name="troubleshooting-invocation-noauth"></a>

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

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

**注記**  
IAM アクションの名前 (`lambda:InvokeFunction`) は、`Invoke` Lambda API オペレーションを示しています。

詳細については、「[AWS Lambda アクセス許可の管理](lambda-permissions.md)」を参照してください。

## Lambda: 有効なブートストラップ (Runtime.InvalidEntrypoint) が見つかりませんでした
<a name="troubleshooting-invocation-bootstrap"></a>

 **エラー:** *有効なブートストラップが見つかりませんでした: [/var/task/bootstrap /opt/bootstrap]* 

このエラーは通常、デプロイパッケージのルートに `bootstrap` という名前の実行ファイルが含まれていない場合に発生します。例えば、.zip ファイルを使用して `provided.al2023` 関数をデプロイする場合、`bootstrap` ファイルは .zip ファイルのディレクトリ内ではなく、ルートにある必要があります。

## Lambda: オペレーションは ResourceConflictException を実行できません
<a name="troubleshooting-invocation-ResourceConflictException"></a>

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

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

詳細については、「[Lambda 関数の状態](functions-states.md)」を参照してください。

## Lambda: 関数が Pending のままとなっています
<a name="troubleshooting-invocation-pending"></a>

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

関数が 6 分を超えて `Pending` 状態で止まっている場合は、以下のいずれかの API オペレーションを呼び出して、ブロックを解除します。
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
+ [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)

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

## Lambda: 1 つの関数がすべての同時実行を使用しています
<a name="troubleshooting-invocation-allconcurrency"></a>

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

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

## 一般: 他のアカウントまたはサービスで関数を呼び出すことはできません
<a name="troubleshooting-invocation-cannotinvoke"></a>

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

[他のサービス](lambda-services.md)やアカウントから関数を呼び出すためのアクセス許可を、関数の[リソースベースのポリシー](access-control-resource-based.md)で付与します。別のアカウントから呼び出す場合、そのアカウントのユーザーにも[関数を呼び出すためのアクセス権限](access-control-identity-based.md)が必要です。

## 一般: 関数の呼び出しはループしています
<a name="troubleshooting-invocation-loop"></a>

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

これは、通常、関数が管理するリソースが、この関数をトリガーするのと同じ AWS のサービス内にある場合に発生します。例えば、Amazon Simple Storage Service (Amazon S3)バケットにオブジェクトを保存する関数を作成した場合、このバケットに[この関数を再度呼び出す通知](with-s3.md)が設定されていることがあります。関数の実行を停止するには、使用可能な[同時実行数](lambda-concurrency.md)を 0 に設定することで、以降の呼び出しがすべてスロットリングされます。その後、再帰呼び出しの原因となったコードパスまたは設定エラーを特定します。Lambda は、一部の AWS サービスおよび SDK の再帰ループを自動的に検出して停止します。詳細については、「[Lambda 再帰ループ検出を使用した無限ループの防止](invocation-recursion.md)」を参照してください。

## Lambda: プロビジョニングされた同時実行によるエイリアスルーティング
<a name="troubleshooting-invocation-alias"></a>

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

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

## Lambda: プロビジョニングされた同時実行によるコールドスタートします
<a name="troubleshooting-invocation-coldstart"></a>

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

関数での同時実行の数が、[プロビジョニングされた同時実行の設定済みレベル](provisioned-concurrency.md)以下の場合、コールドスタートは発生しないはずです。プロビジョニングされた同時実行が正常に動作しているかどうかを確認するには、次の手順を実行します。
+  関数バージョンまたはエイリアスで[プロビジョニングされた同時実行が有効になっていること](provisioned-concurrency.md)を確認してください。
**注記**  
プロビジョニング済み同時実行数は、未公開[バージョンの関数](configuration-versions.md) (\$1LATEST) では設定可能ではありません。
+ トリガーで正しい関数バージョンまたはエイリアスが呼び出されることを確認します。例えば、Amazon API Gateway を使用している場合は、API Gateway が、\$1LATEST ではなく、プロビジョニングされた同時実行で関数バージョンまたはエイリアスを呼び出すことを確認します。プロビジョニングされた同時実行が使用されていることを確認するには、[ProvisionedConcurrencyInvocations Amazon CloudWatch メトリクス](monitoring-concurrency.md#provisioned-concurrency-metrics)を確認します。ゼロ以外の値は、関数が初期化された実行環境で呼び出しを処理していることを示します。
+ [ProvisionedConcurrencySpilloverInvocations CloudWatch メトリクス](monitoring-concurrency.md#provisioned-concurrency-metrics)をチェックして、関数の同時実行がプロビジョニングされた同時実行の設定済みレベルを超えているかどうかを判別します。ゼロ以外の値は、プロビジョニングされたすべての同時実行が使用中であり、いくつかの呼び出しがコールドスタートで発生したことを示します。
+ [呼び出し頻度](gettingstarted-limits.md#api-requests) (1 秒あたりのリクエスト数) をご確認ください。プロビジョニングされた同時実行を持つ関数の最大レートは、プロビジョニングされた同時実行ごとに 1 秒あたり 10 件のリクエストです。例えば、100 のプロビジョニングされた同時実行で設定された関数は、1 秒あたり 1,000 件のリクエストを処理できます。呼び出し速度が 1 秒あたり 1,000 件のリクエストを超えると、コールドスタートがいくつか発生する可能性があります。

## Lambda: 新しいバージョンによるコールドスタート
<a name="troubleshooting-invocation-newversion"></a>

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

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

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

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

## Lambda: ランタイムでの予期しない Node.js の終了 (Runtime.NodejsExit)
<a name="troubleshooting-invocation-nodejs-exit"></a>

**問題:** *Lambda ランタイムクライアントが予期しない Node.js 終了コードを検出しました。*

このエラーは、コードのバグなどにより、すべての Promise が解決される前に関数が終了した場合に発生します。また、Node.js が Promise の解決を妨げるデッドロックを検出したときにも発生する可能性があります。このエラーは、コールバックスタイルのハンドラーではなく、非同期スタイルのハンドラーのみに影響します。

**影響を受けるランタイム:** Node.js 18 以降。

**この問題を解決するには:**

1. 関数コードで、非同期ハンドラーの未解決の promise を確認します。

1. 関数が完了する前に、すべての promise が適切に解決 (解決または拒否) されていることを確認します。

1. 非同期オペレーションで潜在的な競合状態がないかコードを確認します。

Node.js の終了コードとプロセスの終了の詳細については、「[Node.js ドキュメント](https://nodejs.org/docs/latest/api/process.html#exit-codes)」を参照してください。

## EFS: 関数は EFS ファイルシステムをマウントできませんでした
<a name="troubleshooting-invocation-efsmount"></a>

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

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

## EFS: 関数は EFS ファイルシステムに接続できませんでした
<a name="troubleshooting-invocation-efsconnect"></a>

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

関数は、NFS プロトコル (TCP ポート 2049) を使用して関数の[ファイルシステム](configuration-filesystem.md)への接続を確立できませんでした。VPC のサブネットの[セキュリティグループとルーティング設定](https://docs.aws.amazon.com/efs/latest/ug/network-access.html)を確認します。

関数の VPC 設定を更新した後にこれらのエラーが発生した場合は、ファイルシステムのアンマウントと再マウントを試してください。

## EFS: タイムアウトのため、関数が EFS ファイルシステムをマウントできませんでした
<a name="troubleshooting-invocation-efstimeout"></a>

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

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

## Lambda: Lambda は時間がかかり過ぎている IO プロセスを検出しました
<a name="troubleshooting-invocation-ioprocess"></a>

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

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

## コンテナ: CodeArtifactUserException エラー
<a name="troubleshooting-deployment-container-artifact"></a>

**エラー:** *CodeArtifactUserPendingException エラーメッセージ*

CodeArtifact は最適化を保留しています。Lambda が最適化を完了すると、この関数は[アクティブ状態](functions-states.md)に移行します。HTTP レスポンスコード 409。

**エラー:** *CodeArtifactUserDeletedException エラーメッセージ*

CodeArtifact は削除されるようスケジュールされています。HTTP レスポンスコード 409。

**エラー:** *CodeArtifactUserFailedException エラーメッセージ*

Lambda はコードの最適化に失敗しました。コードを修正してもう一度アップロードする必要があります。HTTP レスポンスコード 409。

## コンテナ: InvalidEntrypoint エラー
<a name="troubleshooting-deployment-container-entrypoint"></a>

**エラー:** *Runtime.ExitError または "errorType": "Runtime.InvalidEntrypoint"*

コンテナーイメージの ENTRYPOINT に、位置として絶対パスが含まれていることを確認します。また、イメージに ENTRYPOINT としてシンボリックリンクが含まれていないことを確認します。

**エラー: ** * CloudFormationテンプレートを使用していて、コンテナ ENTRYPOINT が NULL または空の値でオーバーライドされています。*

CloudFormation テンプレートの [ImageConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-lambda-function-imageconfig.html) リソースを確認します。テンプレートで`ImageConfig`リソースを宣言する場合は、3 つのプロパティすべてに空でない値を指定する必要があります。