tutoriales.com

Despliegue de APIs Serverless con AWS Lambda y API Gateway: Una Guía Práctica

Este tutorial te guiará paso a paso en el despliegue de APIs REST completamente serverless utilizando AWS Lambda y Amazon API Gateway. Exploraremos desde la configuración inicial hasta la implementación de una función Lambda y su exposición a través de un endpoint HTTP, brindando una solución escalable y rentable.

Intermedio15 min de lectura22 views17 de marzo de 2026Reportar error

🚀 Introducción al Mundo Serverless en AWS

El desarrollo de aplicaciones ha evolucionado drásticamente en los últimos años, y el serverless se ha consolidado como una de las arquitecturas más potentes y eficientes. En el ecosistema de Amazon Web Services (AWS), esta revolución está liderada principalmente por dos servicios clave: AWS Lambda y Amazon API Gateway. Juntos, permiten construir APIs REST robustas, escalables y con un modelo de pago por uso, eliminando la necesidad de gestionar servidores.

¿Qué es Serverless? 🤔

Serverless no significa que no hay servidores. ¡Al contrario! Significa que como desarrollador ya no tienes que preocuparte por aprovisionar, escalar o mantener esos servidores. AWS se encarga de toda la infraestructura subyacente, permitiéndote concentrarte exclusivamente en escribir tu código.

💡 Consejo: Piensa en Serverless como un alquiler de coche sin preocuparte por el mantenimiento, la gasolina o el seguro; solo te enfocas en conducir.

Ventajas de la Arquitectura Serverless con Lambda y API Gateway ✨

CaracterísticaDescripciónBeneficio Clave
Sin Gestión de ServidoresAWS se encarga de la infraestructura.Reduce la carga operativa y el tiempo de desarrollo.
Escalabilidad AutomáticaSe escala automáticamente para manejar millones de solicitudes.Alta disponibilidad y rendimiento sin esfuerzo.
Pago por UsoSolo pagas por el tiempo de cómputo real y el número de solicitudes.Optimización de costos.
Alta DisponibilidadLas funciones Lambda se ejecutan en múltiples zonas de disponibilidad.Resistencia a fallos inherente.
Desarrollo RápidoMayor enfoque en la lógica de negocio, menos en la infraestructura.Ciclos de desarrollo más cortos.

🛠️ Requisitos Previos y Configuración Inicial

Para seguir este tutorial, necesitarás lo siguiente:

  • Una cuenta de AWS activa. Si no tienes una, puedes crearla y aprovechar el nivel gratuito de AWS.
  • Conocimientos básicos de la consola de AWS.
  • Familiaridad con JavaScript (Node.js) para los ejemplos de código.
  • AWS CLI instalado y configurado (opcional pero recomendado para automatización).

Configuración del Entorno de AWS ⚙️

Asegúrate de estar logueado en la Consola de AWS y de seleccionar una región donde quieras desplegar tus recursos (por ejemplo, us-east-1 o eu-west-1).

⚠️ Advertencia: Las regiones pueden tener diferencias en la disponibilidad de servicios o precios. Elige la que mejor se adapte a tus necesidades.

📝 Creando Nuestra Primera Función AWS Lambda

AWS Lambda es el corazón de nuestra aplicación serverless. Aquí es donde residirá la lógica de negocio que se ejecutará en respuesta a un evento (en nuestro caso, una solicitud HTTP).

Paso 1: Acceder al Servicio Lambda

  1. En la consola de AWS, busca "Lambda" en la barra de búsqueda superior y selecciona el servicio.
  2. Haz clic en el botón "Crear función".

Paso 2: Configurar la Función Lambda

Aquí configuraremos los detalles básicos de nuestra función:

  • Autoría desde cero: Deja seleccionada esta opción.
  • Nombre de la función: Dale un nombre descriptivo, por ejemplo, MiPrimeraApiLambda.
  • Tiempo de ejecución: Selecciona Node.js 18.x (o la versión más reciente disponible). Puedes usar otros lenguajes como Python, Java, C#, Go, Ruby, etc.
  • Arquitectura: Deja x86_64.
  • Permisos: Aquí es crucial. Selecciona "Crear un nuevo rol con permisos básicos de Lambda". Esto creará un rol de IAM que le dará a nuestra función los permisos mínimos para ejecutarse y enviar logs a CloudWatch.
    • ¿Por qué es importante el rol de IAM?El rol de IAM define qué acciones puede realizar tu función Lambda dentro de AWS. Es una práctica de seguridad fundamental aplicar el *principio de privilegio mínimo*, otorgando solo los permisos necesarios.
🔥 Importante: Siempre revisa y ajusta los permisos de tus roles de IAM. Un rol con demasiados permisos puede ser un riesgo de seguridad.
  1. Haz clic en "Crear función".

Paso 3: Escribir el Código de la Función Lambda

Una vez creada, serás redirigido a la página de configuración de tu función. Desplázate hacia abajo hasta la sección "Código".

