レイヤーの作成 - AWS Serverless Application Model

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

レイヤーの作成

AWS SAM を使用して、カスタム Layer を構築できます。レイヤーの詳細については、」AWS Lambda レイヤー()AWS Lambda 開発者ガイド

カスタム Layer を構築するには、AWS Serverless Application Model (AWS SAM) テンプレートファイルを作成し、Metadataリソース属性セクションをBuildMethodエントリ。次の有効な値BuildMethodの識別子です。AWS Lambda ランタイム, またはmakefile

指定するとmakefile、カスタムmakefileを提供し、フォームのビルドターゲットを宣言しますbuild-layer-logical-idには、レイヤーのビルドコマンドが含まれています。メイクファイルは、必要に応じてレイヤーをコンパイルし、ワークフローの以降のステップに必要な適切な場所にビルド成果物をコピーする責任があります。メイクファイルの場所は、ContentUriプロパティに名前を付けて、Makefile

注記

カスタム Layer を作成する場合、AWS Lambda は環境変数に依存して Layer コードを見つけます。Lambda ランタイムには、/optディレクトリに移動します。このディレクトリには、レイヤーコードがコピーされます。カスタムレイヤーコードが見つかるように、プロジェクトのビルドアーティファクトフォルダ構造が、ランタイムの予想されるフォルダ構造と一致している必要があります。

たとえば、Pythonの場合、コードをpython/サブディレクトリ。NodeJS の場合、コードをnodejs/node_modules/サブディレクトリ。

詳細については、「」を参照してください。ライブラリの依存関係をレイヤーに含める()AWS Lambda 開発者ガイド

次に例を示します。Metadataリソース属性セクション

Metadata: BuildMethod: python3.6
注記

含まれないと、Metadataリソース属性セクションで、AWS SAM は Layer を構築しません。代わりに、ビルド成果物をコピーし、CodeUriプロパティに、レイヤーリソースのプロパティがあります。詳細については、『』を参照してください。ContentUriプロパティのAWS::Serverless::LayerVersionリソースタイプ。

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

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

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

Examples

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

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

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: カスタムメイクファイルを使用してレイヤーを構築する

以下の 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 が Layer コードを見つけられるようにします。

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