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
Une couche Lambda est une archive de fichier .zip qui contient du code ou des données supplémentaires. 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 :
-
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.
-
Créez la couche dans Lambda.
-
Ajoutez la couche à vos fonctions.
Cette rubrique contient des étapes et des conseils sur la manière d’empaqueter et de créer correctement une couche Lambda Node.js avec des dépendances de bibliothèque externes.
Rubriques
Prérequis
Pour suivre les étapes de cette section, vous devez disposer des éléments suivants :
-
Node.js 20
et le gestionnaire de packages npm . Pour plus d’informations sur l’installation de Node.js, consultez Installing Node.js via package manager dans la documentation Node.js.
Tout au long de cette rubrique, nous faisons référence à l’exemple d’application layer-nodejs
L’exemple d’application layer-nodejs
va empaqueter la bibliothèque lodashlayer
contient les scripts permettant de générer la couche. Le répertoire function
contient un exemple de fonction permettant de vérifier le fonctionnement de la couche. Ce document explique comment créer, empaqueter, déployer et tester cette couche.
Compatibilité de la couche Node.js avec l’environnement d’exécution Lambda
Lorsque vous empaquetez du code dans une couche Node.js, vous spécifiez les environnements d’exécution Lambda avec lesquelles le code est compatible. Pour évaluer la compatibilité du code avec un environnement d’exécution, déterminez les versions de Node.js, les systèmes d’exploitation et les architectures de jeu d’instructions pour lesquelles le code est conçu.
Les environnements d’exécution Lambda Node.js spécifient leur version Node.js et leur système d’exploitation. Dans ce document, vous allez utiliser l’environnement d’exécution Node.js 20, basée sur AL2023. Pour plus d’informations sur les versions d’environnements d’exécution, consultez Environnements d'exécution pris en charge. Lorsque vous créez cette fonction Lambda, vous pouvez spécifier l’architecture de l’ensemble des instructions. Dans ce document, vous utiliserez l’architecture arm64
. Pour plus d’informations sur les architectures dans Lambda, consultez Sélection et configuration d’une architecture de jeu d’instructions pour votre fonction Lambda.
Lorsque vous utilisez le code fourni dans un package, chaque responsable du package définit indépendamment sa compatibilité. La plupart des développements Node.js sont conçus pour fonctionner indépendamment du système d’exploitation et de l’architecture du jeu d’instructions. De plus, il n’est pas courant de rompre les incompatibilités avec les nouvelles versions de Node.js. Attendez-vous à passer plus de temps à évaluer la compatibilité entre les packages qu’à évaluer la compatibilité des packages avec la version de Node.js, le système d’exploitation ou l’architecture du jeu d’instructions.
Parfois, les packages Node.js incluent du code compilé, ce qui vous oblige à prendre en compte la compatibilité du système d’exploitation et de l’architecture du jeu d’instructions. Si vous devez évaluer la compatibilité du code de vos packages, il est nécessaire d’inspecter les packages et leur documentation. Dans NPM, les packages peuvent spécifier leur compatibilité via les champs engines
, os
et cpu
de leur fichier manifeste package.json
. Pour plus d’informations sur les fichiers package.json
, consultez package.json
Chemins d’accès de couche des environnements d’exécution Node.js
Lorsque vous ajoutez une couche à une fonction, Lambda charge le contenu de la couche dans l’environnement d’exécution. Si votre couche regroupe les dépendances dans des chemins de dossier spécifiques, l’environnement d’exécution Node.js reconnaîtra les modules et vous pourrez les référencer à partir de votre code de fonction.
Pour vous assurer que vos modules sont sélectionnés, empaquez-les dans le fichier .zip de votre couche dans l’un des chemins de dossier suivants. Ces fichiers sont stockés dans /opt
et les chemins d’accès aux dossiers sont chargés dans la variable d’environnement PATH
.
nodejs/node_modules
nodejs/node
X
/node_modules
Par exemple, le fichier de couche .zip obtenu que vous créez dans ce tutoriel possède la structure de répertoire suivante :
layer_content.zip
└ nodejs
└ node20
└ node_modules
└ lodash
└ <other potential dependencies>
└ ...
Vous allez placer la bibliothèque lodash
nodejs/node20/node_modules
. Cela garantit que Lambda peut localiser la bibliothèque lors des appels de fonctions.
Empaquetage du contenu de la couche
Dans cet exemple, vous allez empaqueter la bibliothèque lodash
dans un fichier .zip de couche. Pour installer et empaqueter le contenu de la couche, complétez les étapes suivantes.
Pour installer et empaqueter le contenu de votre couche
-
Clonez le référentiel aws-lambda-developer-guide
depuis GitHub, qui contient l’exemple de code dont vous avez besoin dans le répertoire sample-apps/layer-nodejs
.git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
-
Accédez au répertoire
layer
de l’exemple d’applicationlayer-nodejs
. Ce répertoire contient les scripts que vous utilisez pour créer et empaqueter correctement la couche.cd aws-lambda-developer-guide/sample-apps/layer-nodejs/layer
-
Vérifiez les listes
lodash
du fichierpackage.json
. Ce fichier définit les dépendances que vous souhaitez inclure dans la couche. Vous pouvez mettre à jour ce fichier pour inclure toutes les dépendances que vous souhaitez intégrer dans votre couche.Note
Le
package.json
utilisé dans cette étape n’est pas stocké ou utilisé avec vos dépendances après qu’elles aient été chargées dans une couche Lambda. Il n’est utilisé que dans le processus d’empaquetage des couches et ne spécifie aucune commande d’exécution ni aucune compatibilité, comme le ferait le fichier dans une application Node.js ou un package publié. -
Assurez-vous que vous disposez de l’autorisation shell pour exécuter les scripts du répertoire
layer
.chmod 744 1-install.sh && chmod 744 2-package.sh
-
Exécutez le script 1-install.sh
à l’aide de la commande suivante : ./1-install.sh
Ce script exécute
npm install
, qui lit votrepackage.json
et télécharge les dépendances qui y sont définies.Exemple 1-install.sh
npm install .
-
Exécutez le script 2-package.sh
à l’aide de la commande suivante : ./2-package.sh
Ce script copie le contenu du répertoire
node_modules
dans un nouveau répertoire nomménodejs/node20
. Compressez le contenu du répertoirenodejs
dans un fichier nommélayer_content.zip
. Il s’agit du fichier .zip pour votre couche. Vous pouvez décompresser le fichier et vérifier qu’il contient la bonne structure de fichier, comme indiqué dans la section Chemins d’accès de couche des environnements d’exécution Node.js.Exemple 2-package.sh
mkdir -p nodejs/node20 cp -r node_modules nodejs/node20/ zip -r layer_content.zip nodejs
Création de la couche
Prenez le fichier layer_content.zip
que vous avez généré dans la section précédente et chargez-le en tant que couche Lambda. Vous pouvez charger une couche à l’aide de l’AWS Management Console ou de l’API Lambda via l’AWS Command Line Interface (AWS CLI). Lorsque vous chargez le fichier .zip de votre couche, dans la commande PublishLayerVersion de l’AWS CLI suivante, spécifiez nodejs20.x
en tant qu’environnement d’exécution compatible et arm64
en tant qu’architecture compatible.
aws lambda publish-layer-version --layer-name nodejs-lodash-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes nodejs20.x \ --compatible-architectures "arm64"
Dans la réponse, notez le LayerVersionArn
, qui ressemble à arn:aws:lambda:us-east-1:
. Vous aurez besoin de cet Amazon Resource Name (ARN) à l’étape suivante de ce tutoriel, lorsque vous ajouterez la couche à votre fonction.123456789012
:layer:nodejs-lodash-layer:1
Ajout de la couche à votre fonction
Déployez un exemple de fonction Lambda qui utilise la bibliothèque lodash
dans son code de fonction, puis attachez la couche que vous avez créée. Pour déployer la fonction, vous avez besoin d’un rôle d’exécution. Pour en savoir plus, consultez Définition des autorisations de fonction Lambda avec un rôle d’exécution. Si vous ne disposez pas d’un rôle d’exécution existant, suivez les étapes de la section réductible. Sinon, passez à la section suivante pour déployer la fonction.
Pour créer un rôle d’exécution
-
Ouvrez la page Roles (Rôles)
dans la console IAM. -
Sélectionnez Créer un rôle.
-
Créez un rôle avec les propriétés suivantes :
-
Entité de confiance – Lambda.
-
Autorisations – AWSLambdaBasicExecutionRole.
-
Nom de rôle –
lambda-role
.
La stratégie AWSLambdaBasicExecutionRole possède les autorisations dont la fonction a besoin pour écrire des journaux dans CloudWatch Logs.
-
L’exemple de code de fonction_.findLastIndex
pour lire un tableau d’objets. Il compare les objets par rapport à un critère pour trouver l’index d’une correspondance. Il renvoie ensuite l’index et la valeur de l’objet dans la réponse Lambda.
import _ from "lodash" export const handler = async (event) => { var users = [ { 'user': 'Carlos', 'active': true }, { 'user': 'Gil-dong', 'active': false }, { 'user': 'Pat', 'active': false } ]; let out = _.findLastIndex(users, function(o) { return o.user == 'Pat'; }); const response = { statusCode: 200, body: JSON.stringify(out + ", " + users[out].user), }; return response; };
Pour déployer la fonction Lambda
-
Accédez au répertoire
function/
. Si vous êtes actuellement dans le répertoirelayer/
, exécutez la commande suivante :cd ../function-js
-
Créez un package de déploiement sous forme de fichier .zip à l’aide de la commande suivante :
zip my_deployment_package.zip index.mjs
-
Déployez la fonction. Dans la commande AWS CLI suivante, remplacez le paramètre
--role
par l’ARN de votre rôle d’exécution :aws lambda create-function --function-name nodejs_function_with_layer \ --runtime nodejs20.x \ --architectures "arm64" \ --handler index.handler \ --role
arn:aws:iam::123456789012:role/lambda-role
\ --zip-file fileb://my_deployment_package.zip -
Attachez la couche à votre fonction. Dans la commande AWS CLI suivante, remplacez le paramètre
--layers
par l’ARN de la version de couche que vous avez indiqué précédemment :aws lambda update-function-configuration --function-name nodejs_function_with_layer \ --cli-binary-format raw-in-base64-out \ --layers "
arn:aws:lambda:us-east-1:123456789012:layer:nodejs-lodash-layer:1
" -
Invoquez votre fonction pour vérifier qu’elle fonctionne à l’aide de la commande AWS CLI suivante :
aws lambda invoke --function-name nodejs_function_with_layer \ --cli-binary-format raw-in-base64-out \ --payload '{}' response.json
Vous devriez obtenir un résultat du type suivant :
{ "StatusCode": 200, "ExecutedVersion": "$LATEST" }
Le fichier de sortie
response.json
contient les détails de la réponse.
Vous pouvez maintenant supprimer les ressources que vous avez créées pour ce didacticiel, sauf si vous souhaitez les conserver. En supprimant des ressources AWS que vous n'utilisez plus, vous évitez les frais superflus pour votre Compte AWS.
Pour supprimer la couche Lambda
-
Ouvrez la page Couches
de la console Lambda. -
Sélectionnez la couche que vous avez créée.
-
Choisissez Supprimer, puis de nouveau Supprimer.
Pour supprimer la fonction Lambda
-
Ouvrez la page Functions (Fonctions)
de la console Lambda. -
Sélectionnez la fonction que vous avez créée.
-
Sélectionnez Actions, Supprimer.
-
Saisissez
delete
dans la zone de saisie de texte et choisissez Delete (Supprimer).