Questions d'ordre général

Q : Qu'est-ce qu'AWS Lambda ?

AWS Lambda vous permet d'exécuter du code sans avoir à mettre en service ou gérer des serveurs. Vous payez uniquement pour le temps de calcul consommé, il n'y a aucun frais lorsque votre code n'est pas exécuté. Avec Lambda, vous pouvez exécuter du code pour pratiquement n'importe quel type d'application ou service dorsal (back-end), sans aucune tâche administrative. Il vous suffit de charger votre code : Lambda fait le nécessaire pour l'exécuter et le dimensionner en assurant une haute disponibilité. Vous pouvez configurer votre code de sorte qu'il se déclenche automatiquement depuis d'autres services AWS, ou l'appeler directement à partir de n'importe quelle application Web ou mobile.

Q : Qu'est-ce que le calcul sans serveur ?

Le calcul sans serveur vous permet de concevoir et d'exécuter des applications et des services sans se soucier des serveurs. Avec le calcul sans serveur, votre application s'exécute toujours sur des serveurs, mais la gestion des serveurs est effectuée par AWS. Au cœur du calcul sans serveur se trouve AWS Lambda, qui vous permet d'exécuter votre code sans mettre en service ou gérer de serveurs. Pour en savoir plus sur le calcul sans serveur, rendez-vous ici.

Q : Quels sont les événements qui peuvent déclencher une fonction AWS Lambda ?

Veuillez consulter notre documentation pour obtenir la liste complète des sources d'événements.

Q : Dans quels cas dois-je utiliser AWS Lambda plutôt qu'Amazon EC2 ?

Amazon Web Services propose un ensemble de services de calcul pour répondre à toute une variété de besoins.

Amazon EC2 offre la flexibilité, avec un large éventail de types d'instances et la possibilité de personnaliser le système d'exploitation, le réseau, les paramètres de sécurité et la totalité de la pile logicielle, vous permettant ainsi de déplacer aisément des applications existantes vers le cloud. Grâce à Amazon EC2, vous gérez le dimensionnement des capacités, la surveillance de l'état de santé et des performances de la flotte, ainsi que la conception de la tolérance aux pannes et de l'évolutivité. AWS Elastic Beanstalk offre un service facile à utiliser pour déployer et mettre à l'échelle des applications Web dans lesquelles vous conservez la propriété et le contrôle total sur les instances EC2 sous-jacentes. Amazon EC2 Container Service est un service de gestion de conteneurs évolutif qui prend en charge les conteneurs Docker et vous permet d'exécuter facilement des applications distribuées sur un cluster géré d'instances Amazon EC2.

AWS Lambda facilite l'exécution du code en réponse à des événements tels que des modifications de compartiments Amazon S3, des mises à jour de tables Amazon DynamoDB, ou encore des événements personnalisés générés par vos applications ou vos appareils. Grâce à Lambda, vous n'avez pas à dimensionner vos propres instances. Lambda effectue toutes les activités opérationnelles et administratives à votre place, y compris le dimensionnement des capacités, la surveillance de l'état de santé de la flotte, l'application des correctifs de sécurité aux ressources de calcul sous-jacentes, le déploiement de votre code, l'exécution d'un service Web frontal, ainsi que la surveillance et la journalisation de votre code. AWS Lambda confère à votre code un dimensionnement facile et une haute disponibilité sans aucun effort supplémentaire de votre part.

Q : Quel type de code peut-on exécuter sur AWS Lambda ?

AWS Lambda vous permet d'effectuer très facilement de nombreuses tâches dans le cloud. Par exemple, vous pouvez utiliser AWS Lambda pour concevoir des back-end mobiles qui récupèrent et transforment des données d'Amazon DynamoDB, des gestionnaires qui compressent ou transforment des objets dès lors qu'ils sont chargés dans Amazon S3, pour effectuer un audit et publier des appels d'API effectués vers n'importe quelle offre Amazon Web Service, et pour procéder au traitement sans serveur de données diffusées en continu à l'aide d'Amazon Kinesis.

Q : Quels sont les langages pris en charge par AWS Lambda ?

AWS Lambda prend en charge le code écrit en Node.js (JavaScript), Python, Java (compatible Java 8) et C# (.NET Core). Votre code peut inclure des bibliothèques existantes, même natives. Référez-vous à notre documentation concernant l'utilisation de Node.js, Python, Java et C#.

Q : Puis-je accéder à l'infrastructure sur laquelle AWS Lambda s'exécute ?

Non. AWS Lambda gère l'infrastructure de calcul à votre place, lui permettant d'effectuer des vérifications de l'état de santé, d'appliquer des correctifs de sécurité et de réaliser d'autres opérations de maintenance quotidienne.

Q : Comment AWS Lambda isole-t-il mon code ?

Chaque fonction d'AWS Lambda s'exécute dans son propre environnement isolé, avec un affichage de ses propres ressources et de son propre système de fichiers. AWS Lambda utilise les mêmes techniques qu'Amazon EC2 pour fournir sécurité et séparation au niveau de l'infrastructure et de l'exécution.

Q : Comment AWS Lambda sécurise-t-il mon code ?

AWS Lambda stocke le code dans Amazon S3 et le chiffre au repos. AWS Lambda effectue des vérifications d'intégrité supplémentaires pendant l'utilisation de votre code.

Fonctions AWS Lambda

Q : Qu'est-ce qu'une fonction AWS Lambda ?

Le code que vous exécutez sur AWS Lambda est chargé en tant que « fonction lambda ». Chaque fonction est associée à des informations de configuration telles que son nom, sa description, son point d'entrée et ses besoins en ressources. Le code doit être écrit dans un style « statique », c'est-à-dire qu'il doit supposer qu'aucune affinité n'existe avec l'infrastructure de calcul sous-jacente. L'accès au système de fichiers local, les traitements d'éléments enfants et autres artefacts similaires ne doivent pas aller au-delà de la durée de vie de la requête, et toute donnée à statut permanent doit être stockée dans Amazon S3, Amazon DynamoDB ou un autre service de stockage disponible sur Internet. Les fonctions Lambda peuvent inclure des bibliothèques, même natives.

