La traduction de l'article a Ă©tĂ© prĂ©parĂ©e spĂ©cialement pour les Ă©tudiants du cours . Vous ĂȘtes intĂ©ressĂ© Ă dĂ©velopper dans ce domaine ? Regardez le masterclass d'Egor Zuev (TeamLead chez InBit) et rejoignez le prochain groupe du cours : dĂ©but le 26 septembre.

De plus en plus de personnes passent Ă AWS Lambda pour sa scalabilitĂ©, ses performances, ses Ă©conomies et sa capacitĂ© Ă traiter des millions, voire des trillions de requĂȘtes par mois. Il n'est pas nĂ©cessaire de gĂ©rer l'infrastructure sur laquelle le service fonctionne. L'auto-scaling permet de traiter des milliers de requĂȘtes simultanĂ©es par seconde. Je pense qu'on peut Ă juste titre considĂ©rer AWS Lambda comme l'un des services les plus demandĂ©s d'AWS.
AWS Lambda
AWS Lambda est un service de calcul sans serveur orientĂ© Ă©vĂ©nements, qui permet d'exĂ©cuter du code sans provisionner ni administrer des serveurs et de complĂ©ter d'autres services AWS en fonction de la logique utilisateur. Lambda rĂ©agit automatiquement Ă divers Ă©vĂ©nements (les fameux dĂ©clencheurs), par exemple aux requĂȘtes HTTP via Amazon API Gateway, aux modifications de donnĂ©es dans les compartiments Amazon S3 ou dans les tables Amazon DynamoDB ; ou vous pouvez exĂ©cuter votre code via des appels API, en utilisant AWS SDK et les transitions d'Ă©tat dans AWS Step Functions.
Lambda exĂ©cute le code sur une infrastructure de calcul hautement disponible et s'occupe entiĂšrement de l'administration de la plateforme sous-jacente, y compris la gestion des serveurs et du systĂšme d'exploitation, la provision de ressources, l'auto-scaling, la surveillance du code et la gestion des logs. Vous n'avez donc qu'Ă tĂ©lĂ©charger votre code et Ă configurer comment et quand il doit ĂȘtre exĂ©cutĂ©. Le service se chargera de son exĂ©cution et garantira la haute disponibilitĂ© de votre application.
Quand passer Ă Lambda ?
AWS Lambda est une plateforme de calcul pratique, adaptée à de nombreux scénarios d'utilisation, à condition bien sûr que le langage et l'environnement d'exécution de votre code soient pris en charge par le service. Si vous souhaitez vous concentrer sur le code et la logique commerciale, en confiant la maintenance des serveurs, la provision de ressources et le scaling à un fournisseur tiers à un coût raisonnable, vous devriez définitivement passer à AWS Lambda.
Lambda est idĂ©al pour crĂ©er des interfaces de programme, et si vous utilisez le service avec API Gateway, vous pouvez rĂ©duire considĂ©rablement les coĂ»ts et accĂ©lĂ©rer votre mise sur le marchĂ©. Il existe diffĂ©rentes maniĂšres d'utiliser les fonctions Lambda et d'organiser une architecture sans serveur â chacun peut choisir quelque chose de adaptĂ© en fonction des objectifs fixĂ©s.
Lambda permet d'exĂ©cuter un large Ă©ventail de tĂąches. GrĂące Ă la prise en charge de CloudWatch, vous pouvez crĂ©er des tĂąches planifiĂ©es et automatiser certains processus. Il n'y a aucune restriction concernant la nature et l'intensitĂ© d'utilisation du service (seules la mĂ©moire et le temps sont pris en compte), et rien ne vous empĂȘche de travailler progressivement sur un microservice complet basĂ© sur Lambda.
Ici, vous pouvez crĂ©er des actions orientĂ©es services qui ne s'exĂ©cutent pas en permanence. Un exemple typique est la mise Ă l'Ă©chelle des images. MĂȘme dans le cas de systĂšmes distribuĂ©s, les fonctions Lambda conservent leur pertinence.
Ainsi, si vous ne souhaitez pas vous occuper de l'allocation et de l'administration des ressources informatiques â essayez AWS Lambda ; si vous n'avez pas besoin de calculs lourds et gourmands en ressources â essayez Ă©galement AWS Lambda ; si votre code s'exĂ©cute pĂ©riodiquement â vous avez raison, vous devriez essayer AWS Lambda.
Sécurité
Pour l'instant, aucun problĂšme de sĂ©curitĂ© n'a Ă©tĂ© signalĂ©. D'autre part, Ă©tant donnĂ© que de nombreux processus internes et caractĂ©ristiques de mise en Ćuvre de ce modĂšle sont masquĂ©s pour l'utilisateur du runtime gĂ©rĂ© d'AWS Lambda, certaines rĂšgles de sĂ©curitĂ© cloud Ă©tablies perdent de leur pertinence.
Comme la plupart des services AWS, Lambda est fourni selon le principe de responsabilitĂ© partagĂ©e entre AWS et le client en matiĂšre de sĂ©curitĂ© et de conformitĂ©. Ce principe rĂ©duit la charge opĂ©rationnelle pour le client, car AWS prend en charge les tĂąches de maintenance, d'administration et de contrĂŽle des composants du service â depuis le systĂšme d'exploitation hĂŽte et le niveau de virtualisation jusqu'Ă la sĂ©curitĂ© physique des infrastructures.
En ce qui concerne spécifiquement AWS Lambda, AWS est responsable de la gestion de l'infrastructure sous-jacente, des services de base associés, du systÚme d'exploitation et de la plateforme d'applications. Tandis que le client est responsable de la sécurité de son code, du stockage des données sensibles, du contrÎle d'accÚs à celles-ci, ainsi qu'au service et aux ressources Lambda (Identity and Access Management, IAM), y compris au sein des fonctions utilisées.
Le schéma ci-dessous présente le modÚle de responsabilité partagée applicable à AWS Lambda. La zone de responsabilité d'AWS est colorée en orange, tandis que la responsabilité du client est en bleu. Comme vous pouvez le voir, AWS assume une plus grande part de responsabilité pour les applications déployées sur le service.

