

# Lambda におけるデプロイメントに関する問題のトラブルシューティング
<a name="troubleshooting-deployment"></a>

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

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

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

トラブルシューティングに関するアドバイス、およびサポートへの一般的な質問に対する回答については、[AWS ナレッジセンター](https://aws.amazon.com/premiumsupport/knowledge-center/#AWS_Lambda)にアクセスしてください。

Lambda アプリケーションのデバッグとトラブルシューティングの詳細については、Serverless Land の「[デバッグ](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/debugging-ops)」を参照してください。

**Topics**
+ [一般: アクセス権限が拒否されました/該当のファイルをロードできません](#troubleshooting-deployment-denied)
+ [一般: UpdateFunctionCode を呼び出すときにエラーが発生しました](#troubleshooting-deployment-updatefunctioncode)
+ [Amazon S3: エラーコード PermanentRedirect。](#troubleshooting-deployment-PermanentRedirect)
+ [一般: 見つかりません、ロードできません、インポートできません、クラスが見つかりません、該当のファイルまたはディレクトリがありません](#troubleshooting-deployment-functionHandler1)
+ [一般: 未定義のメソッドハンドラー](#troubleshooting-deployment-functionHandler2)
+ [一般: Lambda コードストレージの制限を超えました](#troubleshooting-deployment-CodeStorageExceeded)
+ [Lambda: レイヤー変換が失敗しました](#troubleshooting-deployment-LayerConversionFailed)
+ [Lambda: InvalidParameterValueException または RequestEntityTooLargeException](#troubleshooting-deployment-InvalidParameterValueException1)
+ [Lambda: InvalidParameterValueException](#troubleshooting-deployment-InvalidParameterValueException2)
+ [Lambda: 同時実行とメモリのクォータ](#troubleshooting-deployment-quotas)
+ [Lambda: プロビジョニングされた同時実行に対する無効なエイリアス設定](#troubleshooting-deployment-provisioned-concurrency)

## 一般: アクセス権限が拒否されました/該当のファイルをロードできません
<a name="troubleshooting-deployment-denied"></a>

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

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

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

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

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

```
chmod 644 <filepath>
```

Windows でファイルアクセス許可を変更するには、「Microsoft Windows ドキュメント」の「[Set, View, Change, or Remove Permissions on an Object](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc731667(v=ws.10))」を参照してください。

**注記**  
デプロイパッケージのディレクトリにアクセスするために必要なアクセス許可を Lambda に付与しない場合、Lambda はそれらのディレクトリのアクセス許可を 755 (rwxr-xr-x) に設定します。

## 一般: UpdateFunctionCode を呼び出すときにエラーが発生しました
<a name="troubleshooting-deployment-updatefunctioncode"></a>

**エラー:** UpdateFunctionCode オペレーションを呼び出すときにエラーが発生しました (RequestEntityTooLargeException)

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

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

## Amazon S3: エラーコード PermanentRedirect。
<a name="troubleshooting-deployment-PermanentRedirect"></a>

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

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

## 一般: 見つかりません、ロードできません、インポートできません、クラスが見つかりません、該当のファイルまたはディレクトリがありません
<a name="troubleshooting-deployment-functionHandler1"></a>

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

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

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

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

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

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

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

## 一般: 未定義のメソッドハンドラー
<a name="troubleshooting-deployment-functionHandler2"></a>

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

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

**エラー:** *\$1<LambdaHandler:0x000055b76ccebf98> の未定義のメソッド 'handler'*

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

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

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

一部の言語の場合、Lambda は、ハンドラーメソッドに特定の名前があることを期待するインターフェイスを持つライブラリを提供します。言語別のハンドラーの命名の詳細については、以下のトピックを参照してください。
+ [Node.js による Lambda 関数の構築](lambda-nodejs.md)
+ [Python による Lambda 関数の構築](lambda-python.md)
+ [Ruby による Lambda 関数の構築](lambda-ruby.md)
+ [Java による Lambda 関数の構築](lambda-java.md)
+ [Go による Lambda 関数の構築](lambda-golang.md)
+ [C\$1 による Lambda 関数の構築](lambda-csharp.md)
+ [PowerShell による Lambda 関数の構築](lambda-powershell.md)

## 一般: Lambda コードストレージの制限を超えました
<a name="troubleshooting-deployment-CodeStorageExceeded"></a>

**エラー:** *コードストレージの制限を超えました。*

Lambda は、アカウント専用の内部 S3 バケットに関数コードを保存します。各 AWS アカウントには、各リージョンに 75 GB のストレージが割り当てられます。コードストレージには、Lambda の関数とレイヤーの両方で使用されるストレージの合計が含まれます。クォータに達すると、新しい関数をデプロイしようとしたときに *CodeStorageExceededException* を受け取ります。

関数の古いバージョンのクリーンアップ、未使用のコードの削除、Lambda レイヤーの使用により、利用可能なストレージ領域を管理します。さらに、ストレージクォータの管理を実現するため、[個別のワークロードに個別の AWS アカウントを使用する](concepts-application-design.md#multiple-accounts)ことをお勧めします。

**[ダッシュボード]** サブメニューで、Lambda コンソールのストレージの合計使用量を確認できます。

![\[モニタリングとオブザーバビリティの図 26\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/monitoring-observability-figure-26.png)




## Lambda: レイヤー変換が失敗しました
<a name="troubleshooting-deployment-LayerConversionFailed"></a>

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

Lambda 関数をレイヤーで設定すると、Lambda はそのレイヤーを関数コードでマージします。このプロセスが完了しない場合は、Lambda はこのエラーを返します。このエラーが発生した場合は、次の手順を実行します。
+ レイヤーから未使用のファイルをすべて削除する
+ レイヤー内のシンボリックリンクをすべて削除する
+ 関数のいずれかのレイヤーにあるディレクトリと同じ名前のファイルの名前を変更する

## Lambda: InvalidParameterValueException または RequestEntityTooLargeException
<a name="troubleshooting-deployment-InvalidParameterValueException1"></a>

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

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

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

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

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

## Lambda: InvalidParameterValueException
<a name="troubleshooting-deployment-InvalidParameterValueException2"></a>

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

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

## Lambda: 同時実行とメモリのクォータ
<a name="troubleshooting-deployment-quotas"></a>

**エラー:** 関数に指定された ConcurrentExecutions は、アカウントの UnreservedConcurrentExecution を最小値未満に減らします

**エラー:** 「メモリサイズ」 値は制約を満たすことに失敗しました: メンバーは 3008 以下の値を持つ必要があります

これらのエラーは、アカウントの同時実行数またはメモリの[クォータ](gettingstarted-limits.md)を超えると発生します。新しい AWS アカウントでは、同時実行とメモリのクォータが少なくなっています。同時実行に関連するエラーを解決するには、[クォータの引き上げをリクエスト](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)できます。メモリクォータの引き上げはリクエストできません。
+ **同時実行数:** 予約済みまたはプロビジョニングされた同時実行数を使用して関数を作成、あるいは関数ごとの同時実行の要求 ([PutFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionConcurrency.html)) がアカウントの同時実行クォータを超えた場合、エラーが発生します。
+ **メモリ:** 関数に割り当てられたメモリの量がアカウントのメモリクォータを超えた場合、エラーが発生します。

## Lambda: プロビジョニングされた同時実行に対する無効なエイリアス設定
<a name="troubleshooting-deployment-provisioned-concurrency"></a>

**エラー:*** プロビジョニングされた同時実行に対する無効なエイリアス設定*

このエラーは、プロビジョニングされた同時実行を伴うエイリアスが問題のあるバージョンをポイントしているときに Lambda 関数のコードまたは設定の更新を試みると発生します。Lambda はプロビジョニングされた同時実行の実行環境を事前に初期化しますが、コードエラー、リソース制約、または対象のスタックやエイリアスが原因でこれらの環境を適切に初期化できない場合は、デプロイが失敗します。この問題が発生した場合は、次の手順を実行します。

1. **エイリアスをロールバックする:** これまで機能していたバージョンをポイントするように、エイリアスを一時的に更新します。

   ```
    aws lambda update-alias \
     --function-name <function-name> \
     --name <alias-name> \
     --function-version <known-good-version>
   ```

1. **Lambda 初期化コードを修正する:** ハンドラー外で実行される初期化コードに未検出の例外がないことを確認し、クライアントと接続を初期化します。

1. **安全に再デプロイする:** 修正されたコードをデプロイし、新しいバージョンを発行します。次に、修正されたバージョンをポイントするようにエイリアスを更新します。必要な場合は、オプションで[プロビジョニングされた同時実行](provisioned-concurrency.md)を再度有効にします。

AWS CloudFormation を使用する場合は、エイリアスが機能しているバージョンをポイントするように、スタック定義 `FunctionVersion:!GetAtt version.Version` を更新します。

```
alias:
 Type: AWS::Lambda::Alias
 Properties:
 FunctionName: !Ref function
FunctionVersion: !GetAtt version.Version
 Name: BLUE
 ProvisionedConcurrencyConfig:
 ProvisionedConcurrentExecutions: 1
```