

# レイヤーコンテンツのパッケージング
<a name="packaging-layers"></a>

Lambda レイヤーは、補助的なコードやデータを含む .zip ファイルアーカイブです。レイヤーには通常、ライブラリの依存関係、[カスタムランタイム](runtimes-custom.md)、または設定ファイルが含まれています。

このセクションでは、レイヤーコンテンツを適切にパッケージングする方法について説明します。レイヤーの概念的な情報とその使用を検討する理由の詳細については、[レイヤーによる Lambda 依存関係の管理](chapter-layers.md) を参照してください。

レイヤーを作成する最初のステップは、すべてのレイヤーコンテンツを .zip ファイルアーカイブにバンドルすることです。Lambda 関数は [Amazon Linux](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html) 上で実行されるため、レイヤーコンテンツは Linux 環境でコンパイルおよびビルドできる必要があります。

Linux 環境でレイヤーコンテンツを正しく動作させるためには、[Docker](https://docs.docker.com/get-docker) などのツールを使用してレイヤーコンテンツを作成することをお勧めします。

**Topics**
+ [各 Lambda ランタイムのレイヤーパス](#packaging-layers-paths)

## 各 Lambda ランタイムのレイヤーパス
<a name="packaging-layers-paths"></a>

関数にレイヤーを追加すると、Lambda はレイヤーのコンテンツをその実行環境の `/opt` ディレクトリに読み込みます。Lambda ランタイムごとに、`PATH` 変数には `/opt` ディレクトリ内の特定のフォルダパスがあらかじめ含まれます。Lambda がレイヤーコンテンツを確実に取得できるようにするには、レイヤーの .zip ファイルの依存関係が次のフォルダパスにある必要があります。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/packaging-layers.html)

次の例は、レイヤーの .zip アーカイブでフォルダを設定する方法を示しています。

------
#### [ Node.js ]

**Example Node.js 用の AWS X-Ray SDK のファイル構造**  

```
xray-sdk.zip
└ nodejs/node_modules/aws-xray-sdk
```

------
#### [ Python ]

**Example**  

```
python/              # Required top-level directory
└── requests/
└── boto3/
└── numpy/
└── (dependencies of the other packages)
```

------
#### [ Ruby ]

**Example JSON gem のファイル構造**  

```
json.zip
└ ruby/gems/3.4.0/
               | build_info
               | cache
               | doc
               | extensions
               | gems
               | └ json-2.1.0
               └ specifications
                 └ json-2.1.0.gemspec
```

------
#### [ Java ]

**Example Jackson JAR ファイルのファイル構造**  

```
layer_content.zip
└ java
    └ lib
        └ jackson-core-2.17.0.jar
        └ <other potential dependencies>
        └ ...
```

------
#### [ All ]

**Example JQ ライブラリのファイル構造**  

```
jq.zip
└ bin/jq
```

------

レイヤーのパッケージ化、作成、追加に関する言語固有の手順については、次のページを参照してください。
+ **Node.js** – [Node.js Lambda 関数のレイヤーを操作する](nodejs-layers.md)
+ **Python** – [Python Lambda 関数にレイヤーを使用する](python-layers.md)
+ **Ruby** – [Ruby Lambda 関数のレイヤーを操作する](ruby-layers.md)
+ **Java** – [Java Lambda 関数のレイヤーを操作する](java-layers.md)

Go および Rust で書かれた Lambda 関数の依存関係を管理するためにレイヤーを使用することはお勧め**しません**。これは、これらの言語で書かれた Lambda 関数が単一の実行可能ファイルにコンパイルされて、関数をデプロイしたときにそのファイルが Lambda に渡されるためです。この実行可能ファイルには、コンパイルされた関数コードがそのすべての依存関係と共に含まれています。レイヤーを使用すると、このプロセスが複雑になります。そのうえ、他に必要なアセンブリがあれば、初期化フェーズ中にいちいちメモリにロードしなければならないため、コールドスタート時間が長くなります。

Go および Rust Lambda 関数で外部依存関係を使用するには、その依存関係をデプロイパッケージに直接含めます。