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

Définition du gestionnaire de fonction Lambda en Python

Mode de mise au point
Définition du gestionnaire de fonction Lambda en 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.

Le gestionnaire de fonction Lambda est la méthode dans votre code de fonction qui traite les événements. Lorsque votre fonction est invoquée, Lambda exécute la méthode du gestionnaire. Votre fonction s’exécute jusqu’à ce que le gestionnaire renvoie une réponse, se ferme ou expire.

Cette page explique comment utiliser les gestionnaires de fonctions Lambda en Python, notamment les conventions de dénomination, les signatures de gestionnaires valides et les meilleures pratiques en matière de code. Cette page inclut également un exemple de fonction Lambda Python qui prend des informations sur une commande, produit un reçu sous forme de fichier texte et place ce fichier dans un bucket Amazon Simple Storage Service (Amazon S3).

Exemple de code de fonction Lambda en Python

L'exemple de code de fonction Lambda Python suivant prend en compte les informations relatives à une commande, produit un reçu de fichier texte et place ce fichier dans un compartiment Amazon S3 :

Exemple Fonction Lambda en Python
import json import os import logging import boto3 # Initialize the S3 client outside of the handler s3_client = boto3.client('s3') # Initialize the logger logger = logging.getLogger() logger.setLevel("INFO") def upload_receipt_to_s3(bucket_name, key, receipt_content): """Helper function to upload receipt to S3""" try: s3_client.put_object( Bucket=bucket_name, Key=key, Body=receipt_content ) except Exception as e: logger.error(f"Failed to upload receipt to S3: {str(e)}") raise def lambda_handler(event, context): """ Main Lambda handler function Parameters: event: Dict containing the Lambda function event data context: Lambda runtime context Returns: Dict containing status message """ try: # Parse the input event order_id = event['Order_id'] amount = event['Amount'] item = event['Item'] # Access environment variables bucket_name = os.environ.get('RECEIPT_BUCKET') if not bucket_name: raise ValueError("Missing required environment variable RECEIPT_BUCKET") # Create the receipt content and key destination receipt_content = ( f"OrderID: {order_id}\n" f"Amount: ${amount}\n" f"Item: {item}" ) key = f"receipts/{order_id}.txt" # Upload the receipt to S3 upload_receipt_to_s3(bucket_name, key, receipt_content) logger.info(f"Successfully processed order {order_id} and stored receipt in S3 bucket {bucket_name}") return { "statusCode": 200, "message": "Receipt processed successfully" } except Exception as e: logger.error(f"Error processing order: {str(e)}") raise

Ce fichier comprend les sections suivantes :

Convention de nommage du gestionnaire

Le nom du gestionnaire de fonctions défini au moment de la création d'une fonction Lambda est dérivé de :

  • Nom du fichier dans lequel se trouve la fonction du gestionnaire Lambda.

  • Nom de la fonction du gestionnaire Python.

Dans l'exemple ci-dessus, si le fichier est nommélambda_function.py, le gestionnaire sera spécifié commelambda_function.lambda_handler. Il s'agit du nom de gestionnaire par défaut attribué aux fonctions que vous créez à l'aide de la console Lambda.

Si vous créez une fonction dans la console en utilisant un nom de fichier ou un nom de gestionnaire de fonction différent, vous devez modifier le nom du gestionnaire par défaut.

Pour modifier le nom du gestionnaire de fonction (console)
  1. Ouvrez la page Fonctions de la console Lambda et choisissez votre fonction.

  2. Cliquez sur l’onglet Code.

  3. Faites défiler l’écran jusqu’au volet Paramètres d’exécution et choisissez Modifier.

  4. Dans Gestionnaire, saisissez le nouveau nom de votre gestionnaire de fonction.

  5. Choisissez Save (Enregistrer).

Utilisation de l'objet d'événement Lambda

Lorsque Lambda appelle votre fonction, il transmet un argument d'objet d'événement au gestionnaire de fonctions. Les objets JSON constituent le format d'événement le plus courant pour les fonctions Lambda. Dans l'exemple de code de la section précédente, la fonction attend une entrée au format suivant :

{ "Order_id": "12345", "Amount": 199.99, "Item": "Wireless Headphones" }