Q : AWS Lambda réutilise-t-il les instances des fonctions ?

Pour améliorer les performances, AWS Lambda peut choisir de conserver une instance de votre fonction et de la réutiliser pour répondre à une requête ultérieure, plutôt que de créer une nouvelle copie. Pour en savoir plus sur la façon dont AWS Lambda réutilise les instances des fonctions, consultez notre documentation. Votre code ne doit pas supposer que cela sera toujours le cas.

Q : Que se passe-t-il si j'ai besoin d'espace disque temporaire pour ma fonction AWS Lambda ?

Chaque fonction Lambda dispose de 500 Mo d'espace disque non permanent dans son propre répertoire /tmp.

Q : Pourquoi les fonctions AWS Lambda doivent-elles être sans état ?

Conserver les fonctions statiques permet à AWS Lambda de lancer rapidement autant de copies de la fonction que nécessaire pour dimensionner le débit d'événements entrants. Tandis que le modèle de programmation d'AWS Lambda est statique, votre code peut accéder à des données dynamiques en appelant d'autres services Web tels qu'Amazon S3 ou Amazon DynamoDB.

Q : Puis-je utiliser des threads et des processus dans le code de ma fonction AWS Lambda ?

Oui. AWS Lambda vous permet d'utiliser les fonctionnalités normales de langage et de système d'exploitation, comme la création de threads et de processus supplémentaires. Les ressources allouées à la fonction Lambda, y compris la mémoire, le temps d'exécution, le disque et l'utilisation du réseau, doivent être partagées entre tous les processus qu'elle utilise. Vous pouvez lancer des processus à l'aide de n'importe quel langage pris en charge par Amazon Linux.

Q : Quelles restrictions s'appliquent aux codes de fonction AWS Lambda ?

Lambda vise à imposer le moins de restrictions possible aux activités normales de langage et de système d'exploitation, mais certaines activités sont désactivées : les connexions réseau entrantes sont bloquées par AWS Lambda, et pour ce qui est des connexions sortantes, seules les interfaces de connexion TCP/IP sont prises en charge, et les appels au système ptrace (débogage) sont bloqués. Dans le cadre d'une mesure anti-spam, le trafic du port TCP 25 est également bloqué.

Q : Comment puis-je créer une fonction AWS Lambda à l'aide de la console Lambda ?

Si vous utilisez Node.js ou Python, vous pouvez créer le code de votre fonction à l'aide de l'éditeur de code disponible dans la console AWS Lambda. Ce dernier vous permet de créer et tester vos fonctions et d'afficher les résultats de ces dernières dans un environnement solide de type IDE. Accédez à la console pour démarrer.

