Comment utiliser des couches pour intégrer la dernière version d’AWS SDK pour JavaScript dans ma fonction Lambda Node.js ?

Lecture de 7 minute(s)
0

Certaines fonctionnalités de la dernière version d’un kit AWS SDK sont manquantes dans l’environnement d’exécution AWS Lambda. Je souhaite intégrer la dernière version d’AWS SDK pour JavaScript dans ma fonction Lambda Node.js.

Brève description

Pour intégrer la dernière version d’un kit AWS SDK dans le package de déploiement de votre fonction Lambda, créez une couche Lambda. Ajoutez ensuite cette couche à votre fonction. Pour créer une couche Lambda et l’ajouter à votre fonction, utilisez l’interface de la ligne de commande AWS (AWS CLI) ou la console Lambda.

Remarque : pour les versions 16 et antérieures de Node.js, les exécutions Lambda Node.js incluaient le kit AWS SDK pour JavaScript version 2. Pour les versions 18 et ultérieures de Node.js, les exécutions Lambda Node.js incluent le kit AWS SDK pour JavaScript version 3. Pour en savoir plus, consultez la page Exécution Node.js 18.x désormais disponible dans AWS Lambda.

Pour obtenir la liste complète des exécutions et des versions des kits AWS SDK utilisés par Lambda, consultez la page Environnements d’exécution Lambda.

Remarque : la résolution suivante augmente la taille du package de déploiement de votre fonction. Pour en savoir plus sur les quotas de stockage Lambda, consultez la page Quotas Lambda.

Résolution

Remarque : si vous recevez des messages d’erreur lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs AWS CLI. Vérifiez également que vous utilisez la version la plus récente d’AWS CLI.

(Facultatif) Identification de la version du kit AWS SDK utilisé par votre fonction

Pour connaître la version du kit AWS SDK utilisé par votre fonction, procédez comme suit :

Remarque : cette méthode doit uniquement être utilisée pour les versions 16 et antérieures de Node.js. 

  1. Créez une fonction dans la console Lambda.

  2. Mettez à jour le code de la fonction pour renvoyer la version du kit AWS SDK que la fonction utilise lorsque vous invoquez celle-ci :

    const AWS = require('aws-sdk')   
    exports.handler = async (event) => {  
    return AWS.VERSION;  
    };
  3. Invoquez votre fonction.

  4. Comparez la version du kit AWS SDK renvoyée par votre fonction avec la dernière version du kit AWS SDK répertoriée dans la documentation AWS SDK.

Installation et mise en package de la dernière version du kit AWS SDK

Remarque : les packages de déploiement doivent être compatibles avec l’exécution Lambda que vous utilisez. Il est recommandé d’utiliser le même système d’exploitation (OS) pour votre exécution que celui spécifié dans la section Environnements d’exécution Lambda. Par exemple, vous devez lancer une instance Amazon Elastic Compute Cloud (Amazon EC2) compatible.

Dans un environnement de développement local compatible avec Lambda, procédez comme suit :

  1. Exécutez la commande suivante pour créer un répertoire de travail :

    mkdir -p aws-sdk-layer/nodejs
  2. Exécutez la commande suivante pour accéder au répertoire de travail :

    cd aws-sdk-layer/nodejs
  3. Installez le kit AWS SDK pour votre version d’exécution de Node.js :
    Node.js 16 et versions antérieures (AWS SDK version 2)
    Pour installer la dernière version du kit AWS SDK version 2, utilisez une instance compatible avec Amazon Linux 2 afin d’exécuter la commande suivante :

    npm install aws-sdk

    Pour en savoir plus, consultez la page Tutoriel : Configuration de Node.js sur une instance Amazon EC2.

    Remarque : il est recommandé d’utiliser un environnement Amazon Linux 2 lors du développement de ressources Lambda.

    -ou-

    Si vous utilisez un système d’exploitation Windows ou macOS pour le développement, utilisez Docker pour exécuter la commande suivante :

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

    Remarque : avant d’exécuter cette commande, consultez le site Web de Docker pour vérifier que vous utilisez la version la plus récente de Docker.

    Node.js 18 et versions ultérieures (AWS SDK version 3)

    Consultez la page Installation du SDK pour JavaScript.

    Si vous importez une commande AWS SDK qui n’existe pas dans la version de kit SDK intégrée à Lambda, l’erreur suivante peut survenir :

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

    Dans ce cas, vous devez installer le package en question afin de pouvoir l’utiliser dans votre fonction. Vous pouvez par exemple utiliser l’instruction d’importation suivante :

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

    Dans ce cas, vous devez installer le client mis à jour afin de pouvoir utiliser le package en question dans votre fonction.

    Vous pouvez par exemple utiliser l’instruction d’importation suivante dans une fonction Lambda avec Node.js version 18 ou ultérieure :

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

    Si ce package ne figure pas dans votre version actuelle du kit AWS SDK, l’erreur suivante s’affichera dans vos journaux :

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

    Pour inclure le package DeleteQueueCommand et corriger cette erreur, installez la dernière version du client :

    npm install @aws-sdk/client-connect  
    
  4. Créez un fichier .zip à charger sur votre couche Lambda :

    zip -r ../package.zip ../
  5. (Facultatif) Vérifiez la version du kit AWS SDK que vous avez installé :

    cat package-lock.json

    Vous obtiendrez un résultat similaire à l’exemple suivant :

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