Verás un editor de código en línea con un código de ejemplo. Reemplázalo con el siguiente código JavaScript:

exports.handler = async (event) => {
    // Log del evento de entrada (útil para depuración)
    console.log('Received event:', JSON.stringify(event, null, 2));

    let responseBody = {
        message: '¡Hola desde tu API Serverless con Lambda y API Gateway!'
    };

    // Si la solicitud contiene un parámetro de nombre en el query string
    if (event.queryStringParameters && event.queryStringParameters.name) {
        const name = event.queryStringParameters.name;
        responseBody.message = `¡Hola, ${name}, desde tu API Serverless!`;
    }

    // Si la solicitud es un POST y tiene un cuerpo JSON
    if (event.httpMethod === 'POST' && event.body) {
        try {
            const requestBody = JSON.parse(event.body);
            if (requestBody.name) {
                responseBody.message = `¡Hola, ${requestBody.name}, tu POST ha sido recibido por tu API Serverless!`;
            } else {
                responseBody.message = 'POST recibido sin nombre en el cuerpo.';
            }
        } catch (error) {
            console.error('Error parsing JSON body:', error);
            responseBody.message = 'Error: Cuerpo de solicitud JSON inválido.';
        }
    }

    const response = {
        statusCode: 200,
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(responseBody),
    };
    return response;
};

Este código simple realiza lo siguiente:

  • Recibe un event objeto, que contiene toda la información de la solicitud HTTP (cuando se integre con API Gateway).
  • Devuelve un mensaje de saludo.
  • Personaliza el saludo si se proporciona un name en los parámetros de la cadena de consulta (para GET) o en el cuerpo de la solicitud JSON (para POST).
  • Devuelve un objeto de respuesta con statusCode, headers y body (el cuerpo debe ser una cadena JSON).
  1. Haz clic en "Deploy" para guardar los cambios en tu función Lambda.

Paso 4: Probar la Función Lambda (Sin API Gateway aún) 🧪

Antes de integrar con API Gateway, podemos probar la función directamente en Lambda para asegurarnos de que el código funciona.

  1. En la misma página de la función, haz clic en el botón "Test".
  2. En el cuadro de diálogo "Configurar eventos de prueba", selecciona "hello-world" como "Plantilla de evento".
  3. Cambia el "Nombre del evento" a TestEventGET.
  4. Modifica el JSON del evento para simular una solicitud GET con un parámetro de consulta. Por ejemplo:
{
"httpMethod": "GET",
"queryStringParameters": {
"name": "MundoServerless"
}
}
  1. Haz clic en "Guardar".

  2. Haz clic en "Test" de nuevo. Deberías ver la ejecución de la función y la salida en la sección "Detalles de la ejecución". El campo body de la respuesta debería contener {"message":"¡Hola, MundoServerless, desde tu API Serverless!"}.

    Lambda Funcionando ✅

🌐 Exponiendo la Función con Amazon API Gateway

Ahora que nuestra función Lambda está lista, necesitamos una forma de invocarla a través de una solicitud HTTP estándar. Aquí es donde entra Amazon API Gateway.

Paso 1: Añadir un Disparador (Trigger) a Lambda

La forma más sencilla de integrar Lambda con API Gateway es añadir un disparador directamente desde la consola de Lambda.

  1. En la página de tu función Lambda (MiPrimeraApiLambda), en la sección "Diseñador de funciones", haz clic en "Añadir disparador".
  2. En la lista de disparadores, selecciona "API Gateway".
  3. En la sección "API Gateway", selecciona:
    • Tipo de API: API REST
    • Seguridad: Abrir (Para este tutorial, la dejaremos abierta. En producción, usarías IAM, Cognito o una clave de API).
  4. Haz clic en "Añadir".

Ahora verás un nuevo disparador de API Gateway en el diseñador de funciones. AWS habrá creado automáticamente una nueva API REST en API Gateway y la habrá conectado a tu función Lambda.

Paso 2: Probar la API desde el Navegador o Cliente REST 🎯

  1. En la sección de disparadores de tu función Lambda, haz clic en el nombre del disparador de API Gateway (debería ser algo como MiPrimeraApiLambda-API).
  2. Esto te llevará a la consola de API Gateway.
  3. En la sección "Etapas" (Stages), selecciona la etapa default (o la que se haya creado). Aquí verás la URL de invocación de tu API.
  4. Copia la "URL de invocación". Debería tener un formato similar a https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/default.

Ahora, puedes probar tu API:

  • GET sin parámetros: Pega la URL en tu navegador. Deberías ver {"message":"¡Hola desde tu API Serverless con Lambda y API Gateway!"}.
  • GET con parámetros: Añade ?name=Visitante al final de la URL (ej: https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/default?name=Visitante). Deberías ver {"message":"¡Hola, Visitante, desde tu API Serverless!"}.
📌 Nota: Para probar solicitudes POST, necesitarás un cliente REST como Postman, Insomnia, o `curl`.

Ejemplo con curl para POST:

