カスタムランタイムを使用した Lambda 関数の構築 - AWS Serverless Application Model

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

カスタムランタイムを使用した Lambda 関数の構築

sam build コマンドを使用して、Lambda 関数に必要なカスタムランタイムを構築できます。Lambda 関数に Runtime: provided を指定することによって、その関数がカスタムランタイムを使用するように宣言します。

カスタムランタイムを構築するには、BuildMethod: makefile エントリを使用して Metadata リソース属性を宣言します。ユーザーは、ランタイムの build コマンドが含まれた build-function-logical-id フォームのビルドターゲットを宣言するカスタム makefile を提供します。Makefile は、必要に応じてカスタムランタイムをコンパイルして、ワークフローにおける後続のステップに必要となる適切な場所にビルドアーティファクトをコピーする責任を担います。Makefile の場所は、関数リソースの CodeUri プロパティによって指定され、Makefile と命名される必要があります。

例 1: Rust で記述された関数用のカスタムランタイム

注記

Cargo Lambda を使用して Lambda 関数を構築することをお勧めします。詳細については、「Cargo Lambda を使用した Rust Lambda 関数の構築」を参照してください。

次の AWS SAM テンプレートは、Rust で記述された Lambda 関数にカスタムランタイムを使用する関数を宣言し、build-HelloRustFunctionビルドターゲットのコマンドを実行するsam buildように に指示します。

Resources: HelloRustFunction: Type: AWS::Serverless::Function Properties: FunctionName: HelloRust Handler: bootstrap.is.real.handler Runtime: provided MemorySize: 512 CodeUri: . Metadata: BuildMethod: makefile

以下の makefile には、ビルドターゲットと実行されるコマンドが含まれています。CodeUri プロパティが . に設定されていることから、makefile がプロジェクトのルートディレクトリ (つまり、アプリケーションの AWS SAM テンプレートファイルと同じディレクトリ) に置かれている必要があることに注意してください。ファイル名は Makefile にする必要があります。

build-HelloRustFunction: cargo build --release --target x86_64-unknown-linux-musl cp ./target/x86_64-unknown-linux-musl/release/bootstrap $(ARTIFACTS_DIR)

上記の makefilecargo build コマンドを実行するための開発環境のセットアップに関する詳細については、「Rust Runtime for AWS Lambda」ブログ記事を参照してください。

例 2: Makefile Builder for Python3.12 (バンドルされたビルダーを使用する代わりに)

バンドルされたビルダーに含まれていないライブラリやモジュールを使用したい場合があります。この例は、makefile ビルダーを使用した Python3.12 ランタイムの AWS SAM テンプレートを示しています。

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.12 Metadata: BuildMethod: makefile

以下の makefile には、ビルドターゲットと実行されるコマンドが含まれています。CodeUri プロパティが hello_world に設定されているため、makefile は hello_world サブディレクトリのルートに置き、ファイル名を Makefile にする必要があることに注意してください。

build-HelloWorldFunction: cp *.py $(ARTIFACTS_DIR) cp requirements.txt $(ARTIFACTS_DIR) python -m pip install -r requirements.txt -t $(ARTIFACTS_DIR) rm -rf $(ARTIFACTS_DIR)/bin