

# Implantar funções do Lambda em Rust com arquivos .zip
<a name="rust-package"></a>

Esta página descreve como compilar sua função do Rust e, em seguida, implantar o binário compilado no AWS Lambda usando o [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html). Ela também mostra como implantar o binário compilado com a AWS Command Line Interface e a CLI do AWS Serverless Application Model.

**Topics**
+ [Pré-requisitos](#rust-package-prerequisites)
+ [Criação de funções do Rust no macOS, Windows ou Linux](#rust-package-build)
+ [Implantação do binário da função do Rust com o Cargo Lambda](#rust-deploy-cargo)
+ [Invocação da sua função do Rust com o Cargo Lambda](#rust-invoke-function)

## Pré-requisitos
<a name="rust-package-prerequisites"></a>
+ [Rust](https://www.rust-lang.org/tools/install)
+ [AWS CLI versão 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)

## Criação de funções do Rust no macOS, Windows ou Linux
<a name="rust-package-build"></a>

As etapas a seguir demonstram como criar o projeto para sua primeira função do Lambda com Rust e como compilá-lo com o [Cargo Lambda](https://www.cargo-lambda.info/), uma extensão de código aberto de terceiros para a ferramenta de linha de comando do Cargo que simplifica a criação e a implantação de funções do Lambda do Rust.

1. Instale o [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html), uma extensão de código aberto de terceiros para a ferramenta de linha de comando do Cargo que simplifica a criação e a implantação das funções do Lambda do Rust:

   ```
   cargo install cargo-lambda
   ```

   Para outras opções de instalação, consulte [Instalação](https://www.cargo-lambda.info/guide/installation.html) na documentação do Cargo Lambda.

1. Crie a estrutura do pacote. Esse comando cria um código de função básico em `src/main.rs`. É possível usar esse código para testes ou substituí-lo pelo seu.

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

1. Dentro do diretório raiz do pacote, execute o subcomando [build](https://www.cargo-lambda.info/commands/build.html) para compilar o código na sua função.

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

   (Opcional) Se você quiser usar o AWS Graviton2 no Lambda, adicione o sinalizador `--arm64` para compilar seu código para CPUs ARM.

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

1. Antes de implantar sua função do Rust, configure as credenciais da AWS em sua máquina.

   ```
   aws configure
   ```

## Implantação do binário da função do Rust com o Cargo Lambda
<a name="rust-deploy-cargo"></a>

Use o subcomando [deploy](https://www.cargo-lambda.info/commands/deploy.html) para implantar o binário compilado no Lambda. Esse comando cria um [perfil de execução](lambda-intro-execution-role.md) e, em seguida, cria a função do Lambda. Para especificar um perfil de execução existente, use a [sinalização --iam-role](https://www.cargo-lambda.info/commands/deploy.html#iam-roles).

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

### Implantação do binário da sua função do Rust com a AWS CLI
<a name="rust-deploy-aws-cli"></a>

Também é possível implantar seu binário com a AWS CLI.

1. Use o subcomando [build](https://www.cargo-lambda.info/commands/build.html) para compilar o pacote de implantação .zip.

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

1. Para implantar o pacote .zip no Lambda, execute o comando [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html).
   + Em `--runtime`, especifique `provided.al2023`. Esse é um [runtime somente de sistema operacional](runtimes-provided.md). Os runtimes somente de sistema operacional são usados para implantar binários compilados e runtimes personalizados no Lambda.
   + Para `--role`, especifique o ARN do [perfil de execução](lambda-intro-execution-role.md).

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

### Implantação do binário da sua função do Rust com a CLI do AWS SAM
<a name="rust-deploy-sam-cli"></a>

Também é possível implantar seu binário com a CLI do AWS SAM.

1. Crie um modelo do AWS SAM com a definição do recurso e da propriedade. Em `Runtime`, especifique `provided.al2023`. Esse é um [runtime somente de sistema operacional](runtimes-provided.md). Os runtimes somente de sistema operacional são usados para implantar binários compilados e runtimes personalizados no Lambda.

   Para obter mais informações sobre a implantação das funções do Lambda usando o AWS SAM, consulte [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) no *AWS Serverless Application Model Developer Guide*.  
**Example Definição de recursos e propriedades do SAM para um binário do Rust**  

   ```
   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. Use o subcomando [build](https://www.cargo-lambda.info/commands/build.html) para compilar a função.

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

1. Use o comando [sam deploy](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html) para implantar a função no Lambda.

   ```
   sam deploy --guided
   ```

Para obter mais informações sobre como construir funções do Rust com a CLI do AWS SAM, consulte [Construção de funções do Lambda do Rust com o Cargo Lambda](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/building-rust.html) no *Guia do desenvolvedor do AWS Serverless Application Model*.

## Invocação da sua função do Rust com o Cargo Lambda
<a name="rust-invoke-function"></a>

Use o subcomando [invoke](https://www.cargo-lambda.info/commands/invoke.html) para testar sua função com uma carga.

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

### Invocação da sua função Rust com a AWS CLI
<a name="rust-invoke-cli"></a>

Também é possível usar a AWS CLI para invocar a função.

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

A opção **cli-binary-format** será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute `aws configure set cli-binary-format raw-in-base64-out`. Para obter mais informações, consulte [A AWS CLI comporta opções de linha de comando globais](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) no *Guia do usuário da AWS Command Line Interface versão 2*.