

# Conceptos básicos
<a name="durable-basic-concepts"></a>

El SDK de ejecución duradera de AWS es la base para crear funciones duraderas y proporciona los componentes que necesita para comprobar el progreso, gestionar los reintentos y administrar el flujo de ejecución. El SDK está disponible para JavaScript, TypeScript, Python y Java. Para obtener la documentación completa del SDK, como la referencia sobre la API, los tutoriales de inicio rápido y las guías específicas del lenguaje, consulte la [Guía para desarrolladores del SDK de ejecución duradera de AWS](https://docs.aws.amazon.com/durable-execution/).

## Ejecución duradera
<a name="durable-execution-concept"></a>

Una **ejecución duradera** representa el ciclo de vida completo de una función duradera de Lambda y utiliza un mecanismo de puntos de control y reproducción para realizar un seguimiento del progreso de la lógica empresarial, suspender la ejecución y recuperarse de los errores. Cuando las funciones se reanudan tras una suspensión o interrupción, los puntos de control completados anteriormente se reproducen y la función continúa ejecutándose.

El ciclo de vida puede incluir varias invocaciones de una función de Lambda para completar la ejecución, especialmente después de suspensiones o una recuperación de errores. Este enfoque permite que la función se ejecute durante períodos prolongados (hasta 1 año) y, al mismo tiempo, mantiene un progreso fiable a pesar de las interrupciones.

**Cómo funciona la reproducción**  
Lambda mantiene un registro en ejecución de todas las operaciones duraderas (pasos, esperas y otras operaciones) a medida que se ejecuta la función. Cuando la función necesita hacer una pausa o se produce una interrupción, Lambda guarda este registro de puntos de control y detiene la ejecución. Cuando llega el momento de reanudarla, Lambda vuelve a invocar la función desde el principio y reproduce el registro de puntos de control; así se sustituyen los valores almacenados por las operaciones completadas. Esto significa que el código se vuelve a ejecutar, pero los pasos completados anteriormente no se vuelven a ejecutar. En cambio, se utilizan sus resultados almacenados.

Este mecanismo de reproducción es fundamental para comprender las funciones duraderas. El código debe ser determinista durante la reproducción, lo que significa que produce los mismos resultados con las mismas entradas. Evite realizar operaciones con efectos secundarios (como generar números al azar u obtener la hora actual) fuera de los pasos, ya que pueden producir valores diferentes durante la reproducción y provocar un comportamiento no determinista.

## DurableContext
<a name="durable-context-concept"></a>

**DurableContext** es el objeto de contexto recibido por la función duradera. Proporciona métodos para operaciones duraderas, como pasos y esperas, que crean puntos de control y administran el flujo de ejecución.

La función duradera recibe un `DurableContext` en lugar del predeterminado de Lambda:

------
#### [ TypeScript ]

```
import {
  DurableContext,
  withDurableExecution,
} from "@aws/durable-execution-sdk-js";

export const handler = withDurableExecution(
  async (event: any, context: DurableContext) => {
    const result = await context.step(async () => {
      return "step completed";
    });
    return result;
  },
);
```

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

```
from aws_durable_execution_sdk_python import (
    DurableContext,
    durable_execution,
    durable_step,
)

@durable_step
def my_step(step_context, data):
    # Your business logic
    return result

@durable_execution
def handler(event, context: DurableContext):
    result = context.step(my_step(event["data"]))
    return result
```

------

A través de `DurableContext`, su función tiene acceso a operaciones duraderas que controlan el progreso y coordinan el trabajo:
+ **Steps** utiliza la lógica empresarial con reintentos integrados y creación automática de puntos de control. Cada paso guarda su resultado; por lo tanto, la función se reanuda desde el último paso completado después de una interrupción.
+ Los **estados de espera** son pausas planificadas en las que la función deja de ejecutarse y deja de cargarse hasta el momento de continuar. Utilícelos para periodos de tiempo, devoluciones de llamada externas o para comprobar si se cumple una condición.
+ **Invocación** llama a otras funciones de Lambda y comprueba el resultado. La función invocada puede ser una función duradera o estándar. No se admiten invocaciones entre cuentas.

Para obtener una referencia del lenguaje completa sobre todas las operaciones duraderas disponibles, consulte la [Referencia del SDK](https://docs.aws.amazon.com/durable-execution/sdk-reference/) en la Guía para desarrolladores del SDK de ejecución duradera de AWS.

## Configuración de funciones duraderas
<a name="durable-configuration-basic"></a>

Las funciones duraderas tienen ajustes de configuración específicos que controlan el comportamiento de ejecución y la retención de datos. Estos ajustes son independientes de la configuración estándar de la función de Lambda y se aplican a todo el ciclo de vida de la ejecución duradera.

El objeto **DurableConfig** define la configuración de las funciones duraderas:

```
{
  "ExecutionTimeout": Integer,
  "RetentionPeriodInDays": Integer
}
```

### Execution timeout (Tiempo de espera hasta ejecución)
<a name="durable-execution-timeout"></a>

El **tiempo de espera de la ejecución** controla el tiempo que puede durar una ejecución duradera desde el principio hasta su finalización. Esto es diferente del tiempo de espera de la función de Lambda, que controla cuánto tiempo puede ejecutarse la invocación de una sola función.

Una ejecución duradera puede abarcar varias invocaciones de funciones de Lambda a medida que avanza por los puntos de control, las esperas y las reproducciones. El tiempo de espera de ejecución se aplica al tiempo total transcurrido de la ejecución duradera, no a las invocaciones de funciones individuales.

**Descripción de las diferencias**  
El tiempo de espera de la función de Lambda (máximo 15 minutos) limita cada invocación individual de la función. El tiempo de espera de la ejecución duradera (máximo 1 año) limita el tiempo total desde que se inicia la ejecución hasta que se completa, se produce un error o se agota el tiempo de espera. Durante este período, es posible que la función se invoque varias veces mientras procesa los pasos, espera y se recupera de los errores.

Por ejemplo, si establece un tiempo de espera de ejecución duradera de 24 horas y un tiempo de espera de la función de Lambda de 5 minutos:
+ La invocación de cada función debe completarse en 5 minutos.
+ Toda la ejecución duradera puede durar hasta 24 horas.
+ Su función se puede invocar muchas veces durante esas 24 horas.
+ Las operaciones de espera no se tienen en cuenta para el tiempo de espera de la función de Lambda, pero sí para el tiempo de espera de ejecución.

Puede configurar el tiempo de espera de ejecución si crea una función duradera mediante la consola de Lambda, la AWS CLI o el AWS SAM. En la consola de Lambda, seleccione su función y, a continuación, elija Configuración, Ejecución duradera. Establezca el valor del tiempo de espera de ejecución en segundos (predeterminado: 86 400 segundos/24 horas, mínimo: 60 segundos, máximo: 31 536 000 segundos/1 año).

**nota**  
El tiempo de espera de ejecución y el tiempo de espera de la función de Lambda son ajustes diferentes. El tiempo de espera de la función de Lambda controla cuánto tiempo puede ejecutarse cada invocación individual (máximo 15 minutos). El tiempo de espera de la ejecución controla el tiempo total transcurrido durante toda la ejecución duradera (máximo 1 año).

### Periodo de retención
<a name="durable-retention-period"></a>

El **período de retención** controla el tiempo que Lambda conserva el historial de ejecución y los datos de los puntos de control una vez finalizada una ejecución duradera. Estos datos incluyen los resultados de los pasos, el estado de ejecución y el registro completo de los puntos de control.

Una vez que vence el período de retención, Lambda elimina el historial de ejecuciones y los datos de los puntos de control. Ya no se pueden recuperar los detalles de la ejecución ni reproducir la ejecución. El período de retención comienza cuando la ejecución alcanza un estado terminal (EXITOSA, FALLIDA, DETENIDA o TIEMPO DE ESPERA AGOTADO).

Puede configurar el período de retención cuando crea una función duradera mediante la consola de Lambda, la AWS CLI o el AWS SAM. En la consola de Lambda, seleccione su función y, a continuación, elija Configuración, Ejecución duradera. Establezca el valor del período de retención en días (predeterminado: 14 días, mínimo: 1 día, máximo: 90 días).

Elija un período de retención según sus requisitos de conformidad, sus necesidades de depuración y las consideraciones de los costos. Los períodos de retención más prolongados proporcionan más tiempo para la depuración y la auditoría, pero aumentan los costos de almacenamiento.

## Véase también
<a name="durable-basic-concepts-see-also"></a>
+ [Guía para desarrolladores del SDK de ejecución duradera de AWS](https://docs.aws.amazon.com/durable-execution/): Referencia completa sobre el SDK, tutoriales de inicio rápido, marco de pruebas y guías para lenguajes específicos.
+ [Funciones duraderas o Step Functions](durable-step-functions.md): compare las funciones duraderas con Step Functions para comprender cuándo cada enfoque es más eficaz.