ModÚle de responsabilité partagée applicable à AWS Lambda
Environnement d'exécution Lambda
Le principal avantage de Lambda est que, en exĂ©cutant une fonction en votre nom, le service alloue lui-mĂȘme les ressources nĂ©cessaires. Vous pouvez ainsi Ă©viter de perdre du temps et de l'Ă©nergie Ă administrer les systĂšmes et vous concentrer sur la logique mĂ©tier et l'Ă©criture de code.
Le service Lambda est divisé en deux plans. Le premier est le plan de gestion. Selon Wikipédia, le plan de gestion (control plane) est la partie du réseau responsable du transport du trafic de signalisation et de la routage. C'est le composant principal qui prend des décisions globales concernant l'allocation, la maintenance et la répartition des charges de travail. De plus, le plan de gestion joue le rÎle de topologie réseau du fournisseur de solutions, responsable de la routage et de la gestion du trafic.
Le deuxiÚme plan est le plan de données. Il a, tout comme le plan de gestion, ses propres tùches. Le plan de gestion fournit une API pour gérer les fonctions (CreateFunction, UpdateFunctionCode) et contrÎle l'interaction de Lambda avec d'autres services AWS. Le plan de données gÚre les appels API (Invoke API) qui exécutent les fonctions Lambda. AprÚs l'appel de la fonction, le plan de gestion alloue ou choisit un environnement d'exécution existant, préalablement préparé pour cette fonction, puis exécute le code dans celui-ci.
AWS Lambda prend en charge de nombreux langages de programmation, y compris Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2, et d'autres, via des environnements d'exĂ©cution correspondants. AWS les met rĂ©guliĂšrement Ă jour, distribue des correctifs de sĂ©curitĂ© et effectue d'autres opĂ©rations de maintenance sur ces environnements. Lambda permet d'utiliser d'autres langages Ă condition que vous intĂ©griez vous-mĂȘme l'environnement d'exĂ©cution appropriĂ©. Vous devrez alors vous occuper de sa maintenance, y compris veiller Ă la sĂ©curitĂ©.
Comment tout cela fonctionne-t-il et comment le service exécutera-t-il vos fonctions ?
Chaque fonction s'exĂ©cute dans un ou plusieurs environnements isolĂ©s, qui existent uniquement pendant le cycle de vie de cette fonction, puis sont dĂ©truits. Dans chaque environnement, une seule invocation est exĂ©cutĂ©e Ă la fois, mais il est rĂ©utilisĂ© s'il y a plusieurs invocations successives de la mĂȘme fonction. Tous les environnements d'exĂ©cution fonctionnent sur des machines virtuelles avec virtualisation matĂ©rielle, appelĂ©es microVM. Chaque microVM est attribuĂ©e Ă un compte AWS spĂ©cifique et peut ĂȘtre rĂ©utilisĂ©e par des environnements pour exĂ©cuter diffĂ©rentes fonctions dans ce compte. Les microVM sont empaquetĂ©es dans des blocs structurels de la plateforme matĂ©rielle Lambda Worker, dĂ©tenue et gĂ©rĂ©e par AWS. Le mĂȘme environnement d'exĂ©cution ne peut pas ĂȘtre utilisĂ© par diffĂ©rentes fonctions, tout comme les microVM sont uniques pour diffĂ©rents comptes AWS.

