

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# で Lambda レイヤーを使用して効率を向上させる AWS SAM
<a name="serverless-sam-cli-layers"></a>

を使用すると AWS SAM、サーバーレスアプリケーションにレイヤーを含めることができます。 AWS Lambda レイヤーを使用すると、Lambda 関数から Lambda レイヤーにコードを抽出し、複数の Lambda 関数で使用できます。これにより、デプロイパッケージのサイズを縮小し、コア関数ロジックを依存関係から分離し、複数の関数間で依存関係を共有できます。レイヤーの詳細情報については、「AWS Lambda デベロッパーガイド」の「[Lambda レイヤー](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)」を参照してください。

このトピックでは、以下に関する情報を提供します。
+ アプリケーションへのレイヤーの包含
+ レイヤーがローカルにキャッシュされる方法

カスタムレイヤーの構築については、「[での Lambda レイヤーの構築 AWS SAM](building-layers.md)」を参照してください。

## アプリケーションへのレイヤーの包含
<a name="including-layers"></a>

アプリケーションにレイヤーを含めるには、[AWS::Serverless::Function](sam-resource-function.md) リソースタイプの `Layers` プロパティを使用します。

レイヤーを含む Lambda 関数を使用した AWS SAM テンプレートの例を次に示します。

```
ServerlessFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: .
    Handler: my_handler
    Runtime: Python3.7
    Layers:
        - <LayerVersion ARN>
```

## レイヤーがローカルにキャッシュされる方法
<a name="local-testing-with-layers"></a>

`sam local` コマンドの 1 つを使用して関数を呼び出すと、関数のレイヤーパッケージがダウンロードされ、ローカルホストにキャッシュされます。

以下の表は、異なるオペレーティングシステムのデフォルトのキャッシュディレクトリの場所を示しています。


****  

| OS | ロケーション | 
| --- | --- | 
| Windows 7 | C:\$1Users\$1<user>\$1AppData\$1Roaming\$1AWS SAM | 
| Windows 8 | C:\$1Users\$1<user>\$1AppData\$1Roaming\$1AWS SAM | 
| Windows 10 | C:\$1Users\$1<user>\$1AppData\$1Roaming\$1AWS SAM | 
| macOS | \$1/.aws-sam/layers-pkg | 
| Unix | \$1/.aws-sam/layers-pkg | 

パッケージがキャッシュされると、 AWS SAM CLI が、関数の呼び出しに使用される Docker イメージにレイヤーをオーバーレイします。は、ビルドするイメージの名前と、キャッシュに保持されている LayerVersions AWS SAM CLIを生成します。スキーマの詳細は、後続のセクションで説明されています。

オーバーレイされたレイヤーを調査するには、以下のコマンドを実行して、調査したいイメージで bash セッションを開始します。

```
docker run -it --entrypoint=/bin/bash samcli/lambda:<Tag following the schema outlined in Docker Image Tag Schema> -i
```

**レイヤーキャッシュディレクトリ名のスキーマ**

テンプレートで定義されている LayerVersionArn を提供すると、 AWS SAM CLI が ARN から LayerName と Version を抽出し、レイヤーコンテンツを配置するための `LayerName-Version-<first 10 characters of sha256 of ARN>` という名前のディレクトリを作成します。

例:

```
ARN = arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1
Directory name = myLayer-1-926eeb5ff1
```

**Docker イメージのタグスキーマ**

一意のレイヤーのハッシュを計算するには、「-」の区切り記号を使用してすべての一意のレイヤー名を結合し、SHA256 ハッシュを指定してから、最初の 10 文字を指定します。

例:

```
ServerlessFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: .
    Handler: my_handler
    Runtime: Python3.7
    Layers:
        - arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1
        - arn:aws:lambda:us-west-2:111111111111:layer:mySecondLayer:1
```

一意の名前は、レイヤーキャッシュディレクトリ名のスキーマと同じ方法で計算されます。

```
arn:aws:lambda:us-west-2:111111111111:layer:myLayer:1 = myLayer-1-926eeb5ff1
arn:aws:lambda:us-west-2:111111111111:layer:mySecondLayer:1 = mySecondLayer-1-6bc1022bdf
```

一意のレイヤーのハッシュを計算するには、「-」の区切り記号を使用してすべての一意のレイヤー名を結合し、SHA256 ハッシュを指定してから、最初の 25 文字を指定します。

```
myLayer-1-926eeb5ff1-mySecondLayer-1-6bc1022bdf = 2dd7ac5ffb30d515926aef
```

次に、この値と関数のランタイムおよびアーキテクチャを区切り記号「-」で結合します。

```
python3.7-x86_64-2dd7ac5ffb30d515926aefffd
```