Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Creación de funciones de Lambda con Node.js

Modo de enfoque
Creación de funciones de Lambda con Node.js - AWS Lambda

Puede ejecutar código JavaScript con Node.js en AWS Lambda. Lambda proporciona tiempos de ejecución para Node.js que ejecutan su código para procesar eventos. El código se ejecuta en un entorno que incluye AWS SDK for JavaScript, con credenciales de un rol de AWS Identity and Access Management (IAM) que usted administre. Para obtener más información sobre las versiones del SDK incluidas en los tiempos de ejecución de Node.js, consulte Versiones del SDK incluidas en el tiempo de ejecución.

Lambda admite los siguientes tiempos de ejecución de Node.js.

Nombre Identificador Sistema operativo Fecha de baja Bloqueo de la función Crear Bloqueo de la función Actualizar

Node.js 22

nodejs22.x

Amazon Linux 2023

No programado

No programado

No programado

Node.js 20

nodejs20.x

Amazon Linux 2023

No programado

No programado

No programado

Node.js 18

nodejs18.x

Amazon Linux 2

31 de julio de 2025

1 de septiembre de 2025

1 de octubre de 2025

Para crear una función de Node.js.
  1. Abra la consola de Lambda.

  2. Seleccione Creación de función.

  3. Configure los siguientes ajustes:

    • En Nombre de la función: ingrese el nombre de la función.

    • Tiempo de ejecución: elija Node.js 22.x.

  4. Seleccione Creación de función.

La consola crea una función de Lambda con un único archivo de origen llamado index.mjs. Puede editar este archivo y agregar más archivos en el editor de código integrado. En la sección IMPLEMENTAR, elija Implementar para actualizar el código de la función. A continuación, para ejecutar el código, seleccione Crear evento de prueba en la sección EVENTOS DE PRUEBA.

El archivo index.mjs exporta una función denominada handler que toma un objeto de evento y un objeto context. Esta es la función de controlador a la que llama Lambda cuando se invoca la función. El tiempo de ejecución de la función de Node.js obtiene los eventos de invocación de Lambda y se los pasa al controlador. En la configuración de función, el valor de controlador es index.handler.

Al guardar el código de función, la consola de Lambda crea un paquete de implementación de archivo .zip. Cuando desarrolle el código de función fuera de la consola (mediante un IDE), debe crear un paquete de implementación para cargar el código a la función de Lambda.

El tiempo de ejecución de la función pasa un objeto context al controlador, además del evento de invocación. El objeto context contiene información adicional acerca de la invocación, la función y el entorno de ejecución. Hay más información disponible en las variables de entorno.

Su función de Lambda tiene un grupo de registros de Registros de CloudWatch. El tiempo de ejecución de la función envía detalles de cada invocación a Registros de CloudWatch. Se transmite cualquier registro que su función genere durante la invocación. Si su función devuelve un error, Lambda formatea el error y lo devuelve al invocador.

Inicialización de Node.js

Node.js tiene un modelo de bucle de eventos único que hace que su comportamiento de inicialización sea diferente al de otros tiempos de ejecución. En concreto, Node.js utiliza un modelo de E/S sin bloqueo que admite operaciones asíncronas. Este modelo permite que Node.js funcione de forma eficiente para la mayoría de las cargas de trabajo. Por ejemplo, si una función de Node.js lleva a cabo una llamada de red, esa solicitud puede designarse como operación asíncrona y colocarse en una cola de devolución de llamadas. Es posible que la función continúe procesando otras operaciones dentro de la pila de llamadas principal sin bloquearse mientras espera a que se devuelva la llamada de red. Una vez que se completa la llamada de red, se ejecuta la devolución de llamada y, a continuación, se elimina de la cola de devolución de llamadas.

Algunas tareas de inicialización pueden ejecutarse de forma asíncrona. No se garantiza que estas tareas asíncronas completen la ejecución antes de una invocación. Por ejemplo, es posible que el código que lleva a cabo la llamada de red para recuperar un parámetro de AWS Parameter Store no esté completo en el momento en el que Lambda ejecuta la función de controlador. Como resultado, la variable puede ser nula durante una invocación. Para evitarlo, asegúrese de que las variables y otros códigos asíncronos se inicialicen por completo antes de continuar con el resto de la lógica empresarial principal de la función.

