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

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

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

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

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

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

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

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

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

アプリケーションにレイヤーを含めるには、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 イメージにレイヤーをオーバーレイします。は、ビルドするイメージの名前と、キャッシュに保持 LayerVersions されている AWS SAMCLIを生成します。スキーマの詳細は、後続のセクションで説明されています。

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

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

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

テンプレートで定義されている を指定すると、 LayerVersionArn は ARN から LayerName および バージョンを AWS SAMCLI抽出します。レイヤーコンテンツを配置するための 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