

# Creación de un sistema de procesamiento de pedidos con funciones duraderas de Lambda
<a name="order-processing-app"></a>

**nota**  
NECESIDAD: Añadir un diagrama de arquitectura que muestre la API Gateway, el flujo de trabajo de funciones duraderas y los servicios de soporte (DynamoDB, EventBridge).

## Requisitos previos
<a name="order-processing-prerequisites"></a>
+ AWS CLI instalado y configurado
+ NECESIDAD: Requisitos específicos de funciones duraderas.

## Creación de los archivos de código fuente
<a name="order-processing-source"></a>

Cree los siguientes archivos en el directorio del proyecto:
+ `lambda_function.py`: código de función
+ `requirements.txt`: manifiesto de dependencias

### Código de la función
<a name="order-processing-function-code"></a>

```
# NEED: Verify correct imports
import boto3
import json

def lambda_handler(event, context):
    # NEED: Verify DurableContext syntax
    durable = context.durable
    
    try:
        # Validate and store order
        order = await durable.step('validate', async () => {
            return validate_order(event['order'])
        })
        
        # Process payment
        # NEED: Verify wait syntax
        await durable.wait(/* wait configuration */)
        
        # Additional steps
        # NEED: Complete implementation
        
    except Exception as e:
        # NEED: Error handling patterns
        raise e

def validate_order(order_data):
    # NEED: Implementation
    pass
```

### Archivo de requisitos
<a name="order-processing-requirements"></a>

```
# NEED: List of required packages
```

## Implementar la aplicación
<a name="order-processing-deploy"></a>

### Creación de una tabla de pedidos de DynamoDB
<a name="order-processing-dynamodb"></a>

1. Abra la consola de DynamoDB desde [ttps://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/).

1. Elija **Create table** (Crear tabla).

1. En **Nombre de la tabla**, introduzca **Orders**.

1. En **Clave de partición**, introduzca **orderId**.

1. Deje el resto de los ajustes según los valores predeterminados.

1. Elija **Create table** (Crear tabla).

### Crear la función Lambda
<a name="order-processing-lambda"></a>

1. Abra la consola de Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Elija **Create function (Crear función)**

1. Seleccione **Crear desde cero**.

1. En **Nombre de la función**, ingrese **ProcessOrder**.

1. En **Tiempo de ejecución**, elija el tiempo de ejecución que prefiera.

1. NECESIDAD: Añadir una configuración específica para funciones duraderas.

1. Elija **Create function (Crear función)**

### Creación del punto de conexión de API Gateway
<a name="order-processing-apigateway"></a>

1. Abra la consola de API Gateway en [https://console.aws.amazon.com/apigateway/](https://console.aws.amazon.com/apigateway/).

1. Seleccione **Crear API**.

1. Seleccione **HTTP API**.

1. Seleccione **Compilar**.

1. Añada una integración con su función de Lambda.

1. Configure rutas para el procesamiento de pedidos.

1. Implemente la API.

## Pruebe la aplicación.
<a name="order-processing-test"></a>

Envíe un pedido de prueba:

```
{
    "orderId": "12345",
    "items": [
        {
            "productId": "ABC123",
            "quantity": 1
        }
    ]
}
```

NECESIDAD: Añadir instrucciones de supervisión específicas para las funciones duraderas.

## Siguientes pasos
<a name="order-processing-next-steps"></a>

### Agregado de lógica empresarial
<a name="order-processing-business-logic"></a>

Implemente la gestión de inventario:

```
async def check_inventory(order):
    # Add inventory check logic
    pass
```

Añada cálculos de precios:

```
async def calculate_total(order):
    # Add pricing logic
    pass
```

### Mejora de la gestión de errores
<a name="order-processing-error-handling"></a>

Añada lógica de compensación:

```
async def reverse_payment(order):
    # Add payment reversal logic
    pass
```

Gestione cancelaciones de pedidos:

```
async def cancel_order(order):
    # Add cancellation logic
    pass
```

### Integración de sistemas externos
<a name="order-processing-integrations"></a>

```
async def notify_shipping_provider(order):
    # Add shipping integration
    pass

async def send_customer_notification(order):
    # Add notification logic
    pass
```

### Supervisión mejorada
<a name="order-processing-monitoring"></a>
+ Cree paneles de CloudWatch.
+ Configure métricas para los tiempos de procesamiento de los pedidos.
+ Configure alertas para pedidos retrasados.