Desarrollo web

Última actualización: 2026-03-31

Usando AWS Lambda

AWS Lambda es un servicio de cómputo serverless (sin servidor) que permite a los usuarios ejecutar código sin la necesidad de aprovisionar ni administrar servidores. Con Lambda, el usuario carga su código como una función, y AWS se encarga de ejecutarlo únicamente cuando es necesario. El servicio escala automáticamente los recursos y solo cobra por el tiempo de cómputo utilizado. Esto libera al usuario de la gestión de la infraestructura, permitiéndole concentrarse en la lógica de su aplicación y construir soluciones escalables y rentables basadas en eventos.

AWS Lambda, dentro de la capa gratuita, permite hasta un millón de peticiones al mes sin costo alguno. Si se supera esto, el costo suele ser muy bajo, aproximadamente $0.20 USD por cada millón de peticiones adicionales.

Contenido

Desde el Learner Lab ir a la consola de AWS y seleccionar Lambda. Presionar el botón de Crear función y completar el formulario con la siguiente información (las opciones no mencionadas aquí se deben dejar con su valor por omisión):

Finalmente, presionar el botón Crear una función.

NOTA: En la página que aparece hay dos secciones que conviene resaltar:

Es posible editar una función Lambda directamente desde Cloud9, lo que permite un flujo de trabajo de desarrollo más integrado y eficiente en la nube.

  1. En un entorno de Cloud9, crear un directorio con el mismo nombre que la función Lambda que se desea editar (por ejemplo: MiFuncionEjemplo).

  2. En este nuevo directorio, crear un archivo llamado index.mjs con el siguiente contenido:

    export const handler = async (event, context) => {
      const response = {
        statusCode: 200,
        body: JSON.stringify({
          message: "Hello, World!"
        })
      };
      return response;
    };
    
  3. Se puede correr el comando npm install dentro del directorio recién creado para instalar cualquier paquete que requiera el código de la función Lambda.

Esta opción permite empaquetar y desplegar el código de una función Lambda directamente a AWS desde el IDE de Cloud9. Simplifica el proceso de implementación al encargarse de crear el archivo ZIP necesario con el código y dependencias, y luego lo sube y actualiza la configuración de la función Lambda existente en AWS, facilitando la puesta en producción de los cambios sin necesidad de usar la consola de AWS.

  1. Abrir la pestaña de AWS (aws-explorer) del lado izquiero del IDE de Cloud9.

  2. Expandir la sección Explorer.

  3. Expandir la sección de la región, por ejemplo: US East (N. Virginia).

  4. Expandir la sección Lambda.

  5. Seleccionar la función Lambda (MiFuncionEjemplo) dar clic con el botón derecho y seleccionar la opción Upload Lambda....

  6. Selccionar Directory.

  7. Selccionar:
    No
    AWS Toolkit will upload a ZIP of the selected directory.

  8. Seleccionar el directorio donde radica el código de la función lambda.

  9. Presionar el botón Yes.

  10. Una vez que aparezca el mensaje “Uploaded Lambda Function” ya es posible invocar la función Lambda usando Postman o cualquier otro cliente.

Esta opción permite probar y ejecutar funciones Lambda directamente en el entorno real de AWS. Esto facilita una prueba realista con servicios de AWS simplificando el flujo de trabajo. Además, permite configurar el evento de entrada y visualizar la salida y los logs de la función directamente en Cloud9, agilizando la identificación y resolución de problemas.

  1. Abrir la pestaña de AWS (aws-explorer) del lado izquiero del IDE de Cloud9.

  2. Expandir la sección Explorer.

  3. Expandir la sección de la región, por ejemplo: US East (N. Virginia).

  4. Expandir la sección Lambda.

  5. Seleccionar la función Lambda (MiFuncionEjemplo) dar clic con el botón derecho y seleccionar la opción Invoke on AWS.

  6. (OPCIONAL) Copiar el siguiente objeto de JSON y pegarlo en el campo de payload de la página de invocación. Este objeto es el valor que toma el parámetro event del handler de la función Lambda. Es válido modificarlo si así conviene.

    {
      "version": "2.0",
      "rawPath": "/",
      "queryStringParameters": {
        "param1": "value1",
        "param2": "value2",
        "param3": "value3"
      },
      "headers": {
        "content-type": "application/json",
        "content-length": "33"
      },
      "body": "{\"key1\":\"value1\",\"key2\":\"value2\"}",
      "requestContext": {
        "domainName": "example.com",
        "http": {
          "method": "GET",
          "protocol": "HTTP/1.1"
        }
      }
    }
    
  7. Presionar el botón Invoke.

  8. En la pestaña “AWS Toolkit” debe aparecer el payload (la información con el resultado) de la invocación, incluyendo cualquier mensaje de error.

La implementación de una aplicación de Express sobre la infraestructura de AWS Lambda resulta bastante conveniente porque permite aprovechar la facilidad de desarrollo propia de Express, manteniendo una misma base de código para programar y realizar pruebas de forma local antes de desplegar en la nube. Al integrar esta flexibilidad con la arquitectura serverless, se obtiene una escalabilidad automática y una optimización de costos bajo el modelo de pago por uso, eliminando por completo la gestión de servidores tradicionales. Lo anterior se logra fácilmente utilizando el paquete Serverless Express, que actúa como puente entre ambos entornos.

  1. Instalar el paquete @codegenie/serverless-express dentro del mismso directorio que contiene la aplicación de Express que se desea ejecutar como una función Lambda. En la terminal de Cloud9 teclear:

    cd directorio_de_la_aplicación_de_express
    
    npm install @codegenie/serverless-express
    

    NOTA: Aquí se parte del supuesto que los paquetes requeridos por la aplicación, incluyendo express, ya se encuentran previamente instalados.

  2. En este mismo directorio, crear un archivo llamado index.mjs con el siguiente código que servirá de punto de entrada para la función Lambda:

    // Archivo: index.mjs
    
    import serverlessExpress from '@codegenie/serverless-express';
    import app from './app.mjs';
    
    const serverlessHandler = serverlessExpress({ app });
    
    export const handler = async (event, context) => {
      return serverlessHandler(event, context);
    };
    
  3. La instrucción app.listen(...) que se encuentra al final del archivo app.mjs solo se debe correr si el código está ejecutando localmente (no como parte de una función Lambda). Para lograr esto, dicha instrucción debe colocarse dentro de un enunciado if como se muestra aquí:

    if (process.env.AWS_LAMBDA_FUNCTION_NAME === undefined) {
      app.listen(port, () => {
        console.log(
          `Server listening at http://${ ipAddress }:${ port }`);
      });
    }
    

    NOTA: Los constantes ipAddress y port no tendrán ningún valor útil cuando la aplicación de Express esté corriendo como función Lambda. En caso de requerirse, el nombre del host está disponible como req.hostname desde cualquier callback al momento de definir un endpoint. En cuanto al número de puerto, se puede suponer que es el 443 (puerto por omisión del protocolo HTTP).

  4. Exportar la constante app para que se pueda acceder desde otros módulos. Al final del archivo app.mjs, añadir la siguiente línea:

    export default app;
    
  5. En este momento, la aplicación escrita en Express se puede seguir corriendo y probando localmente desde la terminal de Cloud9 de la manera usual:

    nodemon app.mjs
  6. Para poder correr la aplicación desde AWS Lambda solo se requiere crear la función y hacer el despligue correspondiente usando el directorio de la aplicación de Express. Una vez hecho esto, la aplicación estará disponible desde el URL de la función Lambda.