

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

# でのカスタムランタイムを使用した Lambda 関数の構築 AWS SAM
<a name="building-custom-runtimes"></a>

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

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

## 例
<a name="building-custom-runtimes-examples"></a>

### 例 1: Rust で記述された関数用のカスタムランタイム
<a name="building-custom-runtimes-examples-rust"></a>

**注記**  
Cargo Lambda を使用して Lambda 関数を構築することをお勧めします。詳細については[Cargo Lambda で を使用して Rust Lambda 関数を構築する AWS SAM](building-rust.md)を参照してください。

次の 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)
```

上記の `makefile` で `cargo build` コマンドを実行するための開発環境のセットアップに関する詳細については、「[Rust Runtime for AWS Lambda](https://aws.amazon.com/blogs/opensource/rust-runtime-for-aws-lambda/)」ブログ記事を参照してください。

### 例 2: Python 3.12 用の makefile ビルダー (バンドルされたビルダーの代わりに使用)
<a name="building-custom-runtimes-examples-python"></a>

バンドルされたビルダーに含まれていないライブラリやモジュールを使用したい場合があります。この例では、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
```