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 en Python
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 :
-
Package le contenu de votre couche. Cela implique de 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 Python avec des dépendances de bibliothèque externes.
Rubriques
Prérequis
Pour suivre les étapes décrites dans cette section, vous devez disposer des éléments suivants :
-
Python 3.11
et le programme d'installation du package pip
Tout au long de cette rubrique, nous faisons référence à l'layer-python
L'layer-python
exemple d'application contient deux exemples :
-
Le premier exemple consiste à empaqueter la
requests
bibliothèque dans une couche Lambda. Le layer/
répertoire contient les scripts permettant de générer la couche. Lefunction/
répertoire contient un exemple de fonction permettant de vérifier le fonctionnement de la couche. La majeure partie de ce didacticiel explique comment créer et empaqueter cette couche. -
Le deuxième exemple consiste à empaqueter la
numpy
bibliothèque dans une couche Lambda. Le layer-numpy/
répertoire contient les scripts permettant de générer la couche. Lefunction-numpy/
répertoire contient un exemple de fonction permettant de vérifier le fonctionnement de la couche. Pour un exemple de création et d'empaquetage de cette couche, consultezUtilisation des distributions manylinux de roues.
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 paquets sont disponibles sous forme de roues.whl
fichiers) 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
une balise de plate-forme, indiquant qu'elle est compatible avec toutes les plateformes, y compris Amazon Linux.
Dans l'exemple suivant, vous allez empaqueter la requests
bibliothèque dans une couche Lambda. La requests
bibliothèque 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
distribution afin de garantir la compatibilité avec Amazon Linux. Pour obtenir des instructions détaillées sur l'empaquetage de telles couches, reportez-vous à la sectionUtilisation des distributions manylinux de roues.
Dans de rares cas, un package Python peut ne pas être disponible sous forme de roue. Si seule la distribution source
Chemins de couche pour les 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 garantir que la PATH
variable capte le contenu de votre couche, le fichier .zip de votre couche doit avoir ses dépendances 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 didacticiel possède la structure de répertoire suivante :
layer_content.zip
└ python
└ lib
└ python3.11
└ site-packages
└ requests
└ <other_dependencies> (i.e. dependencies of the requests package)
└ ...
La requests
python/lib/python3.11/site-packages
répertoire. Cela garantit que Lambda peut localiser la bibliothèque lors des appels de fonctions.
Empaqueter le contenu de la couche
Dans cet exemple, vous allez empaqueter la requests
bibliothèque Python dans un fichier .zip de couche. Procédez comme suit pour installer et empaqueter le contenu de la 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
layer
répertoire de l'layer-python
exemple d'application. 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
requirements.txt
fichier. Ce fichier définit les dépendances que vous souhaitez inclure dans la couche, à savoir la requests
bibliothèque. 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
1-install.sh
script à l'aide de la commande suivante : ./1-install.sh
Ce script permet
venv
de créer un environnement virtuel Python nommécreate_layer
. Il installe ensuite toutes les dépendances requises dans lecreate_layer/lib/python3.11/site-packages
répertoire.Exemple 1-install.sh
python3.11 -m venv create_layer source create_layer/bin/activate pip install -r requirements.txt
-
Exécutez le
2-package.sh
script à l'aide de la commande suivante : ./2-package.sh
Ce script copie le contenu du
create_layer/lib
répertoire dans un nouveau répertoire nommépython
. Il compresse ensuite le contenu dupython
répertoire dans un fichier nommélayer_content.zip
. Il s'agit du fichier .zip de votre couche. Vous pouvez décompresser le fichier et vérifier qu'il contient la bonne structure de fichier, comme indiqué dans la Chemins de couche pour les environnements d'exécution Python section.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 layer_content.zip
fichier que vous avez généré dans la section précédente et le télécharger en tant que couche Lambda. Vous pouvez télécharger une couche à l'aide du AWS Management Console ou du Lambda API 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.11
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.11 \ --compatible-architectures "arm64"
Dans la réponse, notez leLayerVersionArn
, qui ressemble àarn:aws:lambda:us-east-1:
. Vous aurez besoin de cet Amazon Resource Name (ARN) à l'étape suivante de ce didacticiel, lorsque vous ajouterez la couche à votre fonction.123456789012
:layer:python-requests-layer:1
Ajouter la couche à votre fonction
Dans cette section, vous déployez un exemple de fonction Lambda qui utilise la requests
bibliothèque dans son code de fonction, puis vous attachez la couche. Pour déployer la fonction, vous avez besoin d'unDéfinition des autorisations d'une fonction Lambda avec un rôle d'exécution. Si vous n'avez pas de rôle d'exécution existant, suivez les étapes décrites dans la section pliable.
Pour créer un rôle d’exécution
-
Ouvrez la page des rôles
dans la IAM console. -
Choisissez Create role (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
bibliothèque, fait une HTTP demande simple, 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 lelayer/
répertoire, exécutez la commande suivante :cd ../function
-
Créez un package de déploiement de fichiers .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 votre rôle d'exécution ARN :aws lambda create-function --function-name python_function_with_layer \ --runtime python3.11 \ --architectures "arm64" \ --handler lambda_function.lambda_handler \ --role
arn:aws:iam::123456789012:role/lambda-role
\ --zip-file fileb://my_deployment_package.zip -
Ensuite, attachez la couche à votre fonction. Dans la AWS CLI commande suivante, remplacez le
--layers
paramètre par la version de couche ARN que vous avez indiquée 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
response.json
fichier de sortie contient des informations détaillées sur 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 sélectionnez à 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).
Utilisation des distributions manylinux
de roues
Parfois, un package que vous souhaitez inclure en tant que dépendance n'aura pas de roue universelle (en particulier, il n'en a pas any
comme balise de plate-forme). Dans ce cas, téléchargez manylinux
plutôt la roue qui le supporte. Cela garantit que vos bibliothèques de couches sont compatibles avec Amazon Linux.
numpy
numpy
package 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
layer-numpy
répertoire de l'layer-python
exemple d'application. 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
requirements.txt
fichier. Ce fichier définit les dépendances que vous souhaitez inclure dans votre couche, à savoir la numpy
bibliothèque. Ici, vous spécifiez la distribution URL de lamanylinux
roue compatible avec Python 3.11, Amazon Linux et le jeux86_64
d'instructions :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
1-install.sh
script à l'aide de la commande suivante : ./1-install.sh
Ce script permet
venv
de créer un environnement virtuel Python nommécreate_layer
. Il installe ensuite toutes les dépendances requises dans lecreate_layer/lib/python3.11/site-packages
répertoire. Lapip
commande est différente dans ce cas, car vous devez spécifier le--platform
tag commemanylinux2014_x86_64
. Cela indiquepip
d'installer la bonnemanylinux
roue, 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
2-package.sh
script à l'aide de la commande suivante : ./2-package.sh
Ce script copie le contenu du
create_layer/lib
répertoire dans un nouveau répertoire nommépython
. Il compresse ensuite le contenu dupython
répertoire dans un fichier nommélayer_content.zip
. Il s'agit du fichier .zip de votre couche. Vous pouvez décompresser le fichier et vérifier qu'il contient la bonne structure de fichier, comme indiqué dans la Chemins de couche pour les environnements d'exécution Python section.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 leLayerVersionArn
, 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 123456789012
:layer:python-numpy-layer:1function-numpy
répertoire.
Pour déployer la fonction Lambda
-
Accédez au répertoire
function-numpy/
. Si vous êtes actuellement dans lelayer-numpy/
répertoire, exécutez la commande suivante :cd ../function-numpy
-
Vérifiez le code de fonction
. La fonction importe la numpy
bibliothèque, crée unnumpy
tableau 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 de fichiers .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 votre rôle d'exécution ARN :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 -
Ensuite, attachez la couche à votre fonction. Dans la AWS CLI commande suivante, remplacez le
--layers
paramètre par la version de votre couche ARN :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
numpy
tableau conformément à la norme.