¿Cómo puedo usar las capas para integrar la versión más reciente del AWS SDK para JavaScript en mi función de Lambda Node.js?

7 minutos de lectura
0

El entorno de la versión de ejecutable de AWS Lambda no tiene determinadas características de la versión más reciente de un AWS SDK. Quiero integrar la versión más reciente del AWS SDK para JavaScript en mi función de Lambda Node.js.

Breve descripción

Para integrar la versión más reciente de un AWS SDK en el paquete de despliegue de su función de Lambda, cree una capa de Lambda. A continuación, añada la capa a su función. Para crear una capa de Lambda y añadirla a la función, utilice la Interfaz de la línea de comandos de AWS (AWS CLI) o la consola de Lambda.

Nota: En el caso de la versión 16 de Node.js y versiones posteriores, las versiones ejecutables de Node.js de Lambda incluían el AWS SDK para JavaScript versión 2. En el caso de la versión 18 de Node.js y versiones posteriores, las versiones ejecutables de Node.js de Lambda incluían el AWS SDK para JavaScript versión 3. Para obtener más información, consulte Node.js 18.x runtime now available in AWS Lambda.

Para obtener una lista completa de las versiones ejecutables y las versiones del AWS SDK que utiliza Lambda, consulte Lambda runtimes.

Nota: La siguiente solución aumenta el tamaño del paquete de despliegue de la función. Para obtener más información sobre las cuotas de almacenamiento de Lambda, consulte Lambda quotas.

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

(Opcional) Confirmación de la versión del AWS SDK que usa su función

Para confirmar la versión del AWS SDK que usa su función, siga estos pasos:

Nota: Utilice este método únicamente para la versión 16 de Node.js y versiones anteriores.

  1. Cree una función en la consola de Lambda.

  2. Actualice el código de la función para devolver la versión del AWS SDK que la función usa al invocar la función:

    const AWS = require('aws-sdk')   
    exports.handler = async (event) => {  
    return AWS.VERSION;  
    };
  3. Invoque la función.

  4. Compare la versión del AWS SDK que devolvió su función con la versión más reciente del AWS SDK que aparece en la documentación del AWS SDK.

Instalación y empaquetado de la versión más reciente del AWS SDK

Nota: Los paquetes de despliegue deben ser compatibles con la versión de despliegue de Lambda que utilice. Se recomienda usar el mismo sistema operativo (OS) para la versión ejecutable especificada en Lambda runtimes. Por ejemplo, lance una instancia compatible de Amazon Elastic Compute Cloud (Amazon EC2).