Le modĂšle d'isolation dans AWS Lambda
L'isolation des environnements d'exĂ©cution est mise en Ćuvre Ă l'aide de plusieurs mĂ©canismes. Au niveau le plus Ă©levĂ©, chaque environnement possĂšde des copies distinctes des composants suivants :
- Le code de la fonction
- Tous les layers Lambda sélectionnés pour la fonction
- L'environnement d'exécution de la fonction
- Espace utilisateur minimal basé sur Amazon Linux
Les mécanismes suivants sont appliqués pour isoler différents environnements d'exécution :
- cgroups â restriction d'accĂšs aux ressources CPU, mĂ©moire, bande passante de stockage et rĂ©seau pour chaque environnement d'exĂ©cution ;
- namespaces â regroupement des IDs de processus, des IDs d'utilisateurs, des interfaces rĂ©seau et d'autres ressources gĂ©rĂ©es par le noyau Linux. Chaque environnement d'exĂ©cution fonctionne dans son propre espace de noms ;
- seccomp-bpf â restriction des appels systĂšme qui peuvent ĂȘtre utilisĂ©s dans l'environnement d'exĂ©cution ;
- iptables et tables de routage â isolation des environnements d'exĂ©cution entre eux ;
- chroot â fourniture d'un accĂšs restreint au systĂšme de fichiers sous-jacent.
En combinaison avec les technologies propriétaires d'isolation d'AWS, les mécanismes énumérés garantissent une séparation fiable des environnements d'exécution. Les environnements ainsi isolés ne peuvent pas accéder aux données d'autres environnements ni les modifier.
Bien que plusieurs environnements d'exĂ©cution d'un mĂȘme compte AWS puissent fonctionner sur une microVM, ces microVM ne peuvent en aucun cas ĂȘtre partagĂ©es entre diffĂ©rents comptes AWS. Pour l'isolation des microVM, AWS Lambda utilise seulement deux mĂ©canismes : les instances EC2 et Firecracker. L'isolation des invitĂ©s (guest isolation) dans Lambda, basĂ©e sur des instances EC2, est mise en Ćuvre depuis 2015. Firecracker est un nouvel hyperviseur open source, spĂ©cialement conçu par AWS pour les charges de travail sans serveur et prĂ©sentĂ© en 2018. Le matĂ©riel physique sur lequel s'exĂ©cutent les microVM est partagĂ© par des charges de travail de diffĂ©rents comptes.
Conservation des environnements et des états des processus
Bien que les environnements d'exĂ©cution Lambda soient uniques pour diffĂ©rentes fonctions, il est possible de rĂ©invoker la mĂȘme fonction, c'est-Ă -dire que l'environnement d'exĂ©cution peut durer plusieurs heures avant d'ĂȘtre dĂ©truit.
Chaque environnement d'exĂ©cution Lambda dispose Ă©galement d'un systĂšme de fichiers en Ă©criture, accessible via le rĂ©pertoire /tmp. Son contenu ne peut pas ĂȘtre accĂ©dĂ© depuis d'autres environnements d'exĂ©cution. En ce qui concerne la conservation des Ă©tats des processus, les fichiers Ă©crits dans /tmp existent pendant tout le cycle de vie de l'environnement d'exĂ©cution. Cela permet d'accumuler les rĂ©sultats de plusieurs appels, ce qui est particuliĂšrement utile pour des opĂ©rations coĂ»teuses, comme le chargement de modĂšles d'apprentissage automatique.
Transmission des données d'appels
L'interface Invoke API peut ĂȘtre utilisĂ©e en deux modes : le mode Ă©vĂ©nement et le mode « demande - rĂ©ponse ». En mode Ă©vĂ©nement, l'appel est ajoutĂ© Ă une file d'attente pour une exĂ©cution ultĂ©rieure. En mode « demande - rĂ©ponse », la fonction est appelĂ©e immĂ©diatement avec la charge utile fournie, aprĂšs quoi une rĂ©ponse est renvoyĂ©e. Dans les deux cas, la fonction s'exĂ©cute dans l'environnement Lambda, mais avec des chemins de charge utile diffĂ©rents.
Lors des appels de type « requĂȘte-rĂ©ponse », la charge utile provient de l'API de traitement des requĂȘtes (API Caller), telle que AWS API Gateway ou AWS SDK, vers le rĂ©partiteur de charge, puis vers le service d'exĂ©cution des appels Lambda (Invoke Service). Ce dernier dĂ©termine l'environnement appropriĂ© pour exĂ©cuter la fonction et y transfĂšre la charge utile pour finaliser l'appel. Le rĂ©partiteur de charge reçoit le trafic avec protection TLS via Internet. Le trafic Ă l'intĂ©rieur du service Lambda â aprĂšs le rĂ©partiteur de charge â passe par le VPC interne dans la rĂ©gion AWS spĂ©cifiĂ©e.

