翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
での Lambda レイヤーの構築 AWS SAM
を使用して AWS SAM カスタム Lambda レイヤーを構築できます。Lambda レイヤーを使用すると、Lambda 関数からコードを抽出し、複数の Lambda 関数で再利用できます。(アプリケーション全体を構築するのではなく) Lambda レイヤーのみを構築すると、いくつかの点で利点があります。これにより、デプロイパッケージのサイズを縮小し、コア関数ロジックを依存関係から分離し、複数の関数間で依存関係を共有できます。レイヤーの詳細については、AWS Lambda デベロッパーガイドの「AWS Lambda レイヤー」参照してください。
で Lambda レイヤーを構築する方法 AWS SAM
注記
Lambda レイヤーを構築する前に、まず AWS SAM テンプレートに Lambda レイヤーを記述する必要があります。これを行う方法についての詳細と例については、「AWS SAM で Lambda レイヤーを使用して効率を向上させる」を参照してください。
カスタムレイヤーを構築するには、それを AWS Serverless Application Model (AWS SAM) テンプレートファイルに宣言し、Metadataリソース属性セクションをBuildMethodエントリに含めます。BuildMethod に有効な値は、AWS Lambda ランタイムの識別子、または makefile です。BuildArchitecture エントリを含めて、レイヤーがサポートする命令セットアーキテクチャを指定します。BuildArchitecture の有効値は、Lambda 命令セットアーキテクチャです。
makefile を指定する場合は、レイヤーの build コマンドが含まれた build- フォームのビルドターゲットを宣言するカスタム makefile を提供します。Makefile は、必要に応じてレイヤーをコンパイルして、ワークフローにおける後続のステップに必要となる適切な場所にビルドアーティファクトをコピーする責任を担います。Makefile の場所は、レイヤーリソースの layer-logical-idContentUri プロパティによって指定され、Makefile と命名される必要があります。
注記
カスタムレイヤーを作成すると、 は環境変数 AWS Lambda に応じてレイヤーコードを見つけます。Lambda ランタイムは、レイヤーコードがコピーされた /opt ディレクトリにパスを含めます。カスタムレイヤーコードを見つけられるようにするため、プロジェクトのビルドアーティファクトのフォルダ構造が、ランタイムが期待するフォルダ構造と一致している必要があります。
例えば、Python ではコードを python/ サブディレクトリに置くことができます。NodeJS では、コードを nodejs/node_modules/ サブディレクトリに置くことができます。
詳細については、AWS Lambda デベロッパーガイドの「ライブラリの依存関係をレイヤーに含める」を参照してください。
以下は、Metadata リソース属性セクションの例です。
Metadata: BuildMethod: python3.12 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.12 ランタイム環境に対してレイヤーを構築する
次のサンプル AWS SAM テンプレートは、Python 3.12 ランタイム環境に対してレイヤーを構築します。
Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.12 Metadata: BuildMethod: python3.12 # 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.12 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"
注記
makefile が呼び出されると、適切なターゲットがトリガーされ、アーティファクトが公開された環境変数 $ARTIFACTS_DIR にコピーされます。詳細については、GitHub で「aws-lambda-builders
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