Como alternativa, puede designar el código de la función como módulo ES, lo que le permite usar await en el nivel superior del archivo, fuera del ámbito del controlador de la función. Cuando await todas las Promise, el código de inicialización asíncrono se completa antes de las invocaciones del controlador, lo que maximiza la eficacia de la simultaneidad aprovisionada para reducir la latencia de inicio en frío. Para obtener más información y un ejemplo, consulte Uso de módulos ES de Node.js y espera de nivel superior en AWS Lambda.

Designación de un controlador de funciones como módulo de ES

Lambda trata los archivos con el sufijo .js como módulos CommonJS de forma predeterminada. Si así lo desea, puede designar su código como módulo ES. Puede hacerlo de dos formas: especificar el type como module en el archivo package.json de la función o usar la extensión de nombre de archivo .mjs. En el primer enfoque, el código de la función trata todos los archivos .js como módulos ES, mientras que, en el segundo caso, solo el archivo que especifique con .mjs es un módulo ES. Para mezclar módulos ES y CommonJS, asígneles los nombres .mjs y .cjs respectivamente, ya que los archivos .mjs son siempre módulos ES y los archivos .cjs son siempre módulos CommonJS.

Lambda busca carpetas en la variable de entorno NODE_PATH al cargar los módulos ES. Puede cargar el SDK de AWS que se incluye en el tiempo de ejecución mediante las instrucciones de import del módulo ES. También puede cargar módulos ES a partir de capas.

Versiones del SDK incluidas en el tiempo de ejecución

La versión del AWS SDK incluida en el tiempo de ejecución de Node.js depende de la versión del tiempo de ejecución y de su Región de AWS. Para encontrar la versión del SDK incluida en el tiempo de ejecución que está utilizando, cree una función de Lambda con el código siguiente.

ejemplo index.mjs
import packageJson from '@aws-sdk/client-s3/package.json' with { type: 'json' }; export const handler = async () => ({ version: packageJson.version });

Esta acción devuelve una respuesta con el siguiente formato:

{ "version": "3.632.0" }

Uso de keep-alive para conexiones TCP

El agente HTTP o HTTPS predeterminado de Node.js crea una nueva conexión TCP para cada nueva solicitud. Para evitar el costo de establecer nuevas conexiones, la opción keep-alive está habilitada por defecto en los tiempos de ejecución de nodejs18.x y posteriores de Lambda. Keep-alive puede reducir los tiempos de solicitud de las funciones de Lambda que realizan varias llamadas a la API mediante el SDK.

Para deshabilitar keep-alive, consulte Reusing connections with keep-alive in Node.js en la Guía para desarrolladores de AWS SDK para JavaScript 3.x. Para obtener más información sobre el uso de keep-alive, consulte HTTP keep-alive is on by default in modular AWS SDK for JavaScript en AWS Developer Tools Blog.

Carga del certificado de la CA

Para las versiones de tiempo de ejecución hasta Node.js 18, Lambda carga automáticamente los certificados de la CA (autoridad de certificación) específicos de Amazon para facilitar la creación de funciones que interactúen con otros Servicios de AWS. Por ejemplo, Lambda incluye los certificados de Amazon RDS necesarios para validar el certificado de identidad del servidor instalado en la base de datos de Amazon RDS. Este comportamiento puede afectar el rendimiento durante los arranques en frío.

A partir de Node.js 20, Lambda ya no carga certificados de la CA adicionales de forma predeterminada. El tiempo de ejecución Node.js 20 contiene un archivo de certificado con todos los certificados de la CA de Amazon ubicados en /var/runtime/ca-cert.pem. Para restaurar el mismo comportamiento de los tiempos de ejecución de Node.js 18 y anteriores, establezca la variable NODE_EXTRA_CA_CERTS del entorno en /var/runtime/ca-cert.pem.

Para obtener un rendimiento óptimo, recomendamos que agrupe solo los certificados que necesite con su paquete de implementación y que los cargue mediante la variable de entorno NODE_EXTRA_CA_CERTS. El archivo de certificados debe constar de uno o más certificados de CA raíz o intermedios de confianza en formato PEM. Por ejemplo, en el caso de RDS, incluya los certificados necesarios junto con el código como certificates/rds.pem. A continuación, cargue los certificados configurando NODE_EXTRA_CA_CERTS como /var/task/certificates/rds.pem.

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.