Come posso utilizzare i livelli per integrare la versione più recente dell'SDK AWS per JavaScript nella mia funzione Lambda Node.js?

7 minuti di lettura
0

L'ambiente di runtime AWS Lambda non include alcune funzionalità dell'ultima versione di un SDK AWS. Desidero integrare l'ultima versione dell'SDK AWS per JavaScript nella mia funzione Lambda Node.js.

Breve descrizione

Per integrare la versione più recente di un SDK AWS nel pacchetto di implementazione della funzione Lambda, crea un livello Lambda. Quindi, aggiungi il livello alla funzione. Per creare un livello Lambda e aggiungerlo alla funzione, utilizza l'Interfaccia della linea di comando AWS (AWS CLI) o la console Lambda.

Nota: per le versioni 16 e precedenti di Node.js, i runtime di Lambda Node.js includevano l'SDK AWS per JavaScript versione 2. Per le versioni 18 e successive di Node.js, il runtime di Lambda Node.js include l'SDK AWS per JavaScript versione 3. Per ulteriori informazioni, consulta la pagina Node.js 18.x runtime now available in AWS Lambd.

Per un elenco completo dei runtime e delle versioni dell'SDK AWS utilizzate da Lambda, consulta la pagina Runtime Lambda.

Nota: la seguente risoluzione aumenta le dimensioni del pacchetto di implementazione della funzione. Per informazioni sulle quote di archiviazione Lambda, consulta la pagina Quote di Lambda.

Risoluzione

Nota: se ricevi errori durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta la pagina Risolvi gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

(Facoltativo) Conferma la versione dell'SDK AWS utilizzata dalla tua funzione

Per confermare la versione dell'SDK AWS utilizzata dalla tua funzione, completa i seguenti passaggi:

Nota: utilizza questo metodo solo per le versioni 16 e precedenti di Node.js. 

  1. Crea una funzione nella console Lambda.

  2. Aggiorna il codice della funzione per restituire la versione dell'SDK AWS utilizzata dalla funzione quando questa viene richiamata:

    const AWS = require('aws-sdk')   
    exports.handler = async (event) => {  
    return AWS.VERSION;  
    };
  3. Richiama la funzione.

  4. Confronta la versione dell'SDK AWS restituita dalla funzione con l'ultima versione dell'SDK AWS elencata nella documentazione dell'SDK AWS.

Installa e impacchetta la versione più recente dell'SDK AWS

Nota: i pacchetti di implementazione devono essere compatibili con il runtime Lambda utilizzato. Per il runtime, è consigliabile utilizzare lo stesso sistema operativo (OS) specificato in Runtime Lambda. Ad esempio, avvia un'istanza Amazon Elastic Compute Cloud (Amazon EC2) compatibile.

In un ambiente di sviluppo locale compatibile con Lambda, completa i passaggi seguenti:

  1. Esegui il comando seguente per creare una directory di lavoro:

    mkdir -p aws-sdk-layer/nodejs
  2. Esegui il comando seguente per passare alla directory di lavoro:

    cd aws-sdk-layer/nodejs
  3. Installa l'SDK AWS per la versione del runtime di Node.js in uso:
    Node.js 16 e versioni precedenti (SDK AWS versione 2)
    Per installare l'ultima versione dell'SDK AWS versione 2, utilizza un'istanza compatibile con Amazon Linux 2 per eseguire il comando seguente:

    npm install aws-sdk

    Per ulteriori informazioni, consulta Tutorial: configurazione di Node.js su un'istanza Amazon EC2.

    Nota: per lo sviluppo di risorse Lambda, è consigliabile utilizzare un ambiente Amazon Linux 2.

    -oppure-

    Se utilizzi un sistema operativo Windows o macOS per lo sviluppo, usa Docker per eseguire il comando seguente:

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

    Nota: prima di eseguire il comando, assicurati di utilizzare la versione più recente di Docker sul sito web di Docker.

    Node.js 18 e versioni successive (SDK AWS versione 3)

    Consulta la pagina Installing the SDK for JavaScript.

    Se importi un comando SDK AWS che non esiste nella versione SDK incorporata in Lambda, potresti ricevere il seguente errore:

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

    In questo caso, installa il pacchetto specifico in modo da poterlo utilizzare all'interno della funzione. Ad esempio, utilizza la seguente dichiarazione di importazione:

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

    In questo caso, installa il client aggiornato in modo da poter utilizzare il pacchetto specifico all'interno della funzione.

    Ad esempio, utilizza la seguente dichiarazione di importazione in una funzione Lambda con Node.js versione 18 o successiva:

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

    Se la tua versione attuale dell'SDK AWS non contiene questo pacchetto, riceverai il seguente errore nei log:

    ""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","

    Per includere il pacchetto DeleteQueueCommand e risolvere questo errore, installa la versione più recente del client:

    npm install @aws-sdk/client-connect  
    
  4. Crea un file.zip da caricare sul tuo livello Lambda:

    zip -r ../package.zip ../
  5. (Facoltativo) Verifica la versione dell'SDK AWS che hai installato:

    cat package-lock.json

    Otterrai un output simile al seguente:

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

