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

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

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-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 コマンドで関数リソースを指定することによってレイヤーを構築します。

テンプレート例 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 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