レイヤーの構築 - AWS Serverless Application Model

レイヤーの構築

カスタムレイヤーの構築には AWS SAM を使用できます。レイヤーの詳細については、AWS Lambda デベロッパーガイドの「AWS Lambda レイヤー」参照してください。

カスタムレイヤーを構築するには、それを AWS Serverless Application Model (AWS SAM) テンプレートファイルで宣言し、BuildMethod エントリがある Metadata リソース属性セクションを含めます。BuildMethod に有効な値は、AWS Lambda ランタイムの識別子、または makefile です。BuildArchitecture エントリを含めて、レイヤーがサポートする命令セットアーキテクチャを指定します。BuildArchitecture の有効値は、Lambda 命令セットアーキテクチャです。

makefile を指定する場合は、レイヤーの build コマンドが含まれた build-layer-logical-id フォームのビルドターゲットを宣言するカスタム makefile を提供します。Makefile は、必要に応じてレイヤーをコンパイルして、ワークフローにおける後続のステップに必要となる適切な場所にビルドアーティファクトをコピーする責任を担います。Makefile の場所は、レイヤーリソースの ContentUri プロパティによって指定され、Makefile と命名される必要があります。

注記

カスタムレイヤーを作成するときは、AWS Lambda が環境変数に頼ってレイヤーコードを見つけます。Lambda ランタイムは、レイヤーコードがコピーされた /opt ディレクトリにパスを含めます。カスタムレイヤーコードを見つけられるようにするため、プロジェクトのビルドアーティファクトのフォルダ構造が、ランタイムが期待するフォルダ構造と一致している必要があります。

例えば、Python ではコードを python/ サブディレクトリに置くことができます。NodeJS では、コードを nodejs/node_modules/ サブディレクトリに置くことができます。

詳細については、AWS Lambda デベロッパーガイドの「ライブラリの依存関係をレイヤーに含める」を参照してください。

以下は、Metadata リソース属性セクションの例です。

Metadata: BuildMethod: python3.8 BuildArchitecture: arm64
注記

Metadata リソース属性セクションを含めない場合、AWS SAM はレイヤーを構築しません。その代わりに、レイヤーリソースの CodeUri プロパティで指定された場所からビルドアーティファクトをコピーします。詳細については、AWS::Serverless::LayerVersion リソースタイプの「ContentUri」プロパティを参照してください。

Metadata リソース属性セクションを含めると、sam build コマンドを使用して、レイヤーを独立したオブジェクト、または AWS Lambda 関数の依存関係として構築することができます。

  • 独立したオブジェクトとして。レイヤーに対するコード変更をローカルでテストしており、アプリケーション全体を構築する必要がないときなど、レイヤーオブジェクトだけを構築したい場合があります。レイヤーを個別に構築するには、sam build layer-logical-id コマンドでレイヤーリソースを指定します。

  • Lambda 関数の依存関係としてのレイヤー。同じ AWS SAM テンプレートファイルにある Lambda 関数の Layers プロパティにレイヤーの論理 ID を含めると、レイヤーはその Lambda 関数の依存関係になります。そのレイヤーに BuildMethod エントリがある Metadata リソース属性セクションも含める場合は、sam build コマンドを使用してアプリケーション全体を構築する、または sam build function-logical-id コマンドで関数リソースを指定することによってレイヤーを構築します。

Examples

テンプレート例 1: Python 3.6 ランタイム環境に対してレイヤーを構築する

以下の AWS SAM テンプレート例は、Python 3.6 ランタイム環境に対してレイヤーを構築します。

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.6 Metadata: BuildMethod: python3.6 # Required to have AWS SAM build this layer

テンプレート例 2: カスタム makefile を使用してレイヤーを構築する

以下の AWS SAM テンプレート例は、カスタム makefile を使用してレイヤーを構築します。

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 Metadata: BuildMethod: makefile

以下の makefile には、ビルドターゲットと実行されるコマンドが含まれています。ContentUri プロパティが my_layer に設定されているため、makefile は my_layer サブディレクトリのルートに置き、ファイル名を Makefile にする必要があることに注意してください。また、AWS Lambda がレイヤーコードを見つけられるように、ビルドアーティファクトが python/ サブディレクトリにコピーされることにも注意してください。

build-MyLayer: mkdir -p "$(ARTIFACTS_DIR)/python" cp *.py "$(ARTIFACTS_DIR)/python" python -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"

sam build コマンドの例

以下の sam build コマンドは、Metadata リソース属性セクションが含まれたレイヤーを構築します。

# Build the 'layer-logical-id' resource independently sam build layer-logical-id # Build the 'function-logical-id' resource and layers that this function depends on sam build function-logical-id # Build the entire application, including the layers that any function depends on sam build