

# Creación de funciones duraderas de Lambda
<a name="durable-getting-started"></a>

Para iniciarte en las funciones duraderas de Lambda, utiliza la consola de Lambda para crear una función duradera. En unos minutos, puede crear e implementar una función duradera que utilice pasos y esperas para demostrar la ejecución basada en puntos de control.

A medida que realice el tutorial, aprenderá conceptos fundamentales sobre funciones duraderas, por ejemplo, cómo usar el objeto `DurableContext`, crear puntos de control mediante pasos y pausar la ejecución mediante esperas. También obtendrá información sobre cómo funciona la reproducción cuando la función se reanuda tras una espera.

Para simplificar, este tutorial muestra cómo crear su función con el tiempo de ejecución de Python o Node.js. Con estos lenguajes interpretados, puede editar el código de función directamente en el editor de código integrado en la consola.

**nota**  
Actualmente, las funciones duraderas admiten tiempos de ejecución de Python, Node.js (JavaScript/TypeScript) y Java, así como imágenes de contenedor (OCI). Para obtener una lista completa de las versiones de tiempo de ejecución compatibles y las opciones de imágenes de contenedores, consulte [Tiempos de ejecución compatibles para funciones duraderas](durable-supported-runtimes.md). Para obtener más información acerca del uso de imágenes de contenedor con Lambda, consulte [Creación de imágenes de contenedor](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html) en la Guía para desarrolladores de Lambda.

