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.
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.
-
Ajouter 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 Python 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 :
-
Python 3.13
et le programme d'installation du package pip
Tout au long de cette rubrique, nous faisons référence à l'layer-python
L’exemple d’application layer-python
contient deux exemples :
-
Le premier exemple consiste à empaqueter la bibliothèque
requests
dans une couche Lambda. Le répertoire layer/
contient les scripts permettant de générer la couche. Le répertoirefunction/
contient un exemple de fonction permettant de vérifier le fonctionnement de la couche. Ce tutoriel explique principalement comment créer et empaqueter cette couche. -
Le deuxième exemple consiste à empaqueter la bibliothèque
numpy
dans une couche Lambda. Le répertoire layer-numpy/
contient les scripts permettant de générer la couche. Le répertoirefunction-numpy/
contient un exemple de fonction permettant de vérifier le fonctionnement de la couche. Pour voir un exemple de création et d’empaquetage de cette couche, consultez Utiliser les distributions de roues manylinux.
Compatibilité de la couche Python avec Amazon Linux
La première étape de la création d’une couche consiste à regrouper l’ensemble du contenu de la couche dans une archive de fichiers .zip. Parce que les fonctions Lambda s’exécutent sur Amazon Linux, le contenu de votre couche doit pouvoir être compilé et construit dans un environnement Linux.
En Python, la plupart des packages sont disponibles sous forme de roues.whl
) en plus de la distribution source. Chaque roue est un type de distribution intégrée qui prend en charge une combinaison spécifique de versions de Python, de systèmes d’exploitation et de jeux d’instructions machine.
Les roues sont utiles pour garantir la compatibilité de votre couche avec Amazon Linux. Lorsque vous téléchargez vos dépendances, téléchargez la roue universelle si possible. (Par défaut, pip
installe la roue universelle si elle est disponible.) La roue universelle contient any
en tant que balise de plateforme, ce qui indique qu’elle est compatible avec toutes les plateformes, y compris Amazon Linux.
Dans l’exemple suivant, vous empaquetez la bibliothèque requests
dans une couche Lambda. La bibliothèque requests
est un exemple de package disponible sous forme de roue universelle.
Tous les packages Python ne sont pas distribués sous forme de roues universelles. Par exemple, numpy
manylinux
afin de garantir la compatibilité avec Amazon Linux. Pour obtenir des instructions détaillées sur l’empaquetage de ces couches, consultez Utiliser les distributions de roues manylinux.
Dans de rares cas, un package Python peut ne pas être disponible sous forme de roue. Si seule la distribution source
Chemins d’accès de couche des environnements d’exécution Python
Lorsque vous ajoutez une couche à une fonction, Lambda charge le contenu de la couche dans le répertoire /opt
de cet environnement d’exécution. Pour chaque exécution Lambda, la variable PATH
inclut déjà des chemins de dossiers spécifiques dans le répertoire /opt
. Pour que Lambda récupère le contenu de votre couche, les dépendances de votre fichier .zip de couche doivent se trouver dans les chemins de dossier suivants :
-
python
-
python/lib/python3.
x
/site-packages
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
└ python
└ lib
└ python3.13
└ site-packages
└ requests
└ <other_dependencies> (i.e. dependencies of the requests package)
└ ...
La bibliothèque requests
python/lib/python3.13/site-packages
. 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 requests
Python 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
aws-lambda-developer-guide
GitHub dépôt, qui contient l'exemple de code dont vous avez besoin dans le sample-apps/layer-python
répertoire.git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
-
Accédez au répertoire
layer
de l’exemple d’applicationlayer-python
. 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-python/layer
-
Examinez le fichier
requirements.txt
. Ce fichier définit les dépendances que vous souhaitez inclure dans la couche, à savoir la bibliothèque requests
. Vous pouvez mettre à jour ce fichier pour inclure les dépendances que vous souhaitez inclure dans votre propre couche.Exemple requirements.txt
requests==2.31.0
-
Vérifiez que vous êtes autorisé à exécuter les deux scripts.
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 utilise
venv
pour créer un environnement virtuel Python nommécreate_layer
. Il installe ensuite toutes les dépendances requises dans le répertoirecreate_layer/lib/python3.11/site-packages
.Exemple 1-install.sh
python3.13 -m venv create_layer source create_layer/bin/activate pip install -r requirements.txt
-
Exécutez le script
2-package.sh
à l’aide de la commande suivante : ./2-package.sh
Ce script copie le contenu du répertoire
create_layer/lib
dans un nouveau répertoire nommépython
. Compressez le contenu du répertoirepython
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 Python.Exemple 2-package.sh
mkdir python cp -r create_layer/lib python/ zip -r layer_content.zip python
Création de la couche
Dans cette section, vous allez prendre le fichier layer_content.zip
que vous avez généré dans la section précédente et le charger en tant que couche Lambda. Vous pouvez télécharger une couche à l'aide de l'API Lambda AWS Management Console ou de l'API Lambda via le AWS Command Line Interface ()AWS CLI. Lorsque vous téléchargez le fichier .zip de votre couche, dans la PublishLayerVersion AWS CLI commande suivante, spécifiez python3.13
comme environnement d'exécution compatible et arm64
comme architecture compatible.
aws lambda publish-layer-version --layer-name python-requests-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes python3.13 \ --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:python-requests-layer:1
Ajout de la couche à votre fonction
Dans cette section, vous déployez un exemple de fonction Lambda qui utilise la bibliothèque requests
dans son code de fonction, puis vous attachez la couche. Pour déployer la fonction, vous avez besoin d’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.
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 AWSLambdaBasicExecutionRolepolitique dispose des autorisations dont la fonction a besoin pour écrire des CloudWatch journaux dans Logs.
-
Le code de fonctionrequests
, effectue une simple requête HTTP, puis renvoie le code d’état et le corps.
import requests
def lambda_handler(event, context):
print(f"Version of requests library: {requests.__version__}")
request = requests.get('https://api.github.com/')
return {
'statusCode': request.status_code,
'body': request.text
}
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
-
Créez un package de déploiement sous forme de fichier .zip à l’aide de la commande suivante :
zip my_deployment_package.zip lambda_function.py
-
Déployez la fonction. Dans la AWS CLI commande suivante, remplacez le
--role
paramètre par l'ARN de votre rôle d'exécution :aws lambda create-function --function-name python_function_with_layer \ --runtime python3.13 \ --architectures "arm64" \ --handler lambda_function.lambda_handler \ --role
arn:aws:iam::123456789012:role/lambda-role
\ --zip-file fileb://my_deployment_package.zip -
Attachez ensuite la couche à votre fonction. Dans la AWS CLI commande suivante, remplacez le
--layers
paramètre par l'ARN de la version de couche que vous avez indiqué précédemment :aws lambda update-function-configuration --function-name python_function_with_layer \ --cli-binary-format raw-in-base64-out \ --layers "
arn:aws:lambda:us-east-1:123456789012:layer:python-requests-layer:1
" -
Enfin, essayez d'appeler votre fonction à l'aide de la AWS CLI commande suivante :
aws lambda invoke --function-name python_function_with_layer \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' 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 AWS les ressources que vous n'utilisez plus, vous évitez des frais inutiles 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
confirm
dans la zone de saisie de texte et choisissez Delete (Supprimer).
Utiliser les distributions de roues manylinux
Parfois, un package que vous souhaitez inclure en tant que dépendance n’aura pas de roue universelle (plus précisément, il n’aura pas any
en tant que balise de plateforme). Dans ce cas, téléchargez la roue qui prend en charge manylinux
à la place. Cela garantit que vos bibliothèques de couches sont compatibles avec Amazon Linux.
numpy
numpy
dans votre couche, vous pouvez suivre les exemples d’étapes suivants pour installer et empaqueter correctement votre couche.
Pour installer et empaqueter le contenu de votre couche
-
Clonez le
aws-lambda-developer-guide
GitHub dépôt, qui contient l'exemple de code dont vous avez besoin dans le sample-apps/layer-python
répertoire.git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
-
Accédez au répertoire
layer-numpy
de l’exemple d’applicationlayer-python
. 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-python/layer-numpy
-
Examinez le fichier
requirements.txt
. Ce fichier définit les dépendances que vous souhaitez inclure dans votre couche, à savoir la bibliothèque numpy
. Vous spécifiez ici l’URL de la distribution de rouemanylinux
compatible avec Python 3.11, Amazon Linux et le jeu d’instructionsx86_64
:Exemple requirements.txt
https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
-
Vérifiez que vous êtes autorisé à exécuter les deux scripts.
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 utilise
venv
pour créer un environnement virtuel Python nommécreate_layer
. Il installe ensuite toutes les dépendances requises dans le répertoirecreate_layer/lib/python3.11/site-packages
. La commandepip
est différente dans ce cas, car vous devez spécifier la balise--platform
en tant quemanylinux2014_x86_64
. Cela indique àpip
d’installer la bonne rouemanylinux
, même si votre machine locale utilise macOS ou Windows.Exemple 1-install.sh
python3.11 -m venv create_layer source create_layer/bin/activate pip install -r requirements.txt --platform=manylinux2014_x86_64 --only-binary=:all: --target ./create_layer/lib/python3.11/site-packages
-
Exécutez le script
2-package.sh
à l’aide de la commande suivante : ./2-package.sh
Ce script copie le contenu du répertoire
create_layer/lib
dans un nouveau répertoire nommépython
. Compressez le contenu du répertoirepython
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 Python.Exemple 2-package.sh
mkdir python cp -r create_layer/lib python/ zip -r layer_content.zip python
Pour télécharger cette couche sur Lambda, utilisez la commande suivante : PublishLayerVersion AWS CLI
aws lambda publish-layer-version --layer-name python-numpy-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes python3.11 \ --compatible-architectures "x86_64"
Dans la réponse, notez le LayerVersionArn
, qui ressemble à arn:aws:lambda:us-east-1:
. Pour vérifier que votre couche fonctionne comme prévu, déployez la fonction Lambda dans le répertoire 123456789012
:layer:python-numpy-layer:1function-numpy
.
Pour déployer la fonction Lambda
-
Accédez au répertoire
function-numpy/
. Si vous êtes actuellement dans le répertoirelayer-numpy/
, exécutez la commande suivante :cd ../function-numpy
-
Passez en revue le code de la fonction
. La fonction importe la bibliothèque numpy
, crée un tableaunumpy
simple, puis renvoie un code d’état et un corps fictifs.import json import numpy as np def lambda_handler(event, context): x = np.arange(15, dtype=np.int64).reshape(3, 5) print(x) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
-
Créez un package de déploiement sous forme de fichier .zip à l’aide de la commande suivante :
zip my_deployment_package.zip lambda_function.py
-
Déployez la fonction. Dans la AWS CLI commande suivante, remplacez le
--role
paramètre par l'ARN de votre rôle d'exécution :aws lambda create-function --function-name python_function_with_numpy \ --runtime python3.11 \ --handler lambda_function.lambda_handler \
--role arn:aws:iam::123456789012:role/lambda-role
\ --zip-file fileb://my_deployment_package.zip -
Attachez ensuite la couche à votre fonction. Dans la AWS CLI commande suivante, remplacez le
--layers
paramètre par l'ARN de la version de votre couche :aws lambda update-function-configuration --function-name python_function_with_numpy \ --cli-binary-format raw-in-base64-out \ --layers "
arn:aws:lambda:us-east-1:123456789012:layer:python-requests-layer:1
" -
Enfin, essayez d'appeler votre fonction à l'aide de la AWS CLI commande suivante :
aws lambda invoke --function-name python_function_with_numpy \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json
Vous devriez obtenir un résultat du type suivant :
{ "StatusCode": 200, "ExecutedVersion": "$LATEST" }
Vous pouvez examiner les journaux des fonctions pour vérifier que le code imprime le tableau
numpy
sur la sortie standard.