curl -X POST -H "Content-Type: application/json" -d '{"name": "Desarrollador"}' https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/default

La respuesta debería ser {"message":"¡Hola, Desarrollador, tu POST ha sido recibido por tu API Serverless!"}.


📈 Monitoreo y Logging de tu API Serverless

Una vez desplegada, es crucial monitorear el rendimiento y depurar posibles errores. AWS CloudWatch es el servicio integrado para esto.

Acceder a los Logs de Lambda 📖

Cada vez que tu función Lambda se ejecuta, envía logs a CloudWatch Logs. Puedes ver estos logs para depurar y monitorear el comportamiento de tu función.

  1. En la página de tu función Lambda, haz clic en la pestaña "Monitor".
  2. Haz clic en "Ver registros en CloudWatch".
  3. Esto te llevará al grupo de registros de CloudWatch asociado a tu función. Verás varios flujos de registros (log streams), cada uno representando una instancia de ejecución de tu función. Haz clic en el más reciente para ver los detalles.

Aquí podrás ver los console.log que incluimos en nuestro código, así como información sobre el inicio y fin de la ejecución de Lambda y su duración. Esto es invaluable para la depuración.

Métricas de API Gateway 📊

API Gateway también envía métricas detalladas a CloudWatch, como el número de solicitudes, errores 4XX, errores 5XX y latencia. Puedes ver estas métricas desde la consola de API Gateway o directamente en CloudWatch Metrics.

Cliente API Gateway Lambda CloudWatch Logs

🔒 Seguridad en API Gateway (Opcional - Avanzado)

Aunque para este tutorial hemos dejado la API abierta, en un entorno de producción, la seguridad es primordial. API Gateway ofrece varias opciones:

  • Claves de API: Para controlar el acceso y monitorear el uso por cliente. No son un mecanismo de autenticación robusto, sino más bien de identificación.
  • AWS IAM: Utilizar roles y políticas de IAM para autorizar el acceso a la API, ideal para aplicaciones internas o servicios de AWS.
  • Amazon Cognito: Integración con Cognito User Pools para autenticación de usuarios.
  • Autorizadores de Lambda: Una función Lambda que se encarga de la lógica de autorización personalizada antes de que la solicitud llegue a la función principal. Ofrece la máxima flexibilidad.
Ejemplo de Uso de Claves de API 1. En la consola de API Gateway, selecciona tu API. 2. En "Resources", selecciona el método (`GET`, `POST`) de tu recurso. 3. En la sección "Method Request", edita "API Key Required" a `true`. 4. En el menú de la izquierda, ve a "API Keys". Haz clic en "Create API Key". 5. Dale un nombre, guárdala y asóciala a un plan de uso que incluya tu API. 6. Para probar, debes incluir la clave en el header `x-api-key` en tus solicitudes.

🧹 Limpieza de Recursos

Es una buena práctica limpiar los recursos que ya no necesitas para evitar cargos inesperados en tu cuenta de AWS. ¡El modelo de pago por uso es genial, pero un recurso olvidado puede sorprenderte!

Paso 1: Eliminar la API Gateway
Ve al servicio API Gateway, selecciona tu API (ej. `MiPrimeraApiLambda-API`) y haz clic en "Actions" -> "Delete". Confirma la eliminación.
Paso 2: Eliminar la Función Lambda
Ve al servicio Lambda, selecciona tu función (`MiPrimeraApiLambda`) y haz clic en "Actions" -> "Delete function". Confirma la eliminación.
Paso 3: Eliminar el Rol de IAM (Opcional)
Ve al servicio IAM, en "Roles", busca el rol que se creó para tu función Lambda (ej. `MiPrimeraApiLambda-role-xxxxxx`). Selecciónalo y haz clic en "Delete role".
Paso 4: Eliminar el Grupo de Registros de CloudWatch (Opcional)
Ve a CloudWatch, en "Logs" -> "Log groups", busca el grupo de registros asociado a tu función (ej. `/aws/lambda/MiPrimeraApiLambda`). Selecciónalo y haz clic en "Actions" -> "Delete log group".

🏁 Conclusión

¡Felicidades! 🎉 Has desplegado con éxito tu primera API REST completamente serverless utilizando AWS Lambda y Amazon API Gateway. Has aprendido a:

  • Crear y configurar una función Lambda.
  • Escribir lógica de negocio para responder a solicitudes HTTP.
  • Integrar Lambda con API Gateway para exponer tu función a internet.
  • Probar tu API.
  • Acceder a los logs para monitoreo y depuración.
  • Comprender las bases de la seguridad y la limpieza de recursos.

Esta arquitectura es la base para construir microservicios, APIs backend para aplicaciones web/móviles y flujos de trabajo basados en eventos, todo ello con la flexibilidad, escalabilidad y rentabilidad que ofrece el modelo serverless de AWS. El siguiente paso podría ser explorar el despliegue con AWS SAM o Serverless Framework para una gestión de infraestructura como código (IaC) más robusta.

Continúa explorando Feliz codificación

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!