Usa AWS CLI per creare un livello Lambda e aggiungerlo alla funzione

  1. Per creare un nuovo livello Lambda che includa l'ultima versione dell'SDK AWS che desideri utilizzare, esegui il comando publish-layer-version seguente:

    Nota: sostituisci node_sdk con il nome del livello e My layer con una descrizione del livello. Inoltre, sostituisci il valore compatible-runtimes con il runtime che utilizzi e region con la Regione AWS che contiene la funzione e il livello.

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

    Annota il valore LayerVersionArn nell'output del comando per utilizzarlo al passaggio successivo.

  2. Per aggiungere il livello alla funzione, esegui il comando update-function-configuration seguente:

    Nota: sostituisci my-function con il nome della tua funzione, arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 con il valore LayerVersionArn dell'output e region con la tua Regione.

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

    Per ulteriori informazioni, consulta la pagina Lavorare con i livelli Lambda.

Usa la console Lambda per creare un livello Lambda e aggiungerlo alla funzione

  1. Apri la pagina Livelli nella console Lambda.
  2. Scegli Crea livello. Inserisci i seguenti valori:
    In Nome, inserisci un nome per il nuovo livello.
    (Facoltativo) In Descrizione - facoltativo, inserisci una descrizione del livello.
    Scegli Carica un file .zip.
    Scegli Carica. Quindi, scegli il nome del file .zip del pacchetto di implementazione.
    (Facoltativo) Per Runtime compatibili - facoltativo, scegli uno o più runtime compatibili. 
    (Facoltativo) Per Licenza - facoltativo, inserisci tutte le informazioni sulla licenza software applicabile per il livello.
  3. Scegli Crea.
  4. Apri la pagina Funzioni nella console Lambda, quindi scegli il nome della funzione a cui vuoi aggiungere il livello.
  5. Sotto Panoramica della funzione, scegli Livelli.
  6. Scegli Aggiungi un livello.
  7. In Scegli un livello, seleziona Livelli personalizzati. Quindi, scegli i seguenti valori:
    Il nome del livello
    La versione del livello
  8. Scegli Aggiungi.

(Facoltativo) Verifica la configurazione

Completa i passaggi nella sezione (Facoltativo) Conferma la versione dell'SDK AWS utilizzata dalla tua funzione per richiamare la funzione. La funzione restituisce la versione dell'SDK AWS in uso.

Puoi anche verificare la versione più recente dell'SDK AWS nel file CHANGELOG dell'SDK AWS in uso. Per ulteriori informazioni, consulta la pagina Change log per AWS SDK per JavaScript o la pagina Change log per AWS SDK V3 per Javascript sul sito web di GitHub.

Informazioni correlate

Modello di programmazione Lambda 

Best practice per utilizzare le funzioni AWS Lambda

Come posso creare un pacchetto di implementazione Lambda per Node.js?

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa