AWS SAM で Lambda レイヤーを使用して効率を向上させる - AWS Serverless Application Model

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

AWS SAM で Lambda レイヤーを使用して効率を向上させる

AWS SAM を使用すると、サーバーレスアプリケーションにレイヤーを含めることができます。AWS Lambda レイヤーは Lambda 関数から Lambda レイヤーへのコードの抽出を可能にし、そのコードは複数の Lambda 関数で使用できます。これにより、デプロイパッケージのサイズを縮小し、コア関数ロジックを依存関係から分離し、複数の関数間で依存関係を共有できます。レイヤーの詳細情報については、「AWS Lambda デベロッパーガイド」の「Lambda レイヤー」を参照してください。

このトピックでは、以下に関する情報を提供します。

  • アプリケーションへのレイヤーの包含

  • レイヤーがローカルにキャッシュされる方法

カスタムレイヤーの構築については、「AWS SAM での Lambda レイヤーの構築」を参照してください。

アプリケーションへのレイヤーの包含

アプリケーションにレイヤーを含めるには、AWS::Serverless::Function リソースタイプの Layers プロパティを使用します。

以下は、レイヤーが含まれる Lambda 関数を使用した AWS SAM テンプレートの例です。

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

レイヤーがローカルにキャッシュされる方法

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

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

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

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

オーバーレイされたレイヤーを調査するには、以下のコマンドを実行して、調査したいイメージで 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