Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Utilisation de couches pour les fonctions Lambda Python

Mode de mise au point
Utilisation de couches pour les fonctions Lambda Python - 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.

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 :

  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. 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.

Prérequis

Pour suivre les étapes de cette section, vous devez disposer des éléments suivants :

Tout au long de cette rubrique, nous faisons référence à l'layer-pythonexemple d'application sur le référentiel awsdocs GitHub . Cette application contient des scripts qui téléchargent les dépendances et génèrent les couches. L’application contient également des fonctions correspondantes qui utilisent les dépendances des couches. Après avoir créé une couche, vous pouvez déployer et invoquer la fonction correspondante pour vérifier que tout fonctionne correctement. Le temps d'exécution de la couche doit être compatible avec le temps d'exécution de la fonction. Par exemple, si vous utilisez le runtime Python 3.13 pour votre fonction, votre couche doit également être compatible avec Python 3.13.

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épertoire function/ 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épertoire function-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 (fichiers .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 possède plusieurs distributions de roues, chacune supportant un ensemble différent de plateformes. Pour ce type de packages, téléchargez la distribution 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 (sdist) existe, nous vous recommandons d’installer et d’empaqueter vos dépendances dans un environnement Docker basé sur l’image de conteneur de base Amazon Linux 2023. Nous recommandons également cette approche si vous souhaitez inclure vos propres bibliothèques personnalisées écrites dans d’autres langages tels que C/C++. Cette approche imite l’environnement d’exécution Lambda dans Docker et garantit que les dépendances de vos packages autres que Python sont compatibles avec Amazon Linux.

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 est correctement située dans le répertoire 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
  1. 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
  2. Accédez au répertoire layer de l’exemple d’application layer-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
  3. 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
  4. Vérifiez que vous êtes autorisé à exécuter les deux scripts.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. 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épertoire create_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
  6. 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épertoire python 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:123456789012:layer:python-requests-layer:1. Vous aurez besoin de cet Amazon Resource Name (ARN) à l’étape suivante de ce tutoriel, lorsque vous ajouterez la couche à votre fonction.

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
  1. Ouvrez la page Roles (Rôles) dans la console IAM.

  2. Sélectionnez Créer un rôle.

  3. Créez un rôle avec les propriétés suivantes :

    • Entité de confianceLambda.

    • AutorisationsAWSLambdaBasicExecutionRole.

    • Nom de rôlelambda-role.

    La AWSLambdaBasicExecutionRolepolitique dispose des autorisations dont la fonction a besoin pour écrire des CloudWatch journaux dans Logs.

Pour créer un rôle d’exécution
  1. Ouvrez la page Roles (Rôles) dans la console IAM.

  2. Sélectionnez Créer un rôle.

  3. Créez un rôle avec les propriétés suivantes :

    • Entité de confianceLambda.

    • AutorisationsAWSLambdaBasicExecutionRole.

    • Nom de rôlelambda-role.

    La AWSLambdaBasicExecutionRolepolitique dispose des autorisations dont la fonction a besoin pour écrire des CloudWatch journaux dans Logs.

Le code de fonction Lambda importe la bibliothèque requests, 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
  1. Accédez au répertoire function/. Si vous êtes actuellement dans le répertoire layer/, exécutez la commande suivante :

    cd ../function
  2. 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
  3. 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
  4. 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"
  5. 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
  1. Ouvrez la page Couches de la console Lambda.

  2. Sélectionnez la couche que vous avez créée.

  3. Choisissez Supprimer, puis de nouveau Supprimer.

Pour supprimer la fonction Lambda
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Sélectionnez la fonction que vous avez créée.

  3. Sélectionnez Actions, Supprimer.

  4. Saisissez confirm dans la zone de saisie de texte et choisissez Delete (Supprimer).

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
  1. Ouvrez la page Couches de la console Lambda.

  2. Sélectionnez la couche que vous avez créée.

  3. Choisissez Supprimer, puis de nouveau Supprimer.

Pour supprimer la fonction Lambda
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Sélectionnez la fonction que vous avez créée.

  3. Sélectionnez Actions, Supprimer.

  4. 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 est un package qui n’a pas de roue universelle. Si vous souhaitez inclure le package 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
  1. 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
  2. Accédez au répertoire layer-numpy de l’exemple d’application layer-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
  3. 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 roue manylinux compatible avec Python 3.11, Amazon Linux et le jeu d’instructions x86_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
  4. Vérifiez que vous êtes autorisé à exécuter les deux scripts.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. 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épertoire create_layer/lib/python3.11/site-packages. La commande pip est différente dans ce cas, car vous devez spécifier la balise --platform en tant que manylinux2014_x86_64. Cela indique à pip d’installer la bonne roue manylinux, 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
  6. 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épertoire python 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:123456789012:layer:python-numpy-layer:1. Pour vérifier que votre couche fonctionne comme prévu, déployez la fonction Lambda dans le répertoire function-numpy.

Pour déployer la fonction Lambda
  1. Accédez au répertoire function-numpy/. Si vous êtes actuellement dans le répertoire layer-numpy/, exécutez la commande suivante :

    cd ../function-numpy
  2. Passez en revue le code de la fonction. La fonction importe la bibliothèque numpy, crée un tableau numpy 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!') }
  3. 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
  4. 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
  5. 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"
  6. 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.

Rubrique suivante :

Contexte
ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.