Lambda におけるデプロイメントに関する問題のトラブルシューティング - AWS Lambda

Lambda におけるデプロイメントに関する問題のトラブルシューティング

関数を更新すると、Lambda は、関数の新しいインスタンスを起動してコードや設定の更新を反映することで、その変更をデプロイします。デプロイエラーが発生すると、新しいバージョンは使用できなくなります。デプロイエラーは、デプロイパッケージ、コード、アクセス許可、またはツールに関する問題が原因で発生する場合があります。

Lambda API を使用するか、AWS CLI などのクライアントを使用して関数に更新を直接デプロイした場合、エラーは Lambda の出力に直接表示されます。AWS CloudFormation、AWS CodeDeploy、AWS CodePipeline などのサービスを使用した場合は、該当サービスのログまたはイベントストリームで Lambda からのレスポンスを探します。

以下のトピックでは、Lambda API、コンソール、ツールの使用時に発生する可能性のあるエラーや問題のトラブルシューティングに関するアドバイスを提供します。ここに記載されていない問題が見つかった場合は、このページの [Feedback] ボタンを使用して報告することができます。

トラブルシューティングに関するアドバイス、およびサポートへの一般的な質問に対する回答については、AWS ナレッジセンターにアクセスしてください。

Lambda アプリケーションのデバッグとトラブルシューティングの詳細については、Serverless Land の「デバッグ」を参照してください。

一般: アクセス権限が拒否されました/該当のファイルをロードできません

エラー: EACCES: アクセス許可が拒否されました。'/var/task/index.js' を開きます。

エラー: そのようなファイルはロードできません -- 関数

エラー: [Errno 13] アクセス許可が拒否されました: '/var/task/function.py'

Lambda ランタイムには、デプロイパッケージ内のファイルを読み取るアクセス許可が必要です。Linux アクセス許可の 8 進表記では、Lambda には実行不可能なファイル (rw-r--r--) には 644 のアクセス許可、ディレクトリと実行可能ファイルには 755 のアクセス許可 (rwxr-xr-x) が必要です。

Linux と MacOS で、デプロイパッケージ内のファイルやディレクトリのファイルアクセス権限を変更するには、chmod コマンドを使用します。例えば、実行可能ファイルに正しいアクセス許可を付与するには、次のコマンドを実行します。

chmod 755 <filepath>

Windows でファイルアクセス許可を変更するには、「Microsoft Windows ドキュメント」の「Set, View, Change, or Remove Permissions on an Object」を参照してください。

一般: を呼び出すとエラーが発生します UpdateFunctionCode

エラー: オペレーションの UpdateFunctionCode呼び出し時にエラー (RequestEntityTooLargeException) が発生しました

デプロイパッケージまたはレイヤーアーカイブを Lambda に直接アップロードする場合、ZIP ファイルのサイズは 50 MB に制限されます。これよりも大きなファイルをアップロードするには、Amazon S3 に保存し、S3Bucket と S3Key のパラメータを使用します。

注記

AWS CLI、AWS SDK などを使用してファイルを直接アップロードすると、バイナリ ZIP ファイルは base64 に変換され、サイズが約 30% 増加します。この点と、リクエスト内の他のパラメータのサイズを考慮して、Lambda で実際に適用されるリクエストサイズの制限はより大きくなります。このため、50 MB の制限は概算です。

Amazon S3: エラーコード PermanentRedirect。

エラー: 中にエラーが発生しました GetObject。S3 エラーコード: PermanentRedirectS3 エラーメッセージ: バケットはリージョン us-east-2 にあります。このリージョンを使用してリクエストを再試行してください

Amazon S3 バケットから関数のデプロイパッケージをアップロードする場合、そのバケットは関数と同じリージョンに存在する必要があります。この問題は、 の呼び出しで Amazon S3 オブジェクトを指定するかUpdateFunctionCode、 または AWS CLIAWS SAMCLI で パッケージとデプロイコマンドを使用する場合に発生する可能性があります。アプリケーションを開発するリージョンごとにデプロイアーティファクトバケットを作成してください。

一般: 見つかりません、ロードできません、インポートできません、クラスが見つかりません、該当のファイルまたはディレクトリがありません

エラー: モジュール 'function' が見つかりません

エラー: そのようなファイルはロードできません -- 関数

エラー: モジュール 'function' をインポートできません

エラー: クラスが見つかりません: function.Handler

エラー: fork/exec /var/task/function: そのようなファイルやディレクトリはありません

エラー: アセンブリ 'Function' から型 'Function.Handler' をロードできません。