Utilisation d’AWS CLI pour créer une couche Lambda et l’ajouter à votre fonction

  1. Pour créer une nouvelle couche Lambda qui inclut la dernière version du kit AWS SDK que vous souhaitez utiliser, exécutez la commande publish-layer-version suivante :

    Remarque : remplacez node_sdk par le nom de votre couche et My layer par une description de la couche. Remplacez également la valeur compatible-runtimes par l’exécution que vous utilisez et la valeur region par la région AWS dans laquelle se trouvent votre fonction et votre couche.

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

    Prenez note de la valeur LayerVersionArn qui se trouve dans la sortie de commande pour pouvoir l’utiliser à l’étape suivante.

  2. Pour ajouter la couche à votre fonction, exécutez la commande update-function-configuration suivante :

    Remarque : remplacez les valeurs my-function par le nom de votre fonction, arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 par la valeur LayerVersionArn de votre sortie et region par votre région.

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

    Pour en savoir plus, consultez la page Utilisation des couches Lambda.

Utilisation de la console Lambda pour créer une couche Lambda et l’ajouter à votre fonction

  1. Ouvrez la page Couches de la console Lambda.
  2. Choisissez Créer une couche. Renseignez ensuite les valeurs suivantes :
    Dans le champ Nom, saisissez un nom pour la nouvelle couche.
    (Facultatif) Dans le champ Description, saisissez une description pour la couche.
    Choisissez Charger un fichier .zip.
    Choisissez Charger. Choisissez ensuite le nom du fichier .zip de votre package de déploiement.
    (Facultatif) Dans le champ Exécutions compatibles, choisissez une ou plusieurs exécutions compatibles. 
    (Facultatif) Dans le champ Licence, saisissez toutes les informations de licence logicielle applicables à la couche.
  3. Choisissez Créer.
  4. Ouvrez la page Fonctions de la console Lambda, puis choisissez le nom de la fonction à laquelle vous souhaitez ajouter la couche.
  5. Sous Présentation de la fonction, choisissez Couches.
  6. Choisissez Ajouter une couche.
  7. Sous Choisir une couche, choisissez Couches personnalisées. Choisissez ensuite les valeurs suivantes :
    Le nom de la couche
    La version de la couche
  8. Choisissez Ajouter.

(Facultatif) Test de la configuration

Suivez les étapes décrites dans la section (Facultatif) Identification de la version du kit AWS SDK utilisé par votre fonction pour invoquer votre fonction. La fonction renvoie la version du kit AWS SDK qu’elle utilise.

Vous pouvez également vérifier la dernière version du kit AWS SDK dans le fichier CHANGELOG du kit AWS SDK que vous utilisez. Pour en savoir plus, consultez la page Changelog pour AWS SDK pour JavaScript ou Changelog pour AWS SDK V3 pour Javascript du site Web GitHub.

Informations connexes

Modèle de programmation Lambda 

Bonnes pratiques d’utilisation des fonctions AWS Lambda

Comment créer un package de déploiement Lambda pour Node.js ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois