

# .zip ファイルアーカイブを使用して Rust Lambda 関数をデプロイする
<a name="rust-package"></a>

このページでは、Rust 関数をコンパイルし、[Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html) を使用して コンパイルしたバイナリを AWS Lambda にデプロイする方法について説明します。また、AWS Command Line Interface と AWS Serverless Application Model CLI を使用してコンパイルしたバイナリをデプロイする方法も示します。

**Topics**
+ [前提条件](#rust-package-prerequisites)
+ [MacOS、Windows、Linux で Rust 関数をビルドする](#rust-package-build)
+ [Cargo Lambda による Rust 関数バイナリのデプロイ](#rust-deploy-cargo)
+ [Cargo Lambda を使用して Rust 関数を呼び出す](#rust-invoke-function)

## 前提条件
<a name="rust-package-prerequisites"></a>
+ [Rust](https://www.rust-lang.org/tools/install)
+ [AWS CLI バージョン 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)

## MacOS、Windows、Linux で Rust 関数をビルドする
<a name="rust-package-build"></a>

次の手順では、Rust を使用して最初の Lambda 関数のプロジェクトを作成し、[Cargo Lambda](https://www.cargo-lambda.info/) を使用してコンパイルする方法を示します。Cargo Lambda は、Rust Lambda 関数の構築とデプロイを簡素化する Cargo コマンドラインツールのサードパーティーのオープンソース拡張機能です。

1. Rust Lambda 関数の構築とデプロイを簡素化する Cargo コマンドラインツールのサードパーティーのオープンソース拡張である [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html) をインストールします。

   ```
   cargo install cargo-lambda
   ```

   その他のインストールオプションについては、Cargo Lambda ドキュメントの「[インストール](https://www.cargo-lambda.info/guide/installation.html)」を参照してください。

1. パッケージ構造を作成します。このコマンドは、`src/main.rs` に基本的な関数コードを作成します。このコードをテストに使用することも、独自のコードで置き換えることもできます。

   ```
   cargo lambda new my-function
   ```

1. パッケージのルートディレクトリ内で [build](https://www.cargo-lambda.info/commands/build.html) サブコマンドを実行して、関数内のコードをコンパイルします。

   ```
   cargo lambda build --release
   ```

   (オプション) Lambda でAWS Graviton2 を使用する場合は、`--arm64` フラグを追加して ARM CPU 用のコードをコンパイルします。

   ```
   cargo lambda build --release --arm64
   ```

1. Rust 関数をデプロイする前に、マシンに AWS 認証情報を設定します。

   ```
   aws configure
   ```

## Cargo Lambda による Rust 関数バイナリのデプロイ
<a name="rust-deploy-cargo"></a>

[deploy](https://www.cargo-lambda.info/commands/deploy.html) サブコマンドを使用して、コンパイルされたバイナリを Lambda にデプロイします。このコマンドは[実行ロール](lambda-intro-execution-role.md)を作成し、次に Lambda 関数を作成します。既存の実行ロールを指定するには、[--iam-role フラグを使用します](https://www.cargo-lambda.info/commands/deploy.html#iam-roles)。

```
cargo lambda deploy my-function
```

### AWS CLI を使用して Rust 関数バイナリをデプロイする
<a name="rust-deploy-aws-cli"></a>

AWS CLI を使用してバイナリをデプロイすることもできます。

1. .zip デプロイパッケージをビルドするには、[ビルド](https://www.cargo-lambda.info/commands/build.html)サブコマンドを使用します。

   ```
   cargo lambda build --release --output-format zip
   ```

1. .zip パッケージをデプロイするには、[create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) コマンドを実行します。
   + `--runtime` の場合、`provided.al2023` を指定します。これは [OS のみのランタイム](runtimes-provided.md)です。OS のみのランタイムは、コンパイルされたバイナリとカスタムランタイムを Lambda にデプロイするために使用されます。
   + `--role` には、[実行ロール](lambda-intro-execution-role.md)の ARN を指定します。

   ```
   aws lambda create-function \
        --function-name my-function \
        --runtime provided.al2023 \
        --role arn:aws:iam::111122223333:role/lambda-role \
        --handler rust.handler \
        --zip-file fileb://target/lambda/my-function/bootstrap.zip
   ```

### AWS SAM CLI による Rust 関数バイナリのデプロイ
<a name="rust-deploy-sam-cli"></a>

AWS SAM CLI を使用してバイナリをデプロイすることもできます。

1. リソースとプロパティの定義を含む AWS SAM テンプレートを作成します。`Runtime` の場合、`provided.al2023` を指定します。これは [OS のみのランタイム](runtimes-provided.md)です。OS のみのランタイムは、コンパイルされたバイナリとカスタムランタイムを Lambda にデプロイするために使用されます。

   AWS SAM を使用して Lambda 関数をデプロイする方法の詳細については、「*AWS Serverless Application Model 開発者ガイド*」の「[AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)」を参照してください。  
**Example Rust バイナリの SAM リソースとプロパティ定義**  

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   Description: SAM template for Rust binaries
   Resources:
     RustFunction:
       Type: AWS::Serverless::Function 
       Properties:
         CodeUri: target/lambda/my-function/
         Handler: rust.handler
         Runtime: provided.al2023
   Outputs:
     RustFunction:
       Description: "Lambda Function ARN"
       Value: !GetAtt RustFunction.Arn
   ```

1. [build](https://www.cargo-lambda.info/commands/build.html) サブコマンドを使用して関数をコンパイルします。

   ```
   cargo lambda build --release
   ```

1. [sam deploy](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html) コマンドを使用して、関数を Lambda にデプロイします。

   ```
   sam deploy --guided
   ```

AWS SAM CLI を使用した Rust 関数をビルドする方法の詳細については、「*AWS Serverless Application Model デベロッパーガイド*」の「[Cargo Lambda を使用した Rust Lambda 関数の構築](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/building-rust.html)」を参照してください。

## Cargo Lambda を使用して Rust 関数を呼び出す
<a name="rust-invoke-function"></a>

[invoke](https://www.cargo-lambda.info/commands/invoke.html) サブコマンドを使用して、ペイロードを用いて関数をテストします。

```
cargo lambda invoke --remote --data-ascii '{"command": "Hello world"}' my-function
```

### AWS CLI を使用して Rust 関数を呼び出すには
<a name="rust-invoke-cli"></a>

また、AWS CLI を使用して関数を呼び出すこともできます。

```
aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"command": "Hello world"}' /tmp/out.txt
```

AWS CLI バージョン 2 を使用している場合、**cli-binary-format** オプションは必須です。これをデフォルト設定にするには、`aws configure set cli-binary-format raw-in-base64-out` を実行します。詳細については、「*AWS Command Line Interface バージョン 2 用ユーザーガイド*」の「[AWS CLI でサポートされているグローバルコマンドラインオプション](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list)」を参照してください。