En un entorno de desarrollo local compatible con Lambda, siga estos pasos:

  1. Ejecute el siguiente comando para crear un directorio de trabajo:

    mkdir -p aws-sdk-layer/nodejs
  2. Ejecute el siguiente comando para cambiar al directorio de trabajo:

    cd aws-sdk-layer/nodejs
  3. Instale el AWS SDK para su versión ejecutable de Node.js:
    Node.js 16 y versiones anteriores (AWS SDK versión 2)
    Para instalar la versión más reciente del AWS SDK versión 2, utilice una instancia compatible con Amazon Linux 2 para ejecutar el siguiente comando:

    npm install aws-sdk

    Para obtener más información, consulte Tutorial: Setting up Node.js on an Amazon EC2 instance.

    Nota: Para desarrollar recursos de Lambda, se recomienda usar un entorno de Amazon Linux 2.

    Alternativa:

    Si usa un sistema operativo Windows o macOS para el desarrollo, use Docker para ejecutar el siguiente comando:

    docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:<version>" /bin/sh -c "npm install aws-sdk; exit"

    Nota: Antes de ejecutar el comando, asegúrese de usar la versión más reciente de Docker en el sitio web de Docker.

    Node.js 18 y versiones posteriores (AWS SDK versión 3)

    Consulte Installing the SDK for JavaScript.

    Si importa un comando del AWS SDK que no existe en la versión del SDK integrada en Lambda, es posible que se muestre el siguiente error:

    «Runtime.UserCodeSyntaxError "Named export not found" The requested module is a CommonJS module»

    En este caso, instale el paquete específico para poder usarlo en la función. Por ejemplo, supongamos que utiliza la siguiente instrucción de importación:

    import {DeleteQueueCommand} from "@aws-sdk/client-connect";

    En este caso, instale el cliente actualizado para poder usar el paquete específico dentro de su función.

    Por ejemplo, supongamos que usa la siguiente instrucción de importación en una función de Lambda con la versión 18 de Node.js o versiones posteriores:

    import {DeleteQueueCommand} from "@aws-sdk/client-connect";

    Si este paquete no se encuentra en su versión actual del AWS SDK, se mostrará el siguiente error en sus registros:

    «"errorType": "Runtime.UserCodeSyntaxError",
    "errorMessage": "SyntaxError: Named export 'DeleteQueueCommand' not found. The requested module '@aws-sdk/client-connect' is a CommonJS module, which may not support all module.exports as named exports.\nCommonJS modules can always be imported via the default export, for example using:\n\nimport pkg from '@aws-sdk/client-connect';\nconst {DeleteQueueCommand} = pkg;\n",»

    Para incluir el paquete DeleteQueueCommand y solucionar este error, instale la versión más reciente del cliente:

    npm install @aws-sdk/client-connect  
    
  4. Cree un archivo .zip para cargarlo en la capa de Lambda:

    zip -r ../package.zip ../
  5. (Opcional) Compruebe la versión del AWS SDK que ha instalado:

    cat package-lock.json

    Obtendrá un resultado similar al siguiente:

    {  "requires": true,  
      "lockfileVersion": 1,  
      "dependencies": {  
        "aws-sdk": {  
          "version": "2.888.0",  
    ...

Utilización de la AWS CLI para crear una capa de Lambda y añadirla a su función

  1. Para crear una nueva capa de Lambda que incluya la versión más reciente del AWS SDK que desea usar, ejecute el siguiente comando publish-layer-version:

    Nota: Sustituya node_sdk por el nombre de la capa y My layer por una descripción de la capa. Además, sustituya el valor de compatible-runtimes por la versión ejecutable que utiliza y region por la región de AWS en la que se encuentran su función y la capa.

    aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region

    Anote el valor de LayerVersionArn en el resultado del comando para utilizarlo en el próximo paso.

  2. Para añadir la capa a su función, ejecute el siguiente comando update-function-configuration:

    Nota: Sustituya my-function por el nombre de su función, arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 por el valor de LayerVersionArn en el resultado y region por su región.

    aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region

    Para obtener más información, consulte Working with Lambda layers.

Utilización de la consola de Lambda para crear una capa de Lambda y agregarla a su función

  1. Abra la página Capas en la consola de Lambda.
  2. Elija Crear una capa. A continuación, introduzca los siguientes valores:
    En Nombre, introduzca un nombre para la nueva capa.
    (Opcional) En Descripción: opcional, introduzca una descripción para la capa.
    Seleccione Cargar un archivo .zip.
    Seleccione Cargar. A continuación, elija el nombre del archivo.zip del paquete de despliegue.
    (Opcional) En Tiempos de ejecución compatibles: opcional, elija una o varias versiones ejecutables compatibles. 
    (Opcional) En Licencia: opcional, introduzca cualquier información sobre la licencia de software aplicable a la capa.
  3. Elija Crear.
  4. Abra la página Funciones en la consola de Lambda y, a continuación, seleccione el nombre de la función a la que desee agregar la capa.
  5. En Información general de la función, seleccione Capas.
  6. Seleccione Añadir una capa.
  7. En Elija una capa, seleccione Capas personalizadas. A continuación, elija los valores siguientes:
    El nombre de la capa
    La versión de la capa
  8. Elija Agregar.

(Opcional) Prueba de la configuración

Siga los pasos en el apartado (Opcional) Confirmación de la versión del AWS SDK que usa su función para invocar su función. La función devuelve la versión del AWS SDK que usa.

También puede comprobar la versión más reciente del AWS SDK en el archivo CHANGELOG del AWS SDK que utiliza. Para obtener más información, consulte Changelog for AWS SDK for JavaScript o Changelog for AWS SDK V3 for Javascript.

Información relacionada

Lambda programming model 

Best practices for working with AWS Lambda functions

¿Cómo puedo crear un paquete de despliegue de Lambda para Node.js?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses