Utilisation de couches pour les fonctions Lambda Node.js - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de couches pour les fonctions Lambda Node.js

Utilisez les couches Lambda pour empaqueter le code et les dépendances que vous souhaitez réutiliser dans plusieurs fonctions. Les couches contiennent généralement des dépendances de bibliothèque, une exécution personnalisée, ou des fichiers de configuration. La création d’une couche implique trois étapes générales :

  1. Empaquetez le contenu de votre couche. Cela signifie créer une archive de fichiers .zip contenant les dépendances que vous souhaitez utiliser dans vos fonctions.

  2. Créez la couche dans Lambda.

  3. Ajoutez la couche à vos fonctions.

Empaqueter le contenu de votre couche

Pour créer une couche, regroupez vos packages dans une archive de fichier .zip répondant aux exigences suivantes :

  • Créez la couche en utilisant la même version de Node.js que celle que vous prévoyez d'utiliser pour la fonction Lambda. Par exemple, si vous créez votre couche à l'aide de Node.js 22, utilisez le runtime Node.js 22 pour votre fonction.

  • Le fichier .zip de votre couche doit utiliser l'une des structures de répertoires suivantes :

    • nodejs/node_modules

    • nodejs/nodeX/node_modules(où se X trouve votre version de Node.js, par exemplenode22)

    Pour de plus amples informations, veuillez consulter Chemins d’accès de couche pour chaque exécution Lambda.

  • Les packages de votre couche doivent être compatibles avec Linux. Les fonctions Lambda s'exécutent sur Amazon Linux.

  • Si votre couche inclut des fichiers binaires ou exécutables natifs, ils doivent cibler la même architecture (x86_64 ou arm64) que votre fonction.

Vous pouvez créer des couches contenant des bibliothèques Node.js tierces installées avec npm (telles que axios oulodash) ou vos propres JavaScript modules.

Pour créer une couche à l'aide de packages npm
  1. Créez la structure de répertoire requise et installez les packages directement dans celle-ci :

    mkdir -p nodejs npm install --prefix nodejs lodash axios

    Cette commande installe les packages directement dans le nodejs/node_modules répertoire, qui correspond à la structure requise par Lambda.

    Note

    Pour les packages avec des dépendances natives ou des composants binaires (tels que sharp ou bcrypt), assurez-vous qu'ils sont compatibles avec l'environnement Lambda Linux et l'architecture de votre fonction. Vous devrez peut-être utiliser le --platform drapeau :

    npm install --prefix nodejs --platform=linux --arch=x64 sharp

    Pour les dépendances natives plus complexes, vous devrez peut-être les compiler dans un environnement Linux qui correspond au runtime Lambda. Vous pouvez utiliser Docker à cette fin.

  2. Compressez le contenu de la couche :

    Linux/macOS
    zip -r layer.zip nodejs/
    PowerShell
    Compress-Archive -Path .\nodejs -DestinationPath .\layer.zip

    La structure de répertoire de votre fichier .zip doit ressembler à ceci :

    nodejs/              
    └── node_modules/
        ├── lodash/
        ├── axios/
        └── (dependencies of the other packages)
    Note

    Assurez-vous que votre fichier .zip inclut le nodejs répertoire au node_modules niveau racine. Cette structure permet à Lambda de localiser et d'importer vos packages.