Si votre fonction est invoquée par un autre Service AWS, l'événement d'entrée est également un objet JSON. Le format exact de l'objet d'événement dépend du service qui appelle votre fonction. Pour connaître le format de l'événement pour un service en particulier, reportez-vous à la page appropriée du Invoquer Lambda avec des événements provenant d'autres services AWS chapitre.

Si l'événement d'entrée prend la forme d'un objet JSON, le moteur d'exécution Lambda convertit l'objet en dictionnaire Python. Pour attribuer des valeurs dans le JSON d'entrée aux variables de votre code, utilisez les méthodes standard du dictionnaire Python, comme illustré dans l'exemple de code.

Vous pouvez également transmettre des données à votre fonction sous forme de tableau JSON ou de n'importe quel autre type de données JSON valide. Le tableau suivant définit la manière dont le moteur d'exécution Python convertit ces types JSON.

Type de données JSON Type de données Python
objet dictionnaire (dict)
array liste (list)
nombre entier (int) ou nombre à virgule flottante (float)
chaîne chaîne (str)
Booléen Booléen () bool
null NoneType (NoneType)

Accès et utilisation de l’objet de contexte Lambda

L'objet de contexte Lambda contient des informations sur l'environnement d'appel et d'exécution des fonctions. Lambda transmet automatiquement l'objet de contexte à votre fonction lorsqu'il est invoqué. Vous pouvez utiliser l'objet de contexte pour générer des informations sur l'invocation de votre fonction à des fins de surveillance.

L'objet de contexte est une classe Python définie dans le client d'interface d'exécution Lambda. Pour renvoyer la valeur de l'une des propriétés de l'objet de contexte, utilisez la méthode correspondante sur l'objet de contexte. Par exemple, l'extrait de code suivant attribue la valeur de la aws_request_id propriété (l'identifiant de la demande d'appel) à une variable nommée. request

request = context.aws_request_id

Pour en savoir plus sur l'utilisation de l'objet de contexte Lambda et pour consulter la liste complète des méthodes et propriétés disponibles, consultez. Utilisation de l’objet de contexte Lambda pour récupérer les informations de la fonction Python

Signatures de gestionnaire valides pour les gestionnaires Python

Lorsque vous définissez votre fonction de gestionnaire en Python, la fonction doit prendre deux arguments. Le premier de ces arguments est l'objet d'événement Lambda et le second est l'objet de contexte Lambda. Par convention, ces arguments d'entrée sont généralement nommés event etcontext, mais vous pouvez leur donner le nom que vous souhaitez. Si vous déclarez votre fonction de gestionnaire avec un seul argument d'entrée, Lambda générera une erreur lorsqu'il tentera d'exécuter votre fonction. La méthode la plus courante pour déclarer une fonction de gestionnaire en Python est la suivante :

def lambda_handler(event, context):

Vous pouvez également utiliser des indications de type Python dans la déclaration de votre fonction, comme illustré dans l'exemple suivant :

from typing import Dict, Any def lambda_handler(event: Dict[str, Any], context: Any) -> Dict[str, Any]:

Pour utiliser une AWS saisie spécifique pour les événements générés par d'autres Services AWS et pour l'objet de contexte, ajoutez le aws-lambda-typing package au package de déploiement de votre fonction. Vous pouvez installer cette bibliothèque dans votre environnement de développement en exécutantpip install aws-lambda-typing. L'extrait de code suivant montre comment utiliser les indices de type AWS spécifiques. Dans cet exemple, l'événement attendu est un événement Amazon S3.

from aws_lambda_typing.events import S3Event from aws_lambda_typing.context import Context from typing import Dict, Any def lambda_handler(event: S3Event, context: Context) -> Dict[str, Any]:

Vous ne pouvez pas utiliser le type de async fonction Python pour votre fonction de gestionnaire.

Renvoi d’une valeur

Un gestionnaire peut éventuellement renvoyer une valeur, qui doit être sérialisable au format JSON. Les types de retour les plus courants incluent dict list strint,,float, etbool.

