

# Implementación e invocación de funciones duraderas de Lambda con la AWS CLI
<a name="durable-getting-started-cli"></a>

Utilice la AWS CLI para crear e implementar funciones duraderas de Lambda con comandos imperativos. Este enfoque le brinda un control directo sobre cada paso del proceso de implementación.

## Requisitos previos
<a name="durable-cli-prerequisites"></a>
+ Instale y configure la AWS CLI. Para obtener instrucciones, consulte [Instalación de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ Cree un paquete de implementación con el código de la función y el SDK de ejecución duradera.
+ Cree un rol de ejecución de IAM con permisos de puntos de control.

## Creación del rol de ejecución
<a name="durable-cli-create-role"></a>

Cree un rol de IAM con permisos para las operaciones básicas de ejecución de Lambda y puntos de control.

**Para crear el rol de ejecución**

1. Cree un documento de política de confianza que permita que Lambda asuma el rol. Guarde esto como `trust-policy.json`:

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lambda.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. Cree el rol:

   ```
   aws iam create-role \
     --role-name {{durable-function-role}} \
     --assume-role-policy-document file://trust-policy.json
   ```

1. Adjunte la política de ejecución duradera para las operaciones de puntos de control y la ejecución básica:

   ```
   aws iam attach-role-policy \
     --role-name {{durable-function-role}} \
     --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy
   ```

La política administrada `AWSLambdaBasicDurableExecutionRolePolicy` incluye los permisos necesarios para las operaciones de puntos de control (`lambda:CheckpointDurableExecution` y `lambda:GetDurableExecutionState`) y la ejecución básica de Lambda.

## Creación de la función duradera
<a name="durable-cli-create-function"></a>

Cree la función duradera con el parámetro `--durable-config`.

**Cómo crear una función duradera**

1. Empaque el código de función con las dependencias en un archivo.zip:

   ```
   zip -r function.zip index.mjs node_modules/
   ```
**nota**  
Para las funciones duraderas basadas en Java, debe compilar el código de la función y sus dependencias en un único archivo .zip o Java Archive (JAR). Para obtener más información, consulte [Implementar funciones de Lambda Java con archivos de archivo .zip o JAR](java-package.md).

1. Cree la función con la ejecución duradera habilitada:

   ```
   aws lambda create-function \
     --function-name {{myDurableFunction}} \
     --runtime nodejs22.x \
     --role {{arn:aws:iam::123456789012:role/durable-function-role}} \
     --handler index.handler \
     --zip-file fileb://function.zip \
     --durable-config '{"ExecutionTimeout": 3600, "RetentionPeriodInDays": 7}'
   ```

**nota**  
Solo puede habilitar la ejecución duradera cuando crea la función. No puede habilitarla en las funciones existentes.

## Publicación de una versión
<a name="durable-cli-publish-version"></a>

Si bien las funciones duraderas se pueden invocar con el calificador de versión `$LATEST`, siempre debe utilizar un ARN calificado que apunte a una versión estable para garantizar la ejecución determinista del código.

```
aws lambda publish-version \
  --function-name {{myDurableFunction}} \
  --description "Initial version"
```

El comando devuelve el ARN de la versión. Anote el número de versión (por ejemplo, `:1`) al final del ARN.

De manera opcional, cree un alias que apunte a la versión:

```
aws lambda create-alias \
  --function-name {{myDurableFunction}} \
  --name prod \
  --function-version 1
```

## Invocación de la función duradera
<a name="durable-cli-invoke"></a>

Invoque la función duradera mediante el ARN calificado (versión o alias).

**nota**  
**Invocaciones idempotentes:** para evitar ejecuciones duplicadas al volver a intentar invocaciones fallidas, puede proporcionar un nombre de ejecución que garantice una semántica de ejecución como máximo una vez. Consulte [Idempotencia](durable-execution-idempotency.md) para obtener más información.

**Invocación sincrónica**  
Para las ejecuciones que se completen en 15 minutos, utilice la invocación sincrónica:

```
aws lambda invoke \
  --function-name {{myDurableFunction:1}} \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

O use un alias:

```
aws lambda invoke \
  --function-name {{myDurableFunction:prod}} \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

**Invocación asíncrona**  
Para ejecuciones de larga duración, utilice la invocación asíncrona:

```
aws lambda invoke \
  --function-name {{myDurableFunction:prod}} \
  --invocation-type Event \
  --payload '{"orderId": "order-12345"}' \
  --cli-binary-format raw-in-base64-out \
  response.json
```

Con la invocación asíncrona, Lambda regresa inmediatamente. La función continúa ejecutándose en segundo plano.

**nota**  
Puede utilizar `$LATEST` para crear prototipos y realizar pruebas en la consola. Para las cargas de trabajo de producción, utilice una versión publicada o un alias.

## Administración de ejecuciones duraderas
<a name="durable-cli-manage-executions"></a>

Utilice los siguientes comandos para administrar y supervisar ejecuciones de funciones duraderas.

**Enumeración de ejecuciones**  
Enumere todas las ejecuciones de una función duradera:

```
aws lambda list-durable-executions-by-function \
  --function-name {{myDurableFunction}}
```

**Detalles de ejecución**  
Obtenga los detalles sobre una ejecución específica:

```
aws lambda get-durable-execution \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

**Obtención del historial de ejecuciones**  
Consulte el historial de puntos de control de una ejecución:

```
aws lambda get-durable-execution-history \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

**Detención de una ejecución**  
Detenga una ejecución duradera en ejecución:

```
aws lambda stop-durable-execution \
  --durable-execution-arn {{arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:my-function-version/durable-execution/my-execution-name/my-execution-id}}
```

## Actualizar el código de la función
<a name="durable-cli-update-function"></a>

Actualice su código de función duradera y publique una nueva versión:

**Cómo actualizar y publicar una nueva versión**

1. Actualice el código de la función:

   ```
   aws lambda update-function-code \
     --function-name {{myDurableFunction}} \
     --zip-file fileb://function.zip
   ```

1. Espere a que se complete la actualización:

   ```
   aws lambda wait function-updated \
     --function-name {{myDurableFunction}}
   ```

1. Publique una nueva versión:

   ```
   aws lambda publish-version \
     --function-name {{myDurableFunction}} \
     --description "Updated order processing logic"
   ```

1. A continuación, actualice el alias para que apunte a la nueva versión.

   ```
   aws lambda update-alias \
     --function-name {{myDurableFunction}} \
     --name prod \
     --function-version 2
   ```

**importante**  
Las ejecuciones en ejecución siguen utilizando la versión con la que empezaron. Las nuevas invocaciones utilizan la versión del alias actualizada.

## Visualización de registros de funciones
<a name="durable-cli-view-logs"></a>

Consulte los registros de funciones duraderas en Registros de CloudWatch:

```
aws logs tail /aws/lambda/myDurableFunction --follow
```

Filtre los registros para una ejecución específica:

```
aws logs filter-log-events \
  --log-group-name /aws/lambda/myDurableFunction \
  --filter-pattern "exec-abc123"
```

## Eliminar recursos
<a name="durable-cli-cleanup"></a>

Elimine la función duradera y los recursos asociados:

```
# Delete the function
aws lambda delete-function --function-name {{myDurableFunction}}

# Delete the IAM role policies
aws iam detach-role-policy \
  --role-name {{durable-function-role}} \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

aws iam detach-role-policy \
  --role-name {{durable-function-role}} \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicDurableExecutionRolePolicy

# Delete the role
aws iam delete-role --role-name {{durable-function-role}}
```

## Siguientes pasos
<a name="durable-cli-next-steps"></a>

Tras implementar la función duradera con la AWS CLI:
+ Supervise las ejecuciones mediante los comandos `list-durable-executions-by-function` y `get-durable-execution`.
+ Vea las operaciones de los puntos de control en los eventos de datos de AWS CloudTrail.
+ Configure las alarmas de CloudWatch para los errores de ejecución o las ejecuciones de larga duración.
+ Automatice las implementaciones mediante scripts de intérprete de comandos o canalizaciones de CI/CD.

Para obtener más información sobre los comandos de la AWS CLI en Lambda, consulte la [Referencia de comandos de la AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/lambda/index.html).