Pour créer une couche à l'aide de votre propre code
  1. Créez la structure de répertoire requise pour votre couche :

    mkdir -p nodejs/node_modules/validator
  2. Créez un package.json fichier pour votre module personnalisé afin de définir la manière dont il doit être importé :

    Exemple package.json
    { "name": "validator", "version": "1.0.0", "type": "module", "main": "index.mjs" }
  3. Créez le fichier JavaScript de votre module :

    Exemple nodejs/node_modules/validator/index.mjs
    export function validateOrder(orderData) { // Validates an order and returns formatted data const requiredFields = ['productId', 'quantity']; // Check required fields const missingFields = requiredFields.filter(field => !(field in orderData)); if (missingFields.length > 0) { throw new Error(`Missing required fields: ${missingFields.join(', ')}`); } // Validate quantity const quantity = orderData.quantity; if (!Number.isInteger(quantity) || quantity < 1) { throw new Error('Quantity must be a positive integer'); } // Format and return the validated data return { productId: String(orderData.productId), quantity: quantity, shippingPriority: orderData.priority || 'standard' }; } export function formatResponse(statusCode, body) { // Formats the API response return { statusCode: statusCode, body: JSON.stringify(body) }; }
  4. Compressez le contenu de la couche :

    Linux/macOS
    zip -r layer.zip nodejs/
    PowerShell
    Compress-Archive -Path .\nodejs -DestinationPath .\layer.zip

    La structure de répertoire de votre fichier .zip doit ressembler à ceci :

    nodejs/              
    └── node_modules/
        └── validator/
            ├── package.json
            └── index.mjs
  5. Dans votre fonction, importez et utilisez les modules. Exemple :

    import { validateOrder, formatResponse } from 'validator'; export const handler = async (event) => { try { // Parse the order data from the event body const orderData = JSON.parse(event.body || '{}'); // Validate and format the order const validatedOrder = validateOrder(orderData); return formatResponse(200, { message: 'Order validated successfully', order: validatedOrder }); } catch (error) { if (error instanceof Error && error.message.includes('Missing required fields')) { return formatResponse(400, { error: error.message }); } return formatResponse(500, { error: 'Internal server error' }); } };

    Vous pouvez utiliser l'événement de test suivant pour appeler la fonction :

    { "body": "{\"productId\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }

    Réponse attendue :

    { "statusCode": 200, "body": "{\"message\":\"Order validated successfully\",\"order\":{\"productId\":\"ABC123\",\"quantity\":2,\"shippingPriority\":\"express\"}}" }

Création de la couche dans Lambda

Vous pouvez publier votre couche à l'aide de la console Lambda AWS CLI ou de la console Lambda.

AWS CLI

Exécutez la publish-layer-version AWS CLI commande pour créer la couche Lambda :

aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes nodejs22.x

Le paramètre d'exécution compatible est facultatif. Lorsqu'il est spécifié, Lambda utilise ce paramètre pour filtrer les couches dans la console Lambda.

Console
Pour créer une couche (console)
  1. Ouvrez la page Couches de la console Lambda.

  2. Sélectionnez Créer un calque.

  3. Choisissez Charger un fichier .zip, puis chargez l'archive .zip que vous avez créée précédemment.

  4. (Facultatif) Pour les environnements d'exécution compatibles, choisissez le runtime Node.js qui correspond à la version de Node.js que vous avez utilisée pour créer votre couche.

  5. Choisissez Créer.

Ajoutez la couche à votre fonction

AWS CLI

Pour associer la couche à votre fonction, exécutez la update-function-configuration AWS CLI commande. Pour le --layers paramètre, utilisez l'ARN de la couche. L'ARN doit spécifier la version (par exemple,arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1). Pour de plus amples informations, veuillez consulter Couches et versions de couches.

aws lambda update-function-configuration --function-name my-function --cli-binary-format raw-in-base64-out --layers "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1"

L'cli-binary-formatoption est obligatoire si vous utilisez AWS CLI la version 2. Pour faire de ce paramètre le paramètre par défaut, exécutez aws configure set cli-binary-format raw-in-base64-out. Pour plus d’informations, consultez les options de ligne de commande globales AWS CLI prises en charge dans le Guide de l’utilisateur AWS Command Line Interface version 2.

Console
Pour ajouter une couche à une fonction
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez la fonction.

  3. Faites défiler jusqu’à la section Couches, puis choisissez Ajouter une couche.

  4. Sous Choisir une couche, sélectionnez Couches personnalisées, puis choisissez votre couche.

    Note

    Si vous n'avez pas ajouté d'environnement d'exécution compatible lors de la création de la couche, celle-ci ne sera pas répertoriée ici. Vous pouvez plutôt spécifier l'ARN de la couche.

  5. Choisissez Ajouter.

Exemple d'application

Pour d'autres exemples d'utilisation des couches Lambda, consultez l'exemple d'application layer-nodejs dans le référentiel du Developer Guide. AWS Lambda GitHub Cette application inclut une couche qui contient la bibliothèque Lodash. Après avoir créé la couche, vous pouvez déployer et invoquer la fonction correspondante pour confirmer que la couche fonctionne comme prévu.