関数のハンドラー設定のファイルまたはクラスの名前がコードと一致しません。詳細については、次のセクションを参照してください。

一般: 未定義のメソッドハンドラー

エラー: index.handler が定義されていないか、エクスポートされていません

エラー: モジュール 'function' にハンドラー 'handler’ がありません

エラー: #<LambdaHandler:0x00055b76ccebf98> の未定義メソッド「ハンドラー

エラー: 適切なメソッドの署名の付いた handleRequest という名前のパブリックメソッドがクラス function.Handler で見つかりません

エラー: アセンブリ 'Function' に型 'Function.Handler' のメソッド 'handleRequest' が見つかりません

関数のハンドラー設定のハンドラーメソッドの名前がコードと一致しません。各ランタイムはハンドラーの命名規則を定義します (filename.methodname など)。ハンドラーは、関数を呼び出したときにランタイムで実行される、関数のコード内のメソッドです。

一部の言語の場合、Lambda は、ハンドラーメソッドに特定の名前があることを期待するインターフェイスを持つライブラリを提供します。言語別のハンドラーの命名の詳細については、以下のトピックを参照してください。

Lambda: レイヤー変換が失敗しました

エラー: Lambda レイヤー変換が失敗しました。この問題を解決するための情報については、Lambda ユーザーガイドの「Lambda でのデプロイ問題のトラブルシューティング」ページを参照してください。

Lambda 関数をレイヤーで設定すると、Lambda はそのレイヤーを関数コードでマージします。このプロセスが完了しない場合は、Lambda はこのエラーを返します。このエラーが発生した場合は、次の手順を実行します。

  • レイヤーから未使用のファイルをすべて削除する

  • レイヤー内のシンボリックリンクをすべて削除する

  • 関数のいずれかのレイヤーにあるディレクトリと同じ名前のファイルの名前を変更する

Lambda: InvalidParameterValueException または RequestEntityTooLargeException

エラー: InvalidParameterValueException: 指定した環境変数が 4KB の制限を超えたため、Lambda は環境変数を設定できませんでした。測定された文字列: {"A1":"uSFeY5cyPiPn7AtnX5BsM...

エラー: RequestEntityTooLargeException: UpdateFunctionConfiguration オペレーションのリクエストは 5120 バイト未満である必要があります

関数の設定に保存される変数オブジェクトの最大サイズが 4096 バイトを超えないようにしてください。これには、キー名、値、引用符、カンマ、括弧が含まれます。HTTP リクエストボディの合計サイズも制限されます。

{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "my-bucket", "KEY": "file.txt" } }, ... }

この例で、オブジェクトは 39 文字です。これを文字列 {"BUCKET":"my-bucket","KEY":"file.txt"} として保存すると (空白を含まない)、39 バイトになります。環境変数の標準 ASCII 文字は、文字ごとに 1 バイトの値となります。拡張 ASCII 文字と Unicode 文字は、文字ごとに 2~4 バイトを使用する場合があります。

Lambda: InvalidParameterValueException

エラー: InvalidParameterValueException: 指定した環境変数に、現在変更がサポートされていない予約キーが含まれているため、Lambda は環境変数を設定できませんでした。

Lambda は、内部使用のためにいくつかの環境変数キーを予約します。たとえば、AWS_REGION は現在のリージョンを確認するためにランタイムによって使用される変数で、オーバーライドすることはできません。PATH などの他の変数は、ランタイムによって使用されますが、関数設定で拡張できます。詳細なリストについては、「定義されたランタイム環境変数」を参照してください

Lambda: 同時実行とメモリのクォータ

エラー: 関数 ConcurrentExecutions に指定することで、アカウントの が最小値 UnreservedConcurrentExecution を下回る

エラー: MemorySize'' 値は制約を満たすことができませんでした: メンバーの値は 3008 以下である必要があります

これらのエラーは、アカウントの同時実行数またはメモリのクォータを超えると発生します。新しい AWS アカウントでは、同時実行とメモリのクォータが少なくなっています。同時実行に関連するエラーを解決するには、クォータの引き上げをリクエストできます。メモリクォータの引き上げはリクエストできません。

  • 同時実行数: 予約済みまたはプロビジョニングされた同時実行数を使用して関数を作成、あるいは関数ごとの同時実行の要求 (PutFunctionConcurrency) がアカウントの同時実行クォータを超えた場合、エラーが発生します。

  • メモリ: 関数に割り当てられたメモリの量がアカウントのメモリクォータを超えた場合、エラーが発生します。