Fonctions AWS Lambda - AWS Lambda

Fonctions AWS Lambda

AWS Lambda fournit une console de gestion et une API pour la gestion et l'appel des fonctions. Il fournit des environnements d’exécution qui prennent en charge un ensemble standard de fonctionnalités, lesquelles vous permettent de passer facilement d’un langage à l’autre et d’une infrastructure à une autre en fonction de vos besoins. Outre les fonctions, vous pouvez également créer des versions, des alias, des couches et des environnements d’exécution personnalisés.

Modèle de programmation

Les créations spécifiques varient d'un environnement d’exécution à l'autre, mais elles partagent toutes un modèle de programmation commun qui définit l'interface entre votre code et le code d’un environnement d’exécution. Vous indiquez à l’environnement d’exécution quelle méthode exécuter en définissant un gestionnaire dans la configuration de la fonction, et l’environnement d’exécution l’exécute. L’environnement d’exécution transmet les objets au gestionnaire qui contiennent l'événement d'appel et le contexte, tels que le nom de la fonction et l'ID de demande.

Lorsque le gestionnaire termine le traitement du premier événement, le runtime lui en envoie un autre. La classe de la fonction reste en mémoire, de sorte que les clients et variables déclarés en dehors de la méthode du gestionnaire dans le code d'initialisation peuvent être réutilisés. Pour économiser du temps de traitement sur les événements suivants, créez des ressources réutilisables telles que des clients AWS SDK lors de l'initialisation. Une fois initialisée, chaque instance de votre fonction peut traiter des milliers de demandes.

L'initialisation est facturée dans le cadre de la durée du premier appel traité par une instance de votre fonction. Lorsque le suivi X-Ray est activé, l'environnement d'exécution enregistre des sous-segments distincts pour l'initialisation et l'exécution.


        Suivi X-Ray avec des sous-segments d'initialisation et d'appel.

Votre fonction a également accès au stockage local dans le répertoire /tmp. Les instances de votre fonction qui répondent aux demandes restent actives pendant quelques heures avant d'être recyclées.

L’environnement d’exécution capture la sortie de journalisation de votre fonction et l'envoie à Amazon CloudWatch Logs. En plus de consigner la sortie de votre fonction, le runtime consigne également les entrées lorsque la fonction d’appel démarre et se termine. Cela inclut un journal de rapport avec l'ID de demande, la durée facturée, la durée d'initialisation et d'autres détails. Si votre fonction génère une erreur, le runtime renvoie cette erreur au mécanisme d'appel.

Note

La journalisation est soumise à des limites CloudWatch Logs. Les données des journaux peuvent être perdues en raison de la limitation ou, dans certains cas, lorsqu'une instance de votre fonction est arrêtée.

Pour une introduction pratique au modèle de programmation dans le langage de programmation de votre choix, consultez les sections suivantes.

Lambda met à l'échelle votre fonction en exécutant des instances supplémentaires à mesure que la demande augmente et en arrêtant des instances à mesure que la demande diminue. Sauf indication contraire, les demandes entrantes peuvent être traitées dans le désordre ou simultanément. Stockez l'état de votre application dans d'autres services et ne comptez pas sur la longue durée de vie des instances de votre fonction. Utilisez le stockage local et les objets de niveau classe pour améliorer les performances, mais réduisez au minimum la taille de votre package de déploiement et la quantité de données que vous transférez vers l'environnement d'exécution.

Package de déploiement

Le code de votre fonction se compose de scripts ou de programmes compilés et leurs dépendances. Lorsque vous créez des fonctions dans la console Lambda ou un kit d'outils, le client crée une archive ZIP de votre code appelée un package de déploiement. Le client envoie ensuite le package au service Lambda. Lorsque vous gérez des fonctions avec l'API Lambda, les outils de ligne de commande ou les kits de développement logiciel (SDK), vous créez le package de déploiement. Vous devez également créer un package de déploiement manuellement pour les langages compilés et pour ajouter des dépendances à votre fonction.

Pour obtenir des instructions spécifiques au langage, consultez les sections suivantes :

Couches

Les couches Lambda sont un mécanisme de distribution pour les bibliothèques, les runtimes personnalisés, ainsi que d'autres dépendances de la fonction. Les couches vous permettent de gérer votre code de fonction en développement indépendamment du code immuable et des ressources qu'il utilise. Vous pouvez configurer votre fonction de sorte qu'elle utilise les couches que vous créez, les couches fournies par AWS ou des couches d'autres clients AWS.

Pour de plus amples informations, veuillez consulter Couches AWS Lambda.

Dimensionnement

Lambda gère l'infrastructure qui exécute votre code et se dimensionne automatiquement en fonction des demandes entrantes. Lorsque votre fonction est appelée plus rapidement qu'une simple instance de votre fonction peut traiter les événements, Lambda évolue en exécutant des instances supplémentaires. Lorsque le trafic diminue, les instances inactives sont bloquées ou arrêtées. Vous payez uniquement pour la durée pendant laquelle votre fonction s'initialise ou traite des événements.


        Votre fonction évolue automatiquement en fonction du nombre de demandes ouvertes.

Pour de plus amples informations, veuillez consulter Dimensionnement d’une fonction AWS Lambda.

Contrôles de simultanéité