Vous pouvez également compresser le code (et toute bibliothèque qui s'y rapporte) dans un fichier ZIP et le charger depuis votre environnement local à l'aide de la console AWS Lambda, ou spécifier un emplacement Amazon S3 où enregistrer le fichier ZIP. Les chargements ne doivent pas dépasser 50 Mo (fichier compressé). Vous pouvez utiliser le module d'extension AWS Eclipse pour créer et déployer des fonctions Lambda en Java. Vous pouvez utiliser le module d'extension Visual Studio pour créer et déployer des fonctions Lambda en C# et Node.js.

Q : Comment puis-je créer une fonction AWS Lambda à l'aide de l'interface de ligne de commande Lambda ?

Vous pouvez compresser le code (et toute bibliothèque qui s'y rapporte) dans un fichier ZIP et le charger depuis votre environnement local à l'aide de l'interface de ligne de commande AWS, ou spécifier un emplacement Amazon S3 où enregistrer le fichier ZIP. Les chargements ne doivent pas dépasser 50 Mo (fichier compressé). Consultez le Manuel de mise en route Lambda pour démarrer.

Q : AWS Lambda prend-il en charge les variables d'environnement ?

Oui. Vous pouvez facilement créer et modifier des variables d'environnement via la console AWS Lambda, l'interface de ligne de commande ou les kits SDK. Pour en savoir plus sur les variables d'environnement, consultez la documentation.

Q : Puis-je stocker des informations sensibles dans des variables d'environnement ?

Pour les informations sensibles tels que les mots de passe de base de données, nous vous conseillons d'utiliser le chiffrement côté client à l'aide d'AWS Key Management Service, puis de stocker les valeurs obtenues en tant que texte de chiffrement dans votre variable d'environnement. Pour déchiffrer ces valeurs, vous devrez inclure une opération logique dans le code de votre fonction AWS Lambda.

Q : Comment puis-je gérer mes fonctions AWS Lambda ?

Vous pouvez facilement référencer, supprimer, mettre à jour et surveiller vos fonctions Lambda à l'aide du tableau de bord de la console AWS Lambda. Vous pouvez également utiliser l'interface de ligne de commande et le SDK AWS pour gérer vos fonctions Lambda. Pour en savoir plus, consultez le Manuel des développeurs Lambda.

Q : Comment puis-je surveiller une fonction AWS Lambda ?

AWS Lambda surveille automatiquement les fonctions Lambda à votre place. En effet, il signale des mesures en temps réel via Amazon CloudWatch, y compris le total des requêtes, l'utilisation simultanée au niveau compte et au niveau fonction, la latence, les taux d'erreurs et les requêtes limitées. Vous pouvez afficher les statistiques de chacune de vos fonctions Lambda via la console Amazon CloudWatch ou la console AWS Lambda. Vous pouvez également appeler des API de surveillance tierces dans votre fonction Lambda.

Pour en savoir plus, consultez Résolution de problèmes relatifs aux mesures CloudWatch. Les frais standard d'AWS Lambda s'appliquent à l'utilisation des mesures intégrées à Lambda.

Q : Comment puis-je résoudre les problèmes de défaillance d'une fonction AWS Lambda ?

AWS Lambda s'intègre automatiquement aux journaux Amazon CloudWatch en créant un journal de groupe pour chacune de vos fonctions Lambda, et en fournissant des entrées de journal basiques sur les événements de cycle de vie de l'application, y compris les ressources consommées pour chaque utilisation de cette fonction. Vous pouvez facilement adjoindre des instructions de journalisation supplémentaires à votre code. Vous pouvez également appeler des API de journalisation tierces dans votre fonction Lambda. Pour en savoir plus, consultez la rubriqueRésolution des problèmes liés à des fonctions Lamba. Les tarifs Amazon CloudWatch Logs s'appliqueront.

Q : Comment puis-je mettre à l'échelle une fonction AWS Lambda ?

Vous n'avez pas à mettre à l'échelle vos fonctions Lambda, AWS Lambda s'en charge automatiquement à votre place. A chaque réception d'une notification d'événement pour votre fonction, AWS Lambda localise rapidement une capacité disponible au sein de sa flotte de calcul et exécute votre code. Etant donné que votre code est statique, AWS Lambda peut lancer autant de copies de votre fonction que nécessaire sans longueurs dans le déploiement, ni délais liés à la configuration. Il n'existe aucune limite fondamentale au dimensionnement d'une fonction. AWS Lambda allouera de la capacité de façon dynamique pour faire face aux événements entrants.

Q : Comment s'effectue l'attribution de ressources de calcul à une fonction AWS Lambda ?

Dans le modèle de ressources AWS Lambda, vous choisissez la quantité de mémoire que vous souhaitez pour votre fonction, puis la puissance CPU et les autres ressources sont attribuées en conséquence. Par exemple, le fait de choisir 256 Mo de mémoire attribue approximativement deux fois plus de puissance CPU à votre fonction Lambda que si vous aviez opté pour 128 Mo, et moitié moins de puissance CPU que si vous aviez sélectionné 512 Mo de mémoire. Vous pouvez définir votre mémoire par incréments de 64 Mo, avec un minimum de 128 Mo et un maximum de 3 Go.

Q : Quel est le temps d'exécution maximal d'une fonction AWS Lambda ?

Les appels effectués sur AWS Lambda doivent être exécutés en moins de 300 secondes. Le délai d'expiration par défaut est de 3 secondes, mais vous pouvez le définir sur n'importe quelle valeur comprise entre 1 et 300 secondes.

Q : Comment l'utilisation des fonctions AWS Lambda est-elle facturée ?

La facturation d'AWS Lambda s'effectue en fonction de l'utilisation du service. Pour en savoir plus, consultez la page relative à la tarification d'Amazon RDS.

Q : AWS Lambda prend-il en charge la gestion des versions ?

Oui. Par défaut, chaque fonction AWS Lambda dispose d'une version actuelle du code unique. Les clients de votre fonction Lambda peuvent appeler une version spécifique ou obtenir la dernière implémentation. Référez-vous à notre documentation sur les fonctions Lambda de contrôle de version.

Q : Combien de temps après le chargement de mon code serai-je en mesure d'appeler ma fonction AWS Lambda ?

Les temps de déploiement peuvent varier selon la taille de votre code, mais il est généralement possible d'appeler les fonctions AWS Lambda quelques secondes après le chargement.

Q : Puis-je utiliser ma propre version d'une des bibliothèques compatibles ?

Oui, vous pouvez inclure votre propre copie d'une bibliothèque (y compris le kit SDK AWS) de manière à utiliser une version différente de celle proposée par défaut par AWS Lambda.

Utilisation d'AWS Lambda pour traiter des événements AWS

Q : Qu'est-ce qu'une source d'événement ?

Une source d'événement est un service AWS ou une application créée par un développeur qui déclenche l'exécution d'une fonction AWS Lambda. Certains services publient ces événements sur Lambda en appelant directement la fonction cloud (par exemple, Amazon S3). Lambda peut également interroger des ressources dans d'autres services qui ne publient pas d'événements sur Lambda. Par exemple, Lambda peut extraire des enregistrements d'un flux Kinesis et exécuter une fonction Lambda pour chaque message du flux.

Beaucoup d'autres services, comme AWS CloudTrail, peuvent agir en tant que sources d'événements en se connectant tout simplement à Amazon S3 et en utilisant les notifications de compartiments S3 pour déclencher les fonctions AWS Lambda.

Q : Quelles sont les sources d'événements utilisables avec AWS Lambda ?

Veuillez consulter notre documentation pour obtenir la liste complète des sources d'événements.

Q : Comment les événements sont-ils représentés dans AWS Lambda ?

Les événements sont transmis à une fonction Lambda en tant que paramètre d'entrée d'événement. Concernant les sources d'événements où les événements arrivent par lots, tels que les flux Amazon Kinesis et Amazon DynamoDB, le paramètre d'événement peut contenir plusieurs événements dans un seul appel, selon la taille du lot que vous demandez. Pour en savoir plus sur les notifications d'événements d'Amazon S3, consultez la rubrique Configuring Notifications for Amazon S3 Events. Pour en savoir plus sur Amazon DynamoDB Streams, consultez le manuel DynamoDB Stream Developers Guide. Pour en savoir plus sur l'appel des fonctions Lambda via Amazon SNS, consultez le manuel Amazon SNS Developers Guide. Pour en savoir plus sur les événements Amazon Cognito, consultez la rubrique Amazon Cognito. Pour en savoir plus sur les journaux AWS CloudTrail et les appels d'API d'audit sur les services AWS, consultez la rubrique AWS CloudTrail.

Q : Comment puis-je faire en sorte qu'une fonction AWS Lambda réagisse à des modifications dans un compartiment (bucket) Amazon S3 ?

Concernant la console AWS Lambda, vous pouvez sélectionner une fonction et l'associer à des notifications émanant d'un compartiment Amazon S3. Sinon, vous pouvez utiliser la console Amazon S3 et configurer les notifications du compartiment à envoyer à votre fonction AWS Lambda. Cette même fonctionnalité est également disponible via le SDK et l'interface de ligne de commande AWS.

Q : Comment puis-je faire en sorte qu'une fonction AWS Lambda réagisse à des mises à jour dans une table Amazon DynamoDB ?

Vous pouvez déclencher une fonction Lambda lorsque des mises à jour sont apportées à une table DynamoDB en inscrivant votre fonction Lambda au flux DynamoDB associé à la table. Vous pouvez associer un flux DynamoDB à une fonction Lambda à l'aide de la console Amazon DynamoDB, de la console AWS Lambda ou de l'API Lambda registerEventSource.

Q : Comment puis-je utiliser une fonction AWS Lambda pour traiter des enregistrements dans un flux Amazon Kinesis ?

Depuis la console AWS Lambda, vous pouvez sélectionner une fonction Lambda et l'associer à un flux Amazon Kinesis détenu par le même compte. Cette même fonctionnalité est également disponible via le SDK et via l'interface de ligne de commande AWS.

Q : De quelle façon AWS Lambda traite-t-il les données des flux Amazon Kinesis et Amazon DynamoDB ?

Les enregistrements des flux Amazon Kinesis et Amazon DynamoDB envoyés à votre fonction AWS Lambda sont strictement numérotés, par partition. Ainsi, si vous placez deux enregistrements dans la même partition, Lambda s'assure que votre fonction Lambda est appelée avec succès avec le premier enregistrement avant d'être appelée avec le deuxième enregistrement. Si l'appel pour un enregistrement est écoulé ou limité, ou s'il rencontre d'autres erreurs, Lambda essaiera de nouveau d'appeler votre fonction jusqu'à ce qu'il y parvienne (ou que l'enregistrement arrive à son délai d'expiration de 24 heures) avant de passer à l'enregistrement suivant. L'ordre des enregistrements dans différentes partitions n'est pas garanti et le traitement de chaque partition s'effectue en parallèle.

Q : Comment puis-je utiliser une fonction AWS Lambda pour réagir aux notifications envoyées par Amazon Simple Notification Service (SNS) ?

Depuis la console AWS Lambda, vous pouvez sélectionner une fonction Lambda et l'associer à une rubrique Amazon SNS. Cette même fonctionnalité est également disponible via le SDK et l'interface de ligne de commande AWS.

Q : Comment puis-je utiliser une fonction AWS Lambda pour réagir aux e-mails envoyés par Amazon Simple Email Service (SES) ?

Depuis la console Amazon SES, vous pouvez configurer votre règle de réception afin de faire en sorte qu'Amazon SES envoie vos messages à une fonction AWS Lamda. Cette même fonctionnalité est disponible via le SDK et l'interface de ligne de commande AWS.

Q : Comment puis-je utiliser une fonction AWS Lambda pour réagir à des alarmes Amazon CloudWatch ?

Configurez tout d'abord l'alarme pour envoyer des notifications Amazon SNS. Puis, à partir de la console AWS Lambda, sélectionnez une fonction Lambda et associez-la à cette rubrique Amazon SNS. Consultez le manuel Amazon CloudWatch Developer Guide pour découvrir comment configurer des alarmes Amazon CloudWatch.

Q : Comment puis-je utiliser une fonction AWS Lambda pour répondre aux changements de données de l'utilisateur ou du périphérique gérées par Amazon Cognito ?

Depuis la console AWS Lambda, vous pouvez sélectionner une fonction qui doit être déclenchée lorsque des ensembles de données associés à un pool d'identités Amazon Cognito sont synchronisés. Cette même fonctionnalité est également disponible via le SDK et via l'interface de ligne de commande AWS. Consultez la rubrique Amazon Cognito pour découvrir comment utiliser Amazon Cognito pour partager et synchroniser les données entre les différents appareils d'un utilisateur.

Q : Comment mon application peut-elle déclencher directement une fonction AWS Lambda ?

Vous pouvez appeler une fonction Lambda en utilisant un événement personnalisé via l'API invoke d'AWS Lambda. Seuls le propriétaire de la fonction ou un autre compte AWS auquel le propriétaire a donné son autorisation peuvent appeler la fonction. Pour en savoir plus, consultez le manuel Lambda Developers Guide

Q : Quelle est la latence suite à l'appel d'une fonction AWS Lambda en réponse à un événement ?

AWS Lambda est conçu pour traiter les événements en quelques millisecondes. La latence sera plus importante immédiatement après la création et la mise à jour d'une fonction Lambda, ou si celle-ci n'a pas été utilisée récemment.

Q : Comment puis-je créer un service dorsal mobile à l'aide d'AWS Lambda ?

Chargez le code que vous souhaitez exécuter avec AWS Lambda, puis appelez-le depuis votre application mobile à l'aide du kit SDK AWS Lambda, qui est inclus dans AWS Mobile SDK. Vous pouvez effectuer des appels directs (synchrones) pour récupérer ou vérifier des données en temps réel, ainsi que des appels asynchrones. Vous pouvez également définir une API personnalisée en utilisant Amazon API Gateway et appeler vos fonctions Lambda par le biais de n'importe quel client REST compatible. Pour en savoir plus sur le kit SDK AWS Mobile, consultez la page Kit SDK AWS Mobile. Pour en savoir plus sur Amazon API Gateway, consultez la page Amazon API Gateway.

Q : Comment puis-je appeler une fonction AWS Lambda par HTTPS ?

Vous pouvez appeler une fonction Lambda via HTTPS en définissant une API RESTful personnalisée à l'aide d'Amazon API Gateway. Celle-ci vous fournit un point de terminaison pour votre fonction qui peut répondre aux appels REST comme GET, PUT et POST. Obtenez plus d'informations sur l'utilisation d'AWS Lambda avec Amazon API Gateway.

Q : Comment ma fonction AWS Lambda peut-elle personnaliser son comportement sur l'appareil et l'application qui effectuent la demande ?

Lorsqu'elles sont appelées par le kit SDK AWS Mobile, les fonctions AWS Lambda obtiennent automatiquement des informations précises sur l'appareil et l'application qui effectuent l'appel via l'objet « contexte ».

Q : Comment ma fonction AWS Lambda peut-elle personnaliser leur comportement en fonction de l'identité de l'utilisateur final d'une application ?

Lorsque votre application utilise l'identité Amazon Cognito, les utilisateurs finaux peuvent s'authentifier via différents fournisseurs d'identifiants publics tels qu'Amazon, Facebook, Google et d'autres services compatibles avec OpenID Connect. L'identité de l'utilisateur est alors automatiquement présentée, de manière sécurisée, à votre fonction Lambda sous la forme d'un identifiant Amazon Cognito, qui lui permet d'accéder aux données utilisateur d'Amazon Cognito, ou sous la forme d'une clé lui permettant de stocker et de récupérer des données dans Amazon DynamoDB ou d'autres services Web.

Q : Comment puis-je créer une compétence Alexa à l'aide d'AWS Lambda ?

AWS Lambda est intégré à Alexa Skills Kit, un ensemble d'API, d'outils, de documents et d'exemples de code en libre-service qui simplifie la création de capacités (ou « compétences ») à commande vocale pour Alexa. Il vous suffit de charger un code de fonction Lambda pour la nouvelle compétence Alexa que vous créez et AWS Lambda s'occupe du reste, exécutant le code en réponse aux interactions vocales Alexa et gérant automatiquement les ressources de calcul pour vous. Consultez la documentation Alexa Skills Kit pour en savoir plus.

Q : Que se passe-t-il en cas de défaillance de ma fonction pendant le traitement d'un événement ?

Concernant les notifications des compartiments Amazon S3 et les événements personnalisés, AWS Lambda tentera d'exécuter votre fonction à trois reprises dans le cas d'une condition d'erreur dans votre code, ou d'un dépassement de la limite d'un service ou d'une ressource. Concernant les sources d'événements ordonnancées qu'AWS Lambda interroge à votre place (flux Amazon DynamoDB et Amazon Kinesis, par exemple), Lambda continuera à tenter l'exécution en cas d'erreur de code du développeur jusqu'à ce que les données expirent. Vous pouvez surveiller la progression via les consoles Amazon Kinesis et Amazon DynamoDB, et via les mesures Amazon CloudWatch qu'AWS Lambda génère pour votre fonction. Vous pouvez également définir des alarmes Amazon CloudWatch en fonction de vos taux d'erreurs et de limitation d'exécution.

Utilisation d'AWS Lambda pour concevoir des applications

Q : Qu'est-ce qu'une application sans serveur ?

Les applications basées sur Lambda (également appelées applications sans serveur) se composent de fonctions déclenchées par des événements. En règle générale, une application sans serveur contient une ou plusieurs fonctions déclenchées par des événements tels que le chargement d'objets dans Amazon S3, des notifications Amazon SNS ou des actions d'API. Ces fonctions peuvent être autonomes ou s'appuyer sur d'autres ressources, comme des tables DynamoDB ou des compartiments Amazon S3. Dans sa forme la plus rudimentaire, une application sans serveur est tout simplement une fonction.

Q : Comment déployer et gérer une application sans serveur ?

Vous pouvez déployer et gérer votre application sans serveur à l'aide du modèle d'application sans serveur AWS (AWS Serverless Application Model, ou AWS SAM). AWS SAM est une spécification qui prévoit les règles d'expression des applications sans serveur sur AWS. Cette spécification est conforme à la syntaxe utilisée actuellement par AWS CloudFormation et est prise en charge nativement au sein de ce service en tant qu'ensemble de ressources (appelé « ressources sans serveur »). Grâce à ces ressources, les clients AWS peuvent utiliser plus facilement CloudFormation afin de configurer et de déployer des applications sans serveur à l'aide d'API CloudFormation existantes.

Q : Comment puis-je découvrir des applications sans serveur existantes développées par la communauté AWS ?

Vous pouvez faire votre choix parmi un éventail d'applications sans serveur publiées par des développeurs, des entreprises et des partenaires de la communauté AWS à l'aide du référentiel AWS Serverless Application Repository. Après avoir trouvé une application, vous pouvez la configurer et la déployer directement à partir de la console Lambda.

Q : Comment automatiser le déploiement d'une application sans serveur ?

Vous pouvez automatiser le processus de publication de votre application sans serveur à l'aide d'AWS CodePipeline et d'AWS CodeDeploy. CodePipeline est un service de diffusion continue qui vous permet de modéliser, visualiser et automatiser les étapes nécessaires à la publication de votre application sans serveur. CodeDeploy vous offre un moteur d'automatisation de déploiement pour vos applications reposant sur Lambda. CodeDeploy vous permet d'orchestrer vos déploiements selon des méthodologies établies et recommandées, comme les déploiements « canary » et linéaires. Il vous aide également à mettre en place les garde-fous nécessaires pour vérifier que le code qui vient d'être déployé est sûr, stable et prêt à passer totalement en production.

Pour en savoir plus sur les déploiements/intégrations continus sans serveur, consultez notre documentation.

Q : Comment commencer à concevoir une application sans serveur ?

Pour commencer, accédez à la console AWS Lambda et téléchargez un des plans détaillés. Le téléchargement inclut un fichier AWS SAM (qui définit les ressources AWS de votre application) et un fichier .ZIP (qui inclut le code de votre fonction). Vous pouvez alors utiliser les commandes AWS CloudFormation pour créer un package destiné à l'application sans serveur que vous venez de télécharger et la déployer. Pour plus de détails, consultez la documentation.

Q : Comment coordonner les appels entre plusieurs fonctions AWS Lambda ?

Vous pouvez avoir recours à l'outil AWS Step Functions pour coordonner un ensemble de fonctions AWS Lambda selon un ordre précis. Il est possible d'invoquer plusieurs fonctions Lambda de manière séquentielle, en transmettant le résultat de sortie de l'une à la suivante, et/ou en parallèle ; l'outil Step Functions se charge de maintenir leur état pendant les exécutions.

Q : Comment puis-je réparer une application sans serveur ?

Vous pouvez autoriser votre fonction Lamba à effectuer un traçage avec AWS X-Ray en ajoutant les autorisations X-Ray au rôle d'exécution de votre fonction Lamba et en réglant le « mode de traçage » de votre fonction sur « actif ». Lorsque X-Ray est activé pour votre fonction Lambda, AWS Lambda émet des données de traçabilité à X-Ray concernant les frais de service de Lambda cumulés lors de l'appel de votre fonction. Ainsi, vous obtenez des informations telles que les frais de service de Lambda, le temps d'initialisation de la fonction et le temps d'exécution de celle-ci. De plus, vous pouvez inclure le kit SDK X-Ray dans votre package de déploiement Lambda. De cette manière, vous créez vos propres segments traces, annotez vos traces ou affichez les segments traces pour les appels en aval réalisés par votre fonction Lamba. Les kits SDK X-Ray sont actuellement disponibles pour Node.js et Java. Consultez Troubleshooting Lambda-based applications pour en savoir plus. Les tarifs d'AWS X-Ray s'appliquent.

Q : Quel est le modèle de licences pour AWS SAM ?

La spécification est en open source sous Apache 2.0, ce qui permet à chacun d'adopter et d'intégrer AWS SAM dans les outils de conception, de déploiement, de surveillance et de gestion avec une licence autorisant un usage commercial. Vous pouvez accéder au répertoire AWS SAM sur GitHub ici.

Lambda@Edge

Q : Qu'est-ce que Lambda@Edge ?

Lambda@Edge vous permet d'exécuter du code dans des emplacements AWS du monde entier, sans mettre en service ni gérer de serveurs, répondant aux utilisateurs finaux à la latence réseau la plus faible. Il vous suffit de charger votre code Node.js dans AWS Lambda et de configurer votre fonction pour qu'elle se déclenche en réponse aux requêtes Amazon CloudFront (par exemple, quand une demande utilisateur arrive, quand une demande est transmise à l'origine ou renvoyée par celle-ci, ou juste avant de répondre à l'utilisateur final). Le code est ensuite prêt à s'exécuter aux emplacements AWS du monde entier lors de la réception d'une demande de contenu. Il se dimensionne en fonction du volume des requêtes Amazon CloudFront à l'échelle mondiale. Pour en savoir plus, reportez-vous à notre documentation.

Q : Comment utiliser Lambda@Edge ?

Pour utiliser Lambda@Edge, il vous suffit de charger votre code dans AWS Lambda et d'associer une version de la fonction pour qu'elle se déclenche en réponse aux requêtes Amazon CloudFront. Le code doit respecter les limites de service de Lambda@Edge. Pour le moment, Lambda@Edge prend uniquement en charge les fonctions Node.js pour l'invocation à l'échelle mondiale par les événements Amazon CloudFront. Pour en savoir plus, reportez-vous à notre documentation.

Q : Dans quels cas dois-je utiliser Lambda@Edge ?

Lambda@Edge est optimisé pour les cas d'utilisation sensibles à la latence si vos utilisateurs finaux sont répartis aux quatre coins du monde. Idéalement, toutes les informations dont vous avez besoin pour prendre une décision se trouvent à l'emplacement périphérique d'Amazon CloudFront, dans la fonction et la requête. Cela signifie que lorsque vous cherchez à décider du mode de diffusion d'un contenu en fonction des caractéristiques de l'utilisateur (lieu, appareil client utilisé, etc.), vous pouvez le faire directement depuis l'emplacement périphérique dans Node.js-6.10, sans avoir à repasser par un serveur centralisé.

Q : Puis-je déployer mes fonctions Lambda existantes pour l'invocation à l'échelle mondiale ?

Vous pouvez associer des fonctions Lambda Node.js-6.10 existantes aux événements Amazon CloudFront pour une invocation à l'échelle mondiale si la fonction respecte les limites de service de Lambda@Edge. Cliquez ici pour savoir comment mettre à jour les propriétés de vos fonctions.

Q : Quels événements Amazon CloudFront peuvent servir à déclencher mes fonctions ?

Vos fonctions se déclenchent automatiquement suite aux événements Amazon CloudFront suivants :

  • Requête utilisateur – cet événement se produit lorsqu'un utilisateur final ou un appareil sur Internet adresse une requête HTTP(S) à CloudFront et que la requête arrive à l'emplacement périphérique le plus proche de cet utilisateur.
  • Réponse utilisateur – cet événement se produit lorsque le serveur CloudFront en périphérie est prêt à répondre à l'utilisateur final ou à l'appareil ayant formulé la requête.
  • Requête d'origine – cet événement se produit lorsque le serveur CloudFront en périphérie n'a pas l'objet demandé en cache et que la requête utilisateur est prête à être envoyée à votre serveur Web d'origine en backend (par exemple Amazon EC2, Application Load Balancer ou Amazon S3).
  • Réponse d'origine – cet événement se produit lorsque le serveur CloudFront en périphérie reçoit une réponse de votre serveur d'origine en backend.

Q : En quoi AWS Lambda@Edge est-il différent d'AWS Lambda dans son utilisation derrière Amazon API Gateway ?

La différence, c'est qu'API Gateway et Lambda sont des services régionaux. L'utilisation de Lambda@Edge et Amazon CloudFront vous permet d'exécuter une logique sur plusieurs emplacements AWS basés sur l'emplacement de vos visionneurs finaux.

Evolutivité et disponibilité

Q : Quelle est la disponibilité des fonctions AWS Lambda ?

AWS Lambda est conçu pour fournir, via la réplication et la redondance, une haute disponibilité à la fois pour le service lui-même et pour les fonctions qu'il exploite. Il n'y a ni fenêtres de maintenance ni arrêts programmés.

Q : Mes fonctions AWS Lambda restent-elles disponibles lorsque je modifie mon code ou sa configuration ?

Oui. Lors de la mise à jour d'une fonction Lambda, un petit laps de temps, généralement inférieur à une minute, se produit lorsque les requêtes peuvent être distribuées via l'ancienne ou la nouvelle version de votre fonction.

Q : Peut-on exécuter simultanément autant de fonctions AWS Lambda qu'on le souhaite ?

Non. AWS Lambda est conçu pour exécuter plusieurs instances de vos fonctions en parallèle. Toutefois, une limitation de sécurité s'applique par défaut par compte et par région au nombre d'exécutions simultanées dans AWS Lambda (suivez ce lien pour obtenir des informations sur les limites de sécurité appliquées par défaut). Vous pouvez également contrôler le nombre maximal d'exécutions simultanées pour des fonctions AWS Lambda individuelles, que vous pouvez utiliser pour réserver une part de la limite d'utilisation simultanée de votre compte ou limiter la vitesse de trafic vers les ressources en aval.

Si vous souhaitez soumettre une demande pour augmenter la limite par défaut, vous pouvez accéder à notre Centre de support, cliquer sur « Open a new case » (Créer un nouveau dossier), puis remplir une demande d'augmentation de la limite de service.

Q : Que se passe-t-il si mon compte dépasse la limite par défaut d'exécutions simultanées ?

Si vous dépassez cette limite, un message d'erreur de limitation (code d'erreur 429) apparaîtra chaque fois qu'une fonction AWS Lambda sera appelée simultanément. Les fonctions Lambda appelées de manière asynchrone peuvent supporter, dans la mesure du raisonnable, des pics de trafic d'environ 15 à 30 minutes. Au-delà de cette période, les événements entrants seront automatiquement limités. Lorsque la fonction Lambda est appelée en réponse à des événements Amazon S3, des événements rejetés par AWS Lambda peuvent être conservés et relancés par S3 durant 24 heures. Les événements provenant des flux Amazon Kinesis et Amazon DynamoDB sont relancés jusqu'à ce que la fonction Lambda s'exécute avec succès ou que les données expirent. Amazon Kinesis et Amazon DynamoDB Streams conservent les données pendant 24 heures.

Q : Une limite par défaut est-elle appliquée au niveau de chaque fonction ?

Non, la limite par défaut s'applique uniquement au niveau du compte.

Q : Que se passe-t-il en cas de défaillance de ma fonction Lambda pendant le traitement d'un événement ?

En cas d'échec, les fonctions Lambda étant appelées de façon synchrone répondront via une exception. Les fonctions Lambda invoquées de manière asynchrone donnent lieu à au moins 3 nouvelles tentatives. Les événements provenant des flux Amazon Kinesis et Amazon DynamoDB sont relancés jusqu'à ce que la fonction Lambda s'exécute avec succès ou que les données expirent. Les flux Kinesis et DynamoDB conservent les données pendant 24 heures minimum.

Q : Que se passe-t-il si les appels de mes fonctions Lambda épuisent toutes les tentatives disponibles ?

Si vous dépassez le nombre de tentatives fixé pour les appels asynchrones, vous pouvez configurer une « file d'attente de lettre morte » (Dead Letter Queue, DLQ) dans laquelle placer l'événement ; en l'absence de DLQ configurée, l'événement risque d'être rejeté. Si vous dépassez le nombre de tentatives fixé pour les appels basés sur les flux, les données expirent et sont rejetées.

Q : Quelles ressources puis-je configurer en tant que file d'attente de lettre morte pour une fonction Lambda ?

Vous pouvez configurer une file d'attente Amazon SQS ou une rubrique Amazon SNS en tant que file d'attente de lettre morte.

Contrôle de la sécurité et des accès

Q : Comment puis-je autoriser ma fonction AWS Lambda à accéder à d'autres ressources AWS ?

Vous pouvez autoriser votre fonction Lambda à accéder à d'autres ressources à l'aide d'un rôle IAM. AWS Lambda endosse ce rôle lors de l'exécution de votre fonction, de manière à ce que vous conserviez toujours le contrôle total et sécurisé des ressources AWS exactes qu'il peut utiliser. Pour en savoir plus sur les rôles, consultez la section Configurer AWS Lambda.

Q : Comment puis-je contrôler les compartiments (buckets) Amazon S3 à même d'appeler des fonctions AWS Lambda ?

Lorsque vous configurerez un compartiment Amazon S3 pour envoyer des messages vers une fonction AWS Lambda, une règle de politique de ressources accordant l'accès sera créée. Consultez le manuel Lambda Developer's Guide pour en savoir plus sur les politiques de ressources et les contrôles d'accès pour les fonctions Lambda.

Q : Comment puis-je contrôler quelle table Amazon DynamoDB ou quel flux Amazon Kinesis une fonction AWS Lambda peut interroger ?

Les contrôles d'accès sont gérés à l'aide du rôle de la fonction Lambda. Le rôle que vous attribuez à votre fonction Lambda détermine également la ou les ressources AWS Lambda pouvant être interrogées en son nom. Pour en savoir plus, consultez le manuel Lambda Developer's Guide.

Q : Puis-je accéder à des ressources placées derrière une instance Amazon VPC avec ma fonction AWS Lambda ?

Oui. Vous pouvez accéder à des ressources derrière Amazon VPC.

Q : Comment puis-je activer et désactiver la prise en charge du VPC pour ma fonction Lambda ?

Pour activer la prise en charge du VPC, vous devez spécifier un ou plusieurs sous-réseaux dans un même VPC et un groupe de sécurité dans la configuration de votre fonction. Pour désactiver la prise en charge du VPC, vous devez mettre à jour la configuration de votre fonction et spécifier une liste vide pour le sous-réseau et le groupe de sécurité. Ces paramètres peuvent être modifiés à l'aide des API AWS, de la CLI ou de la console de gestion AWS Lambda.

Q : Est-il possible d'accéder à plusieurs VPC à partir d'une seule fonction Lambda ?

Non. Les fonctions Lambda ne permettent d'accéder qu'à un seul VPC. Si plusieurs sous-réseaux sont spécifiés, ils doivent tous se trouver dans le même VPC. Vous pouvez vous connecter à d'autres VPC en appairant vos VPC.

Q : Les fonctions Lambda au sein d'un VPC peuvent-elles accéder à Internet et aux points de terminaison des services AWS ?

Les fonctions Lambda configurées de manière à accéder aux ressources au sein d'un VPC en particulier ne peuvent pas accéder à Internet dans leur configuration par défaut. Si vous avez besoin d'atteindre des points de terminaison externes, vous devrez créer un NAT dans votre VPC pour rediriger ce trafic, et configurer votre groupe de sécurité de manière à autoriser ce trafic sortant.

Fonctions AWS Lambda en Java

Q : Comment puis-je compiler ma fonction AWS Lambda en code Java ?

Pour compiler votre fonction Lambda, vous pouvez utiliser des outils standard, tels que Maven ou Gradle. Le processus de génération est normalement similaire à celui que vous appliqueriez pour compiler n'importe quel code Java dépendant du kit SDK AWS. Exécutez votre outil de compilation Java sur vos fichiers sources, en incluant le kit SDK AWS 1.9 (ou version ultérieure) avec ses dépendances transitives dans votre classpath. Pour plus de détails, référez-vous à la documentation.

Q : Quel environnement JVM (machine virtuelle Java) AWS Lambda utilise-t-il pour exécuter ma fonction ?

Lambda utilise la version Amazon Linux d'OpenJDK 1.8.

Fonctions AWS Lambda en Node.js

Q : Puis-je utiliser des packages avec AWS Lambda ?

Oui. Vous pouvez utiliser des packages NPM ainsi que des packages personnalisés. Cliquez ici pour en savoir plus.

Q : Puis-je exécuter d'autres programmes depuis ma fonction AWS Lambda écrite en Node.js ?

Oui. L'environnement de test intégré à Lambda vous permet d'exécuter des scripts en paquets (« shell »), des moteurs d'exécution dans d'autres langages, des tâches utilitaires de routine et des exécutables. Cliquez ici pour en savoir plus.

Q : Est-il possible d'utiliser des modules natifs avec des fonctions AWS Lambda écrites en Node.js ?

Oui. Tout module natif lié de manière statique peut être inclus dans le fichier ZIP que vous téléchargez. En cas de liaison dynamique, l'inclusion est possible si les modules sont compilés avec un chemin rpath pointant vers le répertoire racine de votre fonction Lambda. Cliquez ici pour en savoir plus.

Q : Puis-je exécuter des fichiers binaires avec une fonction AWS Lambda écrite en Node.js ?

Oui. Vous pouvez utiliser la commande child_process de Node.js pour exécuter un fichier binaire que vous avez inclus dans votre fonction ou tout exécutable d'Amazon Linux visible dans votre fonction. Il existe aussi différents packages NPM qui encapsulent des fichiers binaires de ligne de commande, par exemple node-ffmpeg. Cliquez ici pour en savoir plus.

Q : Comment déployer un code de fonction AWS Lambda écrit en Node.js ?

Pour déployer une fonction Lambda écrite en Node.js, compressez simplement au format ZIP votre code Javascript et les bibliothèques associées. Vous pouvez charger le fichier ZIP depuis votre environnement local ou spécifier un emplacement Amazon S3 où l'enregistrer. Pour plus de détails, référez-vous à la documentation.

Fonctions AWS Lambda en Python

Q : Puis-je utiliser des packages Python avec AWS Lambda ?

Oui. Vous pouvez utiliser pip pour installer tous les packages Python nécessaires.

Fonctions AWS Lambda en C#

Q : Comment intégrer et déployer une fonction AWS Lambda dans C# ?

Vous pouvez créer une fonction C# Lambda à l'aide d'un IDE Visual Studio en sélectionnant « Publish to AWS Lambda » dans l'explorateur de solutions. Autrement, vous pouvez exécuter directement la commande « dotnet lambda publish » depuis l'interface de ligne de commande DotNet sur laquelle le [patch d'outils CLI C# Lambda] est installé. Un fichier ZIP de votre code source C# est alors créé avec toutes les dépendances NuGet et vos ensembles DLL publiés. Il est ensuite automatiquement téléchargé vers AWS Lambda à l'aide du paramètre d'exécution « dotnetcore1.0 »

Autres rubriques

Q : Quelles versions d'Amazon Linux, de Node.js, de Python, de JDK, de .NET Core, des kits SDK et d'autres bibliothèques le service AWS Lambda prend-il en charge ?

Vous pouvez consulter la liste des versions prises en charge sur cette page.

Q : Puis-je modifier la version d'Amazon Linux ou de tout environnement d'exécution de langage ?

Non. AWS Lambda propose une version unique du système d'exploitation et de l'environnement d'exécution du langage à tous les utilisateurs du service.

Q : Comment puis-je enregistrer et contrôler des appels effectués vers l'API AWS Lambda ?

AWS Lambda est intégré à AWS CloudTrail. AWS CloudTrail peut enregistrer et transmettre des fichiers journaux à votre compartiment Amazon S3 qui décrivent l'utilisation de l'API de votre compte.

Q : Comment coordonner les appels entre plusieurs fonctions Lambda ?

Vous pouvez avoir recours à l'outil Amazon Step Functions pour coordonner plusieurs fonctions Lambda d'appel. Il est possible d'invoquer plusieurs fonctions Lambda en série, en transmettant le résultat de sortie de l'une à la suivante, et/ou en parallèle. Pour plus de détails, consultez notre documentation.

En savoir plus sur la tarification AWS Lambda

Visiter la page de tarification
Prêt à vous lancer ?
S'inscrire
D'autres questions ?
Contactez-nous