Ce qu’il advient de la valeur renvoyée dépend du type d’invocation et du service qui a invoqué la fonction. Par exemple :

  • Si vous utilisez le type d'RequestResponseinvocation pour appeler une fonction Lambda de manière synchrone, Lambda renvoie le résultat de l'appel de fonction Python au client invoquant la fonction Lambda (dans la réponse HTTP à la demande d'appel, sérialisée en JSON). Par exemple, la console AWS Lambda utilise le type d’invocation RequestResponse. Dès lors, lorsque vous invoquez la fonction par le biais de la console, cette dernière affiche la valeur renvoyée.

  • Si le gestionnaire renvoie des objets qui ne peuvent pas être sérialisées par json.dumps, le runtime renvoie une erreur.

  • Si le gestionnaire renvoie None, comme le font implicitement les fonctions Python sans une instruction return, le runtime renvoie null.

  • Si vous exécutez le type d’invocation Event (une invocation asynchrone), la valeur sera ignorée.

Dans l'exemple de code, le gestionnaire renvoie le dictionnaire Python suivant :

{ "statusCode": 200, "message": "Receipt processed successfully" }

Le moteur d'exécution Lambda sérialise ce dictionnaire et le renvoie au client qui a invoqué la fonction sous forme de chaîne JSON.

Note

Dans Python 3.9 et les versions ultérieures, Lambda inclut le requestId de l’invocation dans la réponse d’erreur.

En utilisant le AWS SDK pour Python (Boto3) dans votre gestionnaire

Vous utiliserez souvent les fonctions Lambda pour interagir avec d'autres ressources Services AWS . Le moyen le plus simple d'interagir avec ces ressources est d'utiliser le AWS SDK pour Python (Boto3). Tous les environnements d'exécution Lambda Python pris en charge incluent une version du SDK pour Python. Toutefois, nous vous recommandons vivement d'inclure le SDK dans le package de déploiement de votre fonction si votre code doit l'utiliser. L'inclusion du SDK dans votre package de déploiement vous permet de contrôler totalement vos dépendances et de réduire le risque de problèmes de désalignement des versions avec les autres bibliothèques. Pour en savoir plus, consultez Dépendances d’exécution dans Python et Rétrocompatibilité.

Pour utiliser le SDK pour Python dans votre fonction Lambda, ajoutez l'instruction suivante au bloc d'importation au début du code de votre fonction :

import boto3

Utilisez la pip install commande pour ajouter la boto3 bibliothèque au package de déploiement de votre fonction. Pour obtenir des instructions détaillées sur la façon d'ajouter des dépendances à un package de déploiement .zip, consultezCréation d’un package de déploiement .zip avec dépendances. Pour en savoir plus sur l'ajout de dépendances aux fonctions Lambda déployées sous forme d'images de conteneur, consultez Création d’une image à partir d’une image de base ou. Création d’une image à partir d’une image de base alternative

Lorsque vous l'utilisez boto3 dans votre code, vous n'avez pas besoin de fournir d'informations d'identification pour initialiser un client. Par exemple, dans l'exemple de code, nous utilisons la ligne de code suivante pour initialiser un client Amazon S3 :

# Initialize the S3 client outside of the handler s3_client = boto3.client('s3')

Avec Python, Lambda crée automatiquement des variables d'environnement avec des informations d'identification. Le boto3 SDK vérifie la présence de ces informations d'identification dans les variables d'environnement de votre fonction lors de l'initialisation.

Accès aux variables d’environnement

Dans le code de votre gestionnaire, vous pouvez référencer des variables d'environnement à l'aide de la os.environ.get méthode. Dans l'exemple de code, nous référençons la variable d'RECEIPT_BUCKETenvironnement définie à l'aide de la ligne de code suivante :

# Access environment variables bucket_name = os.environ.get('RECEIPT_BUCKET')

N'oubliez pas d'inclure une import os instruction dans le bloc d'importation au début de votre code.

Pratiques exemplaires en matière de code pour les fonctions Lambda Python

Respectez les directives de la liste suivante pour utiliser les pratiques exemplaires de codage lors de la création de vos fonctions Lambda :

  • Séparez le gestionnaire Lambda de votre logique principale. Cela vous permet de créer une fonction testable plus unitaire. Par exemple, en Python, vous pouvez observer ce qui suit :

    def lambda_handler(event, context): foo = event['foo'] bar = event['bar'] result = my_lambda_function(foo, bar) def my_lambda_function(foo, bar): // MyLambdaFunction logic here
  • Contrôlez les dépendances dans le package de déploiement de votre fonction. L’environnement d’exécution AWS Lambda contient un certain nombre de bibliothèques. Pour les environnements d'exécution Node.js et Python, ceux-ci incluent le AWS SDKs. Pour activer le dernier ensemble de mises à jour des fonctionnalités et de la sécurité, Lambda met régulièrement à jour ces bibliothèques. Ces mises à jour peuvent introduire de subtiles modifications dans le comportement de votre fonction Lambda. Pour disposer du contrôle total des dépendances que votre fonction utilise, empaquetez toutes vos dépendances avec votre package de déploiement.

  • Réduisez la complexité de vos dépendances. Privilégiez les infrastructures plus simples qui se chargent rapidement au démarrage de l’environnement d’exécution.

  • Réduisez la taille de votre package de déploiement selon ses besoins d’exécution. Cela contribue à réduire le temps nécessaire au téléchargement et à la décompression de votre package de déploiement avant l’invocation.

  • Tirez parti de la réutilisation de l’environnement d’exécution pour améliorer les performances de votre fonction. Initialisez les clients SDK et les connexions à la base de données en dehors du gestionnaire de fonctions et mettez en cache les actifs statiques localement dans le répertoire /tmp. Les invocations ultérieures traitées par la même instance de votre fonction peuvent réutiliser ces ressources. Cela permet d’économiser des coûts, tout en réduisant le temps d’exécution de la fonction.

    Pour éviter des éventuelles fuites de données entre les invocations, n’utilisez pas l’environnement d’exécution pour stocker des données utilisateur, des événements ou d’autres informations ayant un impact sur la sécurité. Si votre fonction repose sur un état réversible qui ne peut pas être stocké en mémoire dans le gestionnaire, envisagez de créer une fonction distincte ou des versions distinctes d’une fonction pour chaque utilisateur.

  • Utilisez une directive keep-alive pour maintenir les connexions persistantes. Lambda purge les connexions inactives au fil du temps. Si vous tentez de réutiliser une connexion inactive lorsque vous invoquez une fonction, cela entraîne une erreur de connexion. Pour maintenir votre connexion persistante, utilisez la directive Keep-alive associée à votre environnement d’exécution. Pour obtenir un exemple, consultez Réutilisation des connexions avec Keep-Alive dans Node.js.

  • Utilisez des variables d’environnement pour transmettre des paramètres opérationnels à votre fonction. Par exemple, si vous écrivez dans un compartiment Amazon S3 au lieu de coder en dur le nom du compartiment dans lequel vous écrivez, configurez le nom du compartiment comme variable d’environnement.

  • Évitez d’utiliser des invocations récursives dans votre fonction Lambda, lorsque la fonction s’invoque elle-même ou démarre un processus susceptible de l’invoquer à nouveau. Cela peut entraîner un volume involontaire d’invocations de fonction et des coûts accrus. Si vous constatez un volume involontaire d’invocations, définissez immédiatement la simultanéité réservée à la fonction sur 0 afin de limiter toutes les invocations de la fonction, pendant que vous mettez à jour le code.

  • N'utilisez pas de code non documenté ni public APIs dans votre code de fonction Lambda. Pour les AWS Lambda environnements d'exécution gérés, Lambda applique régulièrement des mises à jour de sécurité et fonctionnelles aux applications internes de Lambda. APIs Ces mises à jour internes de l'API peuvent être rétroincompatibles, ce qui peut entraîner des conséquences imprévues, telles que des échecs d'invocation si votre fonction dépend de ces mises à jour non publiques. APIs Consultez la référence de l'API pour obtenir une liste des API accessibles au public APIs.

  • Écriture du code idempotent. L’écriture de code idempotent pour vos fonctions garantit ne gestion identique des événements dupliqués. Votre code doit valider correctement les événements et gérer correctement les événements dupliqués. Pour de plus amples informations, veuillez consulterComment faire en sorte que ma fonction Lambda soit idempotente ?.

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