Utilisez les paramètres de simultanéité pour vous assurer que vos applications de production sont hautement disponibles et hautement réactives. Pour empêcher une fonction d'utiliser trop de simultanéité et réserver une partie de la simultanéité de votre compte disponible pour une fonction, utilisez la simultanéité réservée. La simultanéité réservée divise la simultanéité disponible en sous-ensembles. Une fonction avec simultanéité réservée utilise uniquement la simultanéité de l'ensemble qui lui est dédié.


        Simultanéité réservée allouée à deux fonctions.

Pour permettre l'évolutivité des fonctions sans fluctuation de latence, utilisez la simultanéité provisionnée. Pour les fonctions dont l'initialisation prend longtemps ou qui nécessitent une latence extrêmement faible pour tous les appels, la simultanéité provisionnée vous permet de pré-initialiser les instances de la fonction et d'en maintenir l'exécution à tout moment. Lambda s'intègre à Application Auto Scaling pour prendre en charge le dimensionnement automatique de la simultanéité provisionnée en fonction de l'utilisation.


        Dimensionnement automatique de la simultanéité provisionnée avec Application Auto Scaling.

Pour plus d’informations, consultez Gestion de la simultanéité pour une fonction Lambda.

Appel asynchrone

Lorsque vous appelez une fonction, vous pouvez choisir de le faire de façon synchrone ou asynchrone. Avec un appel synchrone, vous attendez de la fonction qu’elle traite l'événement et renvoie une réponse. Avec l'appel asynchrone, Lambda place en file d’attente l’événement à traiter et renvoie une réponse immédiatement.


        Lambda met les événements d'appel asynchrones en file d'attente avant de les envoyer à la fonction.

Pour les appels asynchrones, Lambda gère les nouvelles tentatives si la fonction renvoie une erreur ou si elle est limitée. Pour personnaliser ce comportement, vous pouvez configurer les paramètres de gestion des erreurs sur une fonction, une version ou un alias. Vous pouvez également configurer Lambda pour envoyer des événements dont le traitement a échoué vers une file d'attente de lettres mortes ou pour envoyer un enregistrement de chaque appel à une destination.

Pour de plus amples informations, veuillez consulter Appel asynchrone.

Mappages de source d'événement

Pour traiter les éléments à partir d'un flux ou d’une file d'attente, vous pouvez créer un mappage de source d'événement. Un mappage de source d'événement est une ressource Lambda qui lit des éléments d'une file d’attente Amazon SQS, un flux Amazon Kinesis ou un flux Amazon DynamoDB et les envoie à votre fonction par lots. Chaque événement traité par votre fonction peut contenir des centaines ou des milliers d'éléments.


        Mappage de source d'événement en train de lire des enregistrements à partir d'un flux Kinesis.

Les mappages de source d'événement gèrent une file d'attente locale d'éléments non traités, ainsi que les nouvelles tentatives si la fonction renvoie une erreur ou est limitée. Vous pouvez configurer un mappage de source d'événement pour personnaliser le comportement de traitement par lots et la gestion des erreurs, ou pour envoyer un enregistrement d'éléments dont le traitement échoue vers une destination.

Pour de plus amples informations, veuillez consulter Mappages de source d'événement AWS Lambda.

Destinations

Une destination est une ressource AWS qui reçoit des enregistrements d'appel pour une fonction. Pour les appels asynchrones, vous pouvez configurer Lambda afin d'envoyer des enregistrements d'appel à une file d'attente, à une rubrique, à une fonction ou à un bus d'événements. Vous pouvez configurer des destinations distinctes pour les appels réussis et les événements dont le traitement a échoué. L'enregistrement de l'appel contient des détails sur l'événement, la réponse à la fonction et la raison pour laquelle l'enregistrement a été envoyé.


        Lambda envoie les enregistrements d'appel à une destination de bus d'événements ou de file d'attente, selon le résultat.

Pour les mappages de source d'événement lus à partir de flux, vous pouvez configurer Lambda pour envoyer un enregistrement des lots ayant dont le traitement a échoué vers une file d'attente ou une rubrique. Un enregistrement d'échec pour un mappage de source d'événement contient des métadonnées sur le lot et pointe vers les éléments du flux.

Pour de plus amples informations, veuillez consulter Configuration des destinations pour les appels asynchrones ainsi que les sections relatives à la gestion des erreurs de Utilisation de AWS Lambda avec Amazon DynamoDB et de Utilisation de AWS Lambda avec Amazon Kinesis.

Plans de fonction

Lorsque vous créez une fonction dans la console Lambda, vous pouvez choisir de commencer à partir de rien, d'utiliser un plan ou de déployer une application à partir du AWS Serverless Application Repository. Un plan fournit un exemple de code qui montre comment utiliser Lambda avec un service AWS ou une application tierce populaire. Les plans incluent des exemples de code et des préréglages de configuration de fonction pour les environnements d’exécution Node.js et Python.

Les plans sont fournis pour une utilisation sous la licence Creative Commons Zero. Ils sont disponibles uniquement dans la console Lambda.

Modèles d’application

Vous pouvez utiliser la console Lambda pour créer une application avec un pipeline de distribution continue. Les modèles d'application de la console Lambda incluent du code pour une ou plusieurs fonctions, un modèle d'application qui définit les fonctions et les ressources AWS prises en charge, et un modèle d'infrastructure qui définit un pipeline AWS CodePipeline. Le pipeline comprend des étapes de construction et de déploiement qui s'exécutent chaque fois que vous poussez des modifications dans le référentiel Git inclus.

Les modèles d'application sont fournis pour une utilisation sous la licence MIT No Attribution. Ils sont disponibles uniquement dans la console Lambda.

Pour plus d’informations, consultez Création d'une application avec distribution continue dans la console Lambda.