翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Lambda レイヤーの構築
を使用して AWS SAM カスタム Lambda レイヤーを構築できます。Lambda レイヤーを使用すると、Lambda 関数からコードを抽出し、複数の Lambda 関数で再利用できます。(アプリケーション全体を構築する代わりに) Lambda レイヤーのみを構築すると、いくつかの点でメリットが得られます。これにより、デプロイパッケージのサイズを縮小し、コア関数ロジックと依存関係を分離し、複数の関数間で依存関係を共有できます。レイヤーの詳細については、AWS Lambda デベロッパーガイドの「AWS Lambda レイヤー」参照してください。
で Lambda レイヤーを構築する方法 AWS SAM
注記
Lambda レイヤーを構築する前に、まず AWS SAM テンプレートに Lambda レイヤーを記述する必要があります。これを行う方法の詳細と例については、「」を参照してくださいで Lambda レイヤーを使用して効率を向上させる AWS SAM。
カスタムレイヤーを構築するには、 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
にする必要があることに注意してください。また、ビルドアーティファクトは python/
サブディレクトリにコピーされるため、 AWS Lambda はレイヤーコードを見つけることができます。
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