翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
レイヤーの構築
カスタムレイヤーの構築には AWS SAM を使用できます。レイヤーの詳細については、AWS Lambda デベロッパーガイドの「AWS Lambda レイヤー」参照してください。
カスタムレイヤーを構築するには、それを AWS Serverless Application Model (AWS SAM) テンプレートファイルで宣言し、BuildMethod
エントリがある Metadata
リソース属性セクションを含めます。BuildMethod
に有効な値は、AWS Lambda ランタイムの識別子、または makefile
です。BuildArchitecture
エントリを含めて、レイヤーがサポートする命令セットアーキテクチャを指定します。BuildArchitecture
の有効値は、Lambda 命令セットアーキテクチャです。
makefile
を指定する場合は、レイヤーの build コマンドが含まれた build-
フォームのビルドターゲットを宣言するカスタム makefile を提供します。Makefile は、必要に応じてレイヤーをコンパイルして、ワークフローにおける後続のステップに必要となる適切な場所にビルドアーティファクトをコピーする責任を担います。Makefile の場所は、レイヤーリソースの layer-logical-id
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
例
テンプレート例 1: Python 3.9 ランタイム環境に対してレイヤーを構築する
以下の AWS SAM テンプレート例では、Python 3.9 ランタイム環境に対してレイヤーを構築します。
Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.9 Metadata: BuildMethod: python3.9 # 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
# Build the 'function-logical-id' resource and layers that this function depends onlayer-logical-id
$
sam build
# Build the entire application, including the layers that any function depends onfunction-logical-id
$
sam build