**sugerencia**  
Para obtener información sobre cómo crear **soluciones sin servidor**, consulte la [Guía para desarrolladores sin servidor](https://docs.aws.amazon.com/serverless/latest/devguide/).

## Requisitos previos
<a name="durable-getting-started-prerequisites"></a>

### Cómo crear una Cuenta de AWS
<a name="sign-up-for-aws"></a>

Si no dispone de una Cuenta de AWS, siga estos pasos para crear una.

**Cómo registrarse en Cuenta de AWS**

1. Abra [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup).

1. Siga las instrucciones que se le indiquen.

   Parte del procedimiento de registro consiste en recibir una llamada telefónica o mensaje de texto e indicar un código de verificación en el teclado del teléfono.

   Al registrarse en una Cuenta de AWS, se crea un *Usuario raíz de la cuenta de AWS*. El usuario raíz tendrá acceso a todos los Servicios de AWS y recursos de esa cuenta. Como práctica recomendada de seguridad, asigne acceso administrativo a un usuario y utilice únicamente el usuario raíz para realizar [Tareas que requieren acceso de usuario raíz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS le enviará un correo electrónico de confirmación cuando complete el proceso de registro. Se puede ver la actividad de la cuenta y administrarla en cualquier momento entrando en [https://aws.amazon.com/](https://aws.amazon.com/) y seleccionando **Mi cuenta**.

### Creación de un usuario con acceso administrativo
<a name="create-an-admin"></a>

Después de registrarse para obtener una Cuenta de AWS, proteja su Usuario raíz de la cuenta de AWS, habilite AWS IAM Identity Center y cree un usuario administrativo para no usar el usuario raíz en las tareas cotidianas.

**Protección de Usuario raíz de la cuenta de AWS**

1.  Inicie sesión en [Consola de administración de AWS](https://console.aws.amazon.com/) como propietario de la cuenta; para ello, elija **Usuario raíz** e introduzca el correo electrónico de su Cuenta de AWS. En la siguiente página, escriba su contraseña.

   Para obtener ayuda para iniciar sesión con el usuario raíz, consulte [Iniciar sesión como usuario raíz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) en la *Guía del usuario de AWS Sign-In*.

1. Active la autenticación multifactor (MFA) para el usuario raíz.

   Para obtener instrucciones, consulte [Habilitación de un dispositivo MFA virtual para su usuario raíz de la Cuenta de AWS (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) en la *Guía del usuario de IAM*.

**Creación de un usuario con acceso administrativo**

1. Activar IAM Identity Center.

   Consulte las instrucciones en [Activar AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) en la *Guía del usuario de AWS IAM Identity Center*.

1. En IAM Identity Center, conceda acceso administrativo a un usuario.

   Para ver un tutorial sobre cómo usar Directorio de IAM Identity Center como origen de identidad, consulte [Configuración del acceso de los usuarios con el Directorio de IAM Identity Center predeterminado](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) en la *Guía del usuario de AWS IAM Identity Center*.

**Inicio de sesión como usuario con acceso de administrador**
+ Para iniciar sesión con el usuario de IAM Identity Center, use la URL de inicio de sesión que se envió a la dirección de correo electrónico cuando creó el usuario de IAM Identity Center.

  Para obtener ayuda para iniciar sesión con un usuario de IAM Identity Center, consulte [Inicio de sesión en el portal de acceso de AWS](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) en la *Guía del usuario de AWS Sign-In*.

**Concesión de acceso a usuarios adicionales**

1. En IAM Identity Center, cree un conjunto de permisos que siga la práctica recomendada de aplicar permisos de privilegios mínimos.

   Para conocer las instrucciones, consulte [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) en la *Guía del usuario de AWS IAM Identity Center*.

1. Asigne usuarios a un grupo y, a continuación, asigne el acceso de inicio de sesión único al grupo.

   Para conocer las instrucciones, consulte [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) en la *Guía del usuario de AWS IAM Identity Center*.

## Creación de una función duradera de Lambda con la consola
<a name="getting-started-create-durable-function"></a>

En este ejemplo, la función duradera procesa un pedido en varios pasos con creación automática de puntos de control. La función toma un objeto de JSON que contiene un identificador de pedido, lo valida, procesa el pago y lo confirma. Cada paso atraviesa automáticamente por un punto de control, por lo que, si la función se interrumpe, se reanudará desde el último paso completado.

La función también muestra una operación de espera, en la que se pausa la ejecución durante un breve período para simular la espera de una confirmación externa.

**Cómo crear una función duradera con la consola**

1. Abra la página de [Functions](https://console.aws.amazon.com/lambda/home#/functions) (Funciones) en la consola de Lambda.

1. Seleccione **Creación de función**.

1. Seleccione **Crear desde cero**.

1. En el panel de **Información básica**, ingrese `myDurableFunction` para el **Nombre de la función**.

1. En **Tiempo de ejecución**, elija **Node.js 24** o **Python 3.14**.

1. Seleccione **Habilitar la ejecución duradera**.

Lambda crea la función duradera con un [rol de ejecución](lambda-intro-execution-role.md) que incluye permisos para las operaciones de puntos de control (`lambda:CheckpointDurableExecution` y `lambda:GetDurableExecutionState`).

**nota**  
Los tiempos de ejecución de Lambda incluyen el SDK de ejecución duradera, por lo que puede probar funciones duraderas sin empaquetar dependencias. Sin embargo, le recomendamos incluir el SDK en su paquete de implementación para producción. Esto garantiza la coherencia de las versiones y evita posibles actualizaciones del tiempo de ejecución que podrían afectar su función.

Para añadir el código de la función duradera, utilice el editor de código integrado en la consola.

------
#### [ Node.js ]

**Modificación del código en la consola**

1. Elija la pestaña **Código**.

   En el editor de código integrado de la consola, debería ver el código de función que creó Lambda. Si no ve la pestaña **index.mjs** en el editor de código, seleccione **index.mjs** en el explorador de archivos, como se muestra en el siguiente diagrama.  
![Diagrama que muestra el editor de código de la consola y el archivo index.mjs en el explorador de archivos](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/durable-nodejs.png)

1. Pegue el siguiente código en la pestaña **index.mjs**, que reemplaza el código que creó Lambda.

   ```
   import {
     withDurableExecution,
   } from "@aws/durable-execution-sdk-js";
   
   export const handler = withDurableExecution(
     async (event, context) => {
       const orderId = event.orderId;
       
       // Step 1: Validate order
       const validationResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Validating order ${orderId}`);
         return { orderId, status: "validated" };
       });
       
       // Step 2: Process payment
       const paymentResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Processing payment for order ${orderId}`);
         return { orderId, status: "paid", amount: 99.99 };
       });
       
       // Wait for 10 seconds to simulate external confirmation
       await context.wait({ seconds: 10 });
       
       // Step 3: Confirm order
       const confirmationResult = await context.step(async (stepContext) => {
         stepContext.logger.info(`Confirming order ${orderId}`);
         return { orderId, status: "confirmed" };
       });
           
       return {
         orderId: orderId,
         status: "completed",
         steps: [validationResult, paymentResult, confirmationResult]
       };
     }
   );
   ```

1. En la sección **IMPLEMENTAR** elija **Implementar** para actualizar el código de la función:  
![Botón Implementar en el editor de código de la consola de Lambda](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**Descripción del código de función duradera**  
Antes de avanzar al siguiente paso, observemos el código de función y comprendamos algunos conceptos clave de las funciones duraderas.
+ El encapsulador de `withDurableExecution`:

  La función duradera se encapsula con `withDurableExecution`. Este encapsulador permite una ejecución duradera al proporcionar el objeto `DurableContext` y gestionar las operaciones de los puntos de control.
+ El objeto `DurableContext`:

  En lugar del contexto estándar de Lambda, la función recibe un `DurableContext`. Este objeto proporciona métodos para operaciones duraderas, como `step()` y `wait()`, que crearán puntos de control.
+ Pasos y puntos de control:

  Cada llamada a `context.step()` crea un punto de control antes y después de la ejecución. Si la función se interrumpe, se reanudará desde el último punto de control completado. La función no vuelve a ejecutar los pasos completados. En su lugar, utiliza los resultados almacenados.
+ Operaciones de espera:

  La llamada a `context.wait()` detiene la ejecución sin consumir recursos de cómputo. Cuando finaliza la espera, Lambda vuelve a invocar la función y reproduce el registro de puntos de control; de esta manera, sustituye los valores almacenados de los pasos completados.
+ Mecanismo de reproducción:

  Cuando la función se reanuda tras una espera o una interrupción, Lambda ejecuta el código desde el principio. Sin embargo, los pasos completados no se vuelven a ejecutar. Lambda reproduce sus resultados del registro de puntos de control. Por eso su código debe ser determinista.

------
#### [ Python ]

**Modificación del código en la consola**

1. Elija la pestaña **Código**.

   En el editor de código integrado de la consola, debería ver el código de función que creó Lambda. Si no ve la pestaña **lambda\_function.py** en el editor de código, seleccione **lambda\_function.py** en el explorador de archivos, como se muestra en el siguiente diagrama.  
![Diagrama en el que se muestra el editor de código de la consola y el archivo lambda_function.py en el explorador de archivos](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/durable-python.png)

1. Pegue el siguiente código en la pestaña **lambda\_function.py**, que reemplaza el código que creó Lambda.

   ```
   from aws_durable_execution_sdk_python import (
       DurableContext,
       durable_execution,
       durable_step,
   )
   from aws_durable_execution_sdk_python.config import Duration
   
   @durable_step
   def validate_order(step_context, order_id):
       step_context.logger.info(f"Validating order {order_id}")
       return {"orderId": order_id, "status": "validated"}
   
   @durable_step
   def process_payment(step_context, order_id):
       step_context.logger.info(f"Processing payment for order {order_id}")
       return {"orderId": order_id, "status": "paid", "amount": 99.99}
   
   @durable_step
   def confirm_order(step_context, order_id):
       step_context.logger.info(f"Confirming order {order_id}")
       return {"orderId": order_id, "status": "confirmed"}
   
   @durable_execution
   def lambda_handler(event, context: DurableContext):
       order_id = event['orderId']
       
       # Step 1: Validate order
       validation_result = context.step(validate_order(order_id))
       
       # Step 2: Process payment
       payment_result = context.step(process_payment(order_id))
       
       # Wait for 10 seconds to simulate external confirmation
       context.wait(Duration.from_seconds(10))
       
       # Step 3: Confirm order
       confirmation_result = context.step(confirm_order(order_id))
           
       return {
           "orderId": order_id,
           "status": "completed",
           "steps": [validation_result, payment_result, confirmation_result]
       }
   ```

1. En la sección **IMPLEMENTAR** elija **Implementar** para actualizar el código de la función:  
![Botón Implementar en el editor de código de la consola de Lambda](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**Descripción del código de función duradera**  
Antes de avanzar al siguiente paso, observemos el código de función y comprendamos algunos conceptos clave de las funciones duraderas.
+ El decorador `@durable_execution`:

  Su función de controlador está decorada con `@durable_execution`. Este decorador permite una ejecución duradera porque proporciona el objeto `DurableContext` y administra las operaciones de los puntos de control.
+ El decorador `@durable_step`:

  Cada función escalonada está decorada con `@durable_step`. Este decorador marca la función como un paso duradero que crea puntos de control.
+ El objeto `DurableContext`:

  En lugar del contexto estándar de Lambda, la función recibe un `DurableContext`. Este objeto proporciona métodos para operaciones duraderas, como `step()` y `wait()`, que crearán puntos de control.
+ Pasos y puntos de control:

  Cada llamada a `context.step()` crea un punto de control antes y después de la ejecución. Si la función se interrumpe, se reanudará desde el último punto de control completado. La función no vuelve a ejecutar los pasos completados. En su lugar, utiliza los resultados almacenados.
+ Operaciones de espera:

  La llamada a `context.wait()` detiene la ejecución sin consumir recursos de cómputo. Cuando finaliza la espera, Lambda vuelve a invocar la función y reproduce el registro de puntos de control; de esta manera, sustituye los valores almacenados de los pasos completados.
+ El SDK para Python es sincrónico:

  Tenga en cuenta que el SDK para Python no utiliza `await`. Todas las operaciones duraderas son llamadas a métodos sincrónicas.

------

## Invocación de la función de Lambda mediante la consola de editor de código
<a name="get-started-invoke-durable-manually"></a>

Cuando no se especifica (o publica) ninguna versión explícita, la consola invoca la función duradera mediante el calificador de versión `$LATEST`. Sin embargo, para la ejecución determinista del código, siempre debe utilizar un ARN calificado que apunte a una versión estable.

**Cómo publicar una versión de la función:**

1. Elija la pestaña **Versiones**.

1. Elija **Publicar nueva versión**.

1. En **Descripción de la versión**, introduzca **Initial version** (opcional).

1. Elija **Publicar**.

1. Lambda crea la versión 1 de la función. Tenga en cuenta que el ARN de la función ahora incluye `:1` al final, lo que indica que se trata de la versión 1.

Ahora cree un evento de prueba a fin de enviarlo a su función. El evento es un documento con formato JSON que contiene un identificador de pedido.

**Para crear el evento de prueba, realice lo siguiente:**

1. En la sección **EVENTOS DE PRUEBA** del editor de código de la consola, elija **Crear evento de prueba**.  
![Botón de creación de un evento de prueba en el editor de código de la consola de Lambda](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/getting-started-tutorial/test-event.png)

1. Para **Event name (Nombre de evento)**, escriba **myTestEvent**.

1. En la sección **Evento JSON**, sustituya el JSON predeterminado por el siguiente:

   ```
   {
     "orderId": "order-12345"
   }
   ```

1. Seleccione **Save**.

**Cómo probar la función duradera y ver la ejecución**

En la sección **EVENTOS DE PRUEBA** del editor de código de la consola, seleccione el ícono de ejecución junto a su evento de prueba:

![Botón de ejecución de evento de prueba en el editor de código de la consola de Lambda](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/getting-started-tutorial/run-test-event.png)


Su función duradera comienza a ejecutarse. Dado que incluye una espera de 10 segundos, la invocación inicial se completa rápidamente, y la función se reanuda tras el período de espera. Puede ver el progreso de la ejecución en la pestaña **Ejecuciones duraderas**.

**Cómo ver la ejecución de función duradera**

1. Seleccione la pestaña **Ejecuciones duraderas**.

1. Busque la ejecución en la lista. La ejecución muestra el estado actual (En ejecución, satisfactoria o fallida).

1. Seleccione el identificador de ejecución para ver los detalles, entre otros los siguientes:
   + El cronograma de ejecución que muestra cuándo se completó cada paso.
   + El historial de los puntos de control.
   + Los períodos de espera.
   + Los resultados de la prueba.

También puede ver los registros de la función en Registros de CloudWatch para ver el resultado de la consola de cada paso.

**Visualización de los registros de invocación de la función en Registros de CloudWatch**

1. En la consola de CloudWatch, abra la página [Log groups (grupos de registro)](https://console.aws.amazon.com/cloudwatch/home#logs:).

1. Elija el grupo de registro para la función (`/aws/lambda/myDurableFunction`).

1. Desplácese hacia abajo y seleccione el **flujo de registro** para las invocaciones de la función que desee consultar.  
![Lista de flujos de registros de una función de Lambda.](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/log-stream.png)

   Debería ver las entradas de registro de cada invocación de la función, incluidas la ejecución inicial y la reproducción tras la espera.

**nota**  
Cuando se utiliza el registrador de `DurableContext` (por ejemplo, `context.logger` o `stepContext.logger`), los registros también aparecen en las vistas de ejecución duradera y paso a paso de la consola de Lambda. Es posible que estos registros tarden un momento en cargarse.

## Limpieza
<a name="gettingstarted-durable-cleanup"></a>

Cuando haya terminado de trabajar con la función duradera de ejemplo, elimínela. También puede eliminar el [rol de ejecución](lambda-intro-execution-role.md) creado por la consola y el grupo de registro que almacena los registros de la función.

**Cómo eliminar la función de Lambda**

1. Abra la [página de Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Seleccione la función que ha creado.

1. Elija **Acciones**, **Eliminar**.

1. Escriba **confirm** en el campo de entrada de texto y elija **Delete**(Eliminar).

**Para eliminar el grupo de registros**

1. En la consola de CloudWatch, abra la página [Log groups (Grupos de registro)](https://console.aws.amazon.com/cloudwatch/home#logs:).

1. Seleccione el grupo de registros de la función (`/aws/lambda/myDurableFunction`).

1. Elija **Acciones**, **Eliminar grupo(s) de registro(s)**.

1. En el cuadro de diálogo **Eliminar grupos de registros**, elija **Eliminar**.

**Cómo eliminar el rol de ejecución**

1. Abra la página de [Roles](https://console.aws.amazon.com/iam/home?#/roles) de la consola de AWS Identity and Access Management (IAM).

1. Seleccione el rol de ejecución de la función, por ejemplo, ., `myDurableFunction-role-{{31exxmpl}}`).

1. Elija **Eliminar**.

1. En el cuadro de diálogo **Eliminar rol**, escriba el nombre del rol y, a continuación, elija **Eliminar**.

## Recursos adicionales y próximos pasos
<a name="durable-getting-started-more-resources"></a>

Ahora que ha creado y probado una función duradera simple de Lambda con la consola, siga los pasos a continuación:
+ Obtenga información sobre los casos de uso más comunes de las funciones duraderas, como las transacciones distribuidas, el procesamiento de pedidos y los flujos de trabajo de revisión humana. Consulte [Ejemplos](durable-examples.md).
+ Descubra cómo supervisar las ejecuciones de funciones duraderas con las métricas y el historial de ejecución de CloudWatch. Consulte [Supervisión y depuración](durable-monitoring.md).
+ Obtenga información sobre cómo invocar funciones duraderas de forma sincrónica y asíncrona y cómo administrar las ejecuciones de larga duración. Consulte [Invocación de funciones duraderas](durable-invoking.md).
+ Siga las prácticas recomendadas para escribir código determinista, administrar el tamaño de los puntos de control y optimizar los costos. Consulte [Prácticas recomendadas](durable-best-practices.md).
+ Obtenga información sobre cómo probar las funciones duraderas a nivel local y en la nube. Consulte [Prueba de funciones duraderas](durable-testing.md).
+ Compare las funciones duraderas con Step Functions para comprender cuándo cada enfoque es más eficaz. Consulte [Funciones duraderas o Step Functions](durable-step-functions.md).