

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 .zip 封存檔部署 Rust Lambda 函數
<a name="rust-package"></a>

此頁面說明如何編譯 Rust 函數，然後使用 AWS Lambda [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html) 將編譯的二進位檔部署至 。它還顯示如何使用 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 命令列工具的第三方開放原始碼延伸模組，可簡化 Rust Lambda 函數的建置和部署。

1. 安裝 [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html)，這是 Cargo 命令列工具的第三方開放原始碼延伸，可簡化 Rust Lambda 函數的建置和部署：

   ```
   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 CPUs 的程式碼。

   ```
   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
```

### 使用 部署 Rust 函數二進位檔 AWS CLI
<a name="rust-deploy-aws-cli"></a>

您也可以使用 部署二進位檔 AWS CLI。

1. 使用 [build](https://www.cargo-lambda.info/commands/build.html) 子命令，建置 .zip 部署套件。

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

1. 若要部署 .zip 套件至 Lambda，請執行 [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) 命令。
   + 對於 `--runtime`，請指定 `provided.al2023`。這是[僅限作業系統的執行時期](runtimes-provided.md)。僅限作業系統的執行時期用於將編譯的二進位檔和自訂執行時期部署至 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
   ```

### 使用 CLI 部署 Rust AWS SAM 函數二進位檔
<a name="rust-deploy-sam-cli"></a>

您也可以使用 AWS SAM CLI 部署二進位檔。

1. 使用資源和屬性定義建立 AWS SAM 範本。對於 `Runtime`，請指定 `provided.al2023`。這是[僅限作業系統的執行時期](runtimes-provided.md)。僅限作業系統的執行時期用於將編譯的二進位檔和自訂執行時期部署至 Lambda。

   如需使用 部署 Lambda 函數的詳細資訊 AWS SAM，請參閱《 *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
   ```

如需使用 CLI 建置 Rust AWS SAM 函數的詳細資訊，請參閱《 *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
```

### 使用 叫用 Rust 函數 AWS CLI
<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
```

如果您使用的是第 2 AWS CLI 版，則需要 **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)。