

# Implementar funciones de Rust Lambda con archivos .zip
<a name="rust-package"></a>

En esta página se describe cómo compilar la función de Rust y luego implementar el binario compilado a AWS Lambda con [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html). También muestra cómo implementar el binario compilado con la AWS Command Line Interface y la CLI de AWS Serverless Application Model.

**Topics**
+ [Requisitos previos](#rust-package-prerequisites)
+ [Creación de funciones de Rust en macOS, Windows o Linux](#rust-package-build)
+ [Implementación del binario de la función de Rust con Cargo Lambda](#rust-deploy-cargo)
+ [Invocación de la función de Rust con Cargo Lambda](#rust-invoke-function)

## Requisitos previos
<a name="rust-package-prerequisites"></a>
+ [Rust](https://www.rust-lang.org/tools/install)
+ [AWS CLI versión 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)

## Creación de funciones de Rust en macOS, Windows o Linux
<a name="rust-package-build"></a>

Los siguientes pasos muestran cómo crear el proyecto para su primera función de Lambda con Rust y cómo compilarlo con [Cargo Lambda](https://www.cargo-lambda.info/), una extensión de código abierto de terceros para la herramienta de la línea de comandos de Cargo que simplifica la creación y la implementación de funciones de Lambda en Rust.

1. Instale [Cargo Lambda](https://www.cargo-lambda.info/guide/what-is-cargo-lambda.html), una extensión de código abierto de terceros para la herramienta de la línea de comandos Cargo que simplifica la creación y la implementación de las funciones de Lambda en Rust:

   ```
   cargo install cargo-lambda
   ```

   Para ver otras opciones de instalación, consulte [Instalación](https://www.cargo-lambda.info/guide/installation.html) en la documentación de Cargo Lambda.

1. Cree la estructura del paquete. Este comando crea un código de función básico en `src/main.rs`. Puede usar este código para realizar pruebas o sustituirlo por su propio código.

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

1. Dentro del directorio raíz del paquete, ejecute el subcomando [build](https://www.cargo-lambda.info/commands/build.html) para compilar el código de la función.

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

   (Opcional) Si desea usar AWS Graviton2 en Lambda, agregue el indicador `--arm64` para compilar el código para las CPU ARM.

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

1. Antes de implementar la función de Rust, configure las credenciales de AWS en su equipo.

   ```
   aws configure
   ```

## Implementación del binario de la función de Rust con Cargo Lambda
<a name="rust-deploy-cargo"></a>

Utilice el subcomando [deploy](https://www.cargo-lambda.info/commands/deploy.html) para implementar el binario compilado en Lambda. Este comando crea un [rol de ejecución](lambda-intro-execution-role.md) y luego crea la función de Lambda. Para especificar un rol de ejecución existente, utilice el [indicador --iam-role](https://www.cargo-lambda.info/commands/deploy.html#iam-roles).

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

### Implementación del binario de la función de Rust con la AWS CLI
<a name="rust-deploy-aws-cli"></a>

También puede implementar el binario con la AWS CLI.

1. Para crear el paquete de despliegue .zip, utilice el subcomando [build](https://www.cargo-lambda.info/commands/build.html).

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

1. Ejecute el comando [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) para implementar el paquete .zip en Lambda.
   + En `--runtime`, especifique `provided.al2023`. Este es un [tiempo de ejecución exclusivo del sistema operativo](runtimes-provided.md). Los tiempos de ejecución exclusivos del sistema operativo se utilizan para implementar binarios compilados y tiempos de ejecución personalizados en Lambda.
   + En `--role`, especifique el ARN del [rol de ejecución](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
   ```

### Implementación del binario de la función de Rust con la CLI de AWS SAM
<a name="rust-deploy-sam-cli"></a>

También puede implementar el binario con la CLI de AWS SAM.

1. Cree una plantilla de AWS SAM con la definición del recurso y la propiedad. En `Runtime`, especifique `provided.al2023`. Este es un [tiempo de ejecución exclusivo del sistema operativo](runtimes-provided.md). Los tiempos de ejecución exclusivos del sistema operativo se utilizan para implementar binarios compilados y tiempos de ejecución personalizados en Lambda.

   Para obtener más información sobre la implementación de funciones de Lambda mediante AWS SAM, consulte [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) en la *Guía para desarrolladores de AWS Serverless Application Model*.  
**Example Definición de recursos y propiedades de SAM para un binario de 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. Utilice el subcomando [build](https://www.cargo-lambda.info/commands/build.html) para compilar la función.

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

1. Utilice el comando [sam deploy](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html) para implementar la función en Lambda.

   ```
   sam deploy --guided
   ```

Para obtener más información sobre cómo crear funciones de Rust con la CLI de AWS SAM, consulte [Creación de funciones de Rust Lambda con Cargo Lambda](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/building-rust.html) en la *Guía para desarrolladores de AWS Serverless Application Model*.

## Invocación de la función de Rust con Cargo Lambda
<a name="rust-invoke-function"></a>

Use el subcomando [invoke](https://www.cargo-lambda.info/commands/invoke.html) para probar la función con una carga.

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

### Invocación de la función de Rust con la AWS CLI
<a name="rust-invoke-cli"></a>

También puede usar la AWS CLI para invocar la función.

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

La opción **cli-binary-format** es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute `aws configure set cli-binary-format raw-in-base64-out`. Para obtener más información, consulte [Opciones de la línea de comandos globales compatibles con AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) en la *Guía del usuario de la AWS Command Line Interface versión 2*.