ModĂšle de traitement des appels AWS Lambda : mode « requĂȘte-rĂ©ponse »
Les appels basĂ©s sur des Ă©vĂ©nements peuvent ĂȘtre exĂ©cutĂ©s immĂ©diatement ou ĂȘtre mis en file d'attente. Dans certains cas, la file d'attente est mise en Ćuvre Ă l'aide du service Amazon SQS (Amazon Simple Queue Service), qui transmet les appels au service d'exĂ©cution des appels Lambda par le biais d'un processus d'interrogation interne (poller). Le trafic transmis est protĂ©gĂ© par TLS, sans qu'aucun cryptage supplĂ©mentaire des donnĂ©es stockĂ©es dans Amazon SQS ne soit prĂ©vu.
Les appels basĂ©s sur des Ă©vĂ©nements ne renvoient pas de rĂ©ponses â toute information de rĂ©ponse est simplement ignorĂ©e par Lambda Worker. Les appels basĂ©s sur des Ă©vĂ©nements provenant d'Amazon S3, d'Amazon SNS, de CloudWatch et d'autres sources sont traitĂ©s par le service Lambda en mode Ă©vĂ©nement. Les appels des flux Amazon Kinesis et DynamoDB, les appels des files d'attente SQS, du rĂ©partiteur de charge d'applications et de l'API Gateway sont traitĂ©s en mode « requĂȘte-rĂ©ponse ».
Surveillance
Vous pouvez surveiller et auditer les fonctions Lambda à l'aide de divers mécanismes et services AWS, y compris les suivants.
Amazon CloudWatch
Collecte diverses statistiques, telles que le nombre de requĂȘtes, la durĂ©e des requĂȘtes et le nombre de requĂȘtes ayant Ă©chouĂ©.
Amazon CloudTrail
Permet de conserver des journaux, de surveiller en continu et d'enregistrer des informations sur l'activité de votre compte, en lien avec votre infrastructure AWS. Vous aurez une chronologie complÚte des actions effectuées via la console de gestion AWS, l'AWS SDK, les outils de ligne de commande et d'autres services AWS.
AWS X-Ray
Fournit une visibilitĂ© complĂšte sur toutes les Ă©tapes de traitement des requĂȘtes dans votre application, en fonction de la carte de ses composants internes. Permet d'analyser les applications pendant le dĂ©veloppement et en environnement de production.
AWS Config
Vous pourrez suivre les modifications de la configuration des fonctions Lambda (y compris leur suppression) et de l'environnement d'exécution, des balises, des noms de gestionnaires, de la taille du code, de la répartition de la mémoire, des paramÚtres de temporisation et de parallélisme, ainsi que du rÎle d'exécution IAM Lambda, des sous-réseaux et des liaisons de groupes de sécurité.
Conclusion
AWS Lambda propose un puissant ensemble d'outils pour crĂ©er des applications sĂ©curisĂ©es et Ă©volutives. De nombreuses mĂ©thodes de sĂ©curitĂ© et de conformitĂ© dans AWS Lambda sont similaires Ă celles utilisĂ©es dans les autres services AWS, bien qu'il y ait des exceptions. Ă compter de mars 2019, Lambda est conforme aux exigences SOC 1, SOC 2, SOC 3, PCI DSS, Ă la loi amĂ©ricaine sur la continuitĂ© et la responsabilitĂ© des soins de santĂ© (HIPAA) et Ă d'autres rĂ©glementations. Ainsi, lorsque vous envisagez de mettre en Ćuvre une nouvelle application, envisagez le service AWS Lambda â il pourrait ĂȘtre parfaitement adaptĂ© Ă vos besoins.
Source : habr.com
