Applications serverless : architecture, modèles et implémentation AzureServerless apps: Architecture, patterns, and Azure implementation

Capture d’écran montrant la couverture de livre électronique applications sans serveur.

Edition v 3.0 -mise à jour vers Azure Functions v3EDITION v3.0 - Updated to Azure Functions v3

TÉLÉCHARGEMENT disponible à l’adresse suivante : https://aka.ms/serverlessbookpdfDOWNLOAD available at: https://aka.ms/serverlessbookpdf

PUBLIÉ PARPUBLISHED BY

Division Développeurs Microsoft, équipes produit .NET et Visual StudioMicrosoft Developer Division, .NET, and Visual Studio product teams

Division de Microsoft CorporationA division of Microsoft Corporation

One Microsoft WayOne Microsoft Way

Redmond, Washington 98052-6399Redmond, Washington 98052-6399

Copyright © 2018-2020 par Microsoft CorporationCopyright © 2018-2020 by Microsoft Corporation

Tous droits réservés.All rights reserved. Aucune partie du contenu de ce document ne peut être reproduite ou transmise sous quelque forme ou par quelque moyen que ce soit sans l’autorisation écrite de l’éditeur.No part of the contents of this book may be reproduced or transmitted in any form or by any means without the written permission of the publisher.

Ce document est fourni « en l’état » et exprime les points de vue et les opinions de son auteur.This book is provided "as-is" and expresses the author's views and opinions. Les points de vue, les opinions et les informations exprimés dans ce document, notamment l’URL et autres références à des sites web Internet, peuvent faire l’objet de modifications sans préavis.The views, opinions and information expressed in this book, including URL and other Internet website references, may change without notice.

Certains exemples sont fournis à titre indicatif uniquement et sont fictifs.Some examples depicted herein are provided for illustration only and are fictitious. Toute association ou lien est purement involontaire ou fortuit.No real association or connection is intended or should be inferred.

Microsoft et les marques commerciales mentionnées dans la page web « Marques » sur https://www.microsoft.com sont des marques du groupe Microsoft.Microsoft and the trademarks listed at https://www.microsoft.com on the "Trademarks" webpage are trademarks of the Microsoft group of companies.

Mac et macOS sont des marques commerciales d’Apple Inc.Mac and macOS are trademarks of Apple Inc.

Toutes les autres marques et tous les autres logos sont la propriété de leurs propriétaires respectifs.All other marks and logos are property of their respective owners.

Auteur :Author:

Jeremy Likness, responsable de programme de données .NET senior, Microsoft Corp.Jeremy Likness, Senior .NET Data Program Manager, Microsoft Corp.

Collaborateur :Contributor:

Cecil Phillip, avocat du Cloud senior, Microsoft Corp.Cecil Phillip, Senior Cloud Advocate, Microsoft Corp.

Rédacteurs :Editors:

Bill Wagner, développeur de contenu senior, Microsoft Corp.Bill Wagner, Senior Content Developer, Microsoft Corp.

Maira Wenzel, développeur de contenu senior, Microsoft Corp.Maira Wenzel, Senior Content Developer, Microsoft Corp.

Participants et réviseurs :Participants and reviewers:

Steve Smith, propriétaire, Ardalis Services.Steve Smith, Owner, Ardalis Services.

IntroductionIntroduction

Sans serveur est l’évolution des plateformes Cloud dans le sens du code natif du Cloud pur.Serverless is the evolution of cloud platforms in the direction of pure cloud native code. Il rapproche les développeurs d’une logique métier en les éloignant des problèmes d’infrastructure.Serverless brings developers closer to business logic while insulating them from infrastructure concerns. Il ne s’agit pas d’un modèle qui n’implique « aucun serveur », mais plutôt d’un modèle qui implique « moins de serveurs ».It's a pattern that doesn't imply "no server" but rather, "less server." Le code serverless est basé sur les événements.Serverless code is event-driven. Le code peut être déclenché par n’importe quoi, une requête web HTTP traditionnelle, un minuteur ou le résultat du chargement d’un fichier.Code may be triggered by anything from a traditional HTTP web request to a timer or the result of uploading a file. L’infrastructure derrière le modèle serverless permet une mise à l’échelle instantanée pour répondre à des besoins élastiques et offre une micro-facturation pour un vrai « paiement à l’utilisation. »The infrastructure behind serverless allows for instant scale to meet elastic demands and offers micro-billing to truly "pay for what you use." Le modèle serverless demande de penser et d’approcher autrement la création d’applications et n’est pas la solution à tous les problèmes.Serverless requires a new way of thinking and approach to building applications and isn't the right solution for every problem. En tant que développeur, vous devez déterminer :As a developer, you must decide:

  • Quels sont les avantages et les inconvénients du modèle serverless ?What are the pros and cons of serverless?
  • Pourquoi devriez-vous envisager le modèle serverless pour vos propres applications ?Why should you consider serverless for your own applications?
  • Comment générer, tester, déployer et gérer votre code serverless ?How can you build, test, deploy, and maintain your serverless code?
  • Où est-il judicieux de migrer du code vers un modèle serverless dans les applications existantes, et quel est le meilleur moyen d’accomplir cette transformation ?Where does it make sense to migrate code to serverless in existing applications, and what is the best way to accomplish this transformation?

À propos de ce guideAbout this guide

Ce guide se concentre sur le développement natif cloud des applications qui utilisent le modèle serverless.This guide focuses on cloud native development of applications that use serverless. Il met en avant les avantages, présente les éventuels inconvénients de développer des applications serverless et fournit une étude des architectures serverless.The book highlights the benefits and exposes the potential drawbacks of developing serverless apps and provides a survey of serverless architectures. De nombreux exemples d’utilisation du modèle serverless sont illustrés avec différents modèles de conception serverless.Many examples of how serverless can be used are illustrated along with various serverless design patterns.

Ce guide décrit les composants de la plateforme serverless Azure et se concentre en particulier sur l’implémentation du modèle serverless avec Azure Functions.This guide explains the components of the Azure serverless platform and focuses specifically on implementation of serverless using Azure Functions. Vous allez non seulement découvrir les déclencheurs et les liaisons, mais aussi comment implémenter des applications serverless qui s’appuient sur l’état à l’aide de fonctions durables.You'll learn about triggers and bindings as well as how to implement serverless apps that rely on state using durable functions. Enfin, des exemples et des études de cas en entreprise vont vous permettre d’avoir du contexte et un cadre de référence pour déterminer si le modèle serverless est la bonne approche pour vos projets.Finally, business examples and case studies will help provide context and a frame of reference to determine whether serverless is the right approach for your projects.

Évolution des plateformes cloudEvolution of cloud platforms

Le modèle serverless est le point culminant de plusieurs itérations de plateformes cloud.Serverless is the culmination of several iterations of cloud platforms. L’évolution a commencé par les centres de données physiques pour continuer avec les infrastructures IaaS (Infrastructure as a service) et les plateformes PaaS (Platform as a Service).The evolution began with physical metal in the data center and progressed through Infrastructure as a Service (IaaS) and Platform as a Service (PaaS).

Du local au serverless

Avant le cloud, une délimitation perceptible existait entre le développement et les opérations.Before the cloud, a discernible boundary existed between development and operations. Le déploiement d’une application supposait de répondre à une multitude de questions comme :Deploying an application meant answering myriad questions like:

  • Quel matériel doit être installé ?What hardware should be installed?
  • Comment l’accès physique à l’ordinateur est sécurisé ?How is physical access to the machine secured?
  • Faut-il un onduleur pour le centre de données ?Does the data center require an Uninterruptible Power Supply (UPS)?
  • Où sont envoyées les sauvegardes de stockage ?Where are storage backups sent?
  • Un système d’alimentation redondant doit-il être envisagé ?Should there be redundant power?

La liste s’allongeait et la surcharge était énorme.The list goes on and the overhead was enormous. Dans de nombreux cas, les services informatiques étaient obligés de gaspiller considérablement.In many situations, IT departments were forced to deal with incredible waste. Le gaspillage était dû à une allocation excessive de serveurs en tant qu’ordinateurs de sauvegarde pour la récupération d’urgence et les serveurs de secours pour permettre la montée en puissance parallèle. Heureusement, l’introduction de la technologie de virtualisation (comme Hyper-V) avec des machines virtuelles (VM) a donné lieu à l’infrastructure en tant que service (IaaS).The waste was due to over-allocation of servers as backup machines for disaster recovery and standby servers to enable scale-out. Fortunately, the introduction of virtualization technology (like Hyper-V) with Virtual Machines (VMs) gave rise to Infrastructure as a Service (IaaS). Avec une infrastructure virtualisée, des opérations permettaient de définir un ensemble standard de serveurs comme épine dorsale, donnant ainsi un environnement flexible capable de provisionner des serveurs uniques « à la demande ».Virtualized infrastructure allowed operations to set up a standard set of servers as the backbone, leading to a flexible environment capable of provisioning unique servers "on demand." Plus important, la virtualisation préparait le terrain pour utiliser le cloud afin de fournir des machines virtuelles « en tant que service ».More important, virtualization set the stage for using the cloud to provide virtual machines "as a service." Les entreprises pouvaient alors aisément arrêter de se préoccuper du système d’alimentation redondant ou des ordinateurs physiques.Companies could easily get out of the business of worrying about redundant power or physical machines. Elles se concentraient plutôt sur l’environnement virtuel.Instead, they focused on the virtual environment.

IaaS implique quand même une surcharge conséquente parce que les opérations sont encore responsables de différentes tâches.IaaS still requires heavy overhead because operations is still responsible for various tasks. Il s’agit notamment des tâches suivantes :These tasks include:

  • Correction et sauvegarde des serveurs.Patching and backing up servers.
  • Installation de packages.Installing packages.
  • Mise à jour du système d’exploitation.Keeping the operating system up-to-date.
  • Supervision de l’application.Monitoring the application.

L’évolution d’après a réduit la surcharge avec l’introduction des plateformes PaaS.The next evolution reduced the overhead by providing Platform as a Service (PaaS). Avec PaaS, le fournisseur de cloud gère les systèmes d’exploitation, les correctifs de sécurité et même les packages nécessaires à la prise en charge d’une plateforme spécifique.With PaaS, the cloud provider handles operating systems, security patches, and even the required packages to support a specific platform. Au lieu de créer une machine virtuelle, puis de configurer .NET et des serveurs Internet Information Services (IIS), les développeurs choisissent simplement une « plateforme cible » telle que « application Web » ou « point de terminaison d’API » et déploient du code directement.Instead of building a VM then configuring .NET and standing up Internet Information Services (IIS) servers, developers simply choose a "platform target" such as "web application" or "API endpoint" and deploy code directly. Les questions d’infrastructure se réduisent à :The infrastructure questions are reduced to:

  • Quels services de taille sont nécessaires ?What size services are needed?
  • Comment les services montent en charge (ajout d’autres serveurs ou nœuds) ?How do the services scale out (add more servers or nodes)?
  • Comment les services montent en puissance (augmentation de la capacité des serveurs ou des nœuds d’hébergement) ?How do the services scale up (increase the capacity of hosting servers or nodes)?

Le modèle serverless réduit davantage la place des serveurs en se concentrant sur du code basé sur les événements.Serverless further abstracts servers by focusing on event-driven code. Au lieu d’une plateforme, les développeurs peuvent se concentrer sur un microservice qui fait une seule chose.Instead of a platform, developers can focus on a microservice that does one thing. Les deux questions clés pour générer le code serverless se résument à :The two key questions for building the serverless code are:

  • Qu’est-ce qui déclenche le code ?What triggers the code?
  • Que fait le code ?What does the code do?

Avec le modèle serverless, l’infrastructure est réduite.With serverless, infrastructure is abstracted. Dans certains cas, le développeur n’a plus à se préoccuper de l’hôte du tout.In some cases, the developer no longer worries about the host at all. Qu’une instance IIS, Kestrel, Apache ou autre serveur web s’exécute ou pas pour gérer les demandes web, le développeur se concentre sur un déclencheur HTTP.Whether or not an instance of IIS, Kestrel, Apache, or some other web server is running to manage web requests, the developer focuses on an HTTP trigger. Le déclencheur fournit la charge utile multiplateforme standard de la requête.The trigger provides the standard, cross-platform payload for the request. La charge utile non seulement simplifie le processus de développement, mais facilite aussi les tests et rend parfois le code facilement portable sur plusieurs plateformes.The payload not only simplifies the development process, but facilitates testing and in some cases, makes the code easily portable across platforms.

Une autre fonctionnalité du modèle serverless est la micro-facturation.Another feature of serverless is micro-billing. Il est courant que les applications web hébergent les points de terminaison des API web.It's common for web applications to host Web API endpoints. Dans les implémentations traditionnelles de systèmes nus, IaaS et même PaaS, les ressources pour héberger les API sont tout le temps payantes.In traditional bare metal, IaaS and even PaaS implementations, the resources to host the APIs are paid for continuously. Cela signifie que vous payez pour héberger les points de terminaison même quand ils n’enregistrent aucun accès.That means you pay to host the endpoints even when they aren't being accessed. Vous constaterez souvent qu’une API est plus appelée que les autres, du coup l’intégralité du système est mis à l’échelle en fonction de la prise en charge des points de terminaison populaires.Often you'll find one API is called more than others, so the entire system is scaled based on supporting the popular endpoints. Avec le modèle serverless, vous pouvez mettre à l’échelle chaque point de terminaison indépendamment et payer à l’utilisation pour éviter d’être facturé quand les API ne sont pas appelées.Serverless enables you to scale each endpoint independently and pay for usage, so no costs are incurred when the APIs aren't being called. Dans de nombreux cas, la migration peut réduire considérablement les frais de prise en charge des points de terminaison.Migration may in many circumstances dramatically reduce the ongoing cost to support the endpoints.

Ce que ce guide ne couvre pasWhat this guide doesn't cover

Ce guide met avant tout l’accent sur les approches d’architecture et les modèles de conception, mais ne rentre pas dans les détails d’implémentation d’Azure Functions, de Logic Apps ou autres plateformes serverless.This guide specifically emphasizes architecture approaches and design patterns and isn't a deep dive into the implementation details of Azure Functions, Logic Apps, or other serverless platforms. Par exemple, il ne couvre ni les flux de travail avancés avec Logic Apps ni les fonctionnalités Azure Functions, telles que la configuration du partage des ressources Cross-Origin (CORS), l’application de domaines personnalisés ou le chargement de certificats SSL.This guide doesn't cover, for example, advanced workflows with Logic Apps or features of Azure Functions such as configuring Cross-Origin Resource Sharing (CORS), applying custom domains, or uploading SSL certificates. Ces détails sont disponibles en ligne dans la documentation Azure Functions.These details are available through the online Azure Functions documentation.

Ressources supplémentairesAdditional resources

Public visé par ce guideWho should use the guide

Ce guide a été écrit pour les développeurs et les architectes de solutions qui veulent générer des applications d’entreprise avec .NET qui sont susceptibles d’utiliser des composants serverless localement ou dans le cloud.This guide was written for developers and solution architects who want to build enterprise applications with .NET that may use serverless components either on premises or in the cloud. Il est utile pour les développeurs, architectes et décideurs informatiques qui souhaitent :It's useful to developers, architects, and technical decision makers interested in:

  • Comprendre les avantages et les inconvénients du développement serverlessUnderstanding the pros and cons of serverless development
  • Découvrir comment approcher l’architecture serverlessLearning how to approach serverless architecture
  • Exemples d’implémentation d’applications serverlessExample implementations of serverless apps

Comment utiliser ce guideHow to use the guide

La première partie de ce guide examine pourquoi le modèle serverless est une option viable en comparant plusieurs approches d’architecture différentes.The first part of this guide examines why serverless is a viable option by comparing several different architecture approaches. Il examine à la fois la technologie et le cycle de vie du développement, car tous les aspects du développement logiciel sont impactés par les décisions d’architecture.It examines both the technology and development lifecycle, because all aspects of software development are impacted by architecture decisions. Le guide examine ensuite les cas d’usage et les modèles de conception et inclut des implémentations de référence avec Azure Functions.The guide then examines use cases and design patterns and includes reference implementations using Azure Functions. Chaque section contient des ressources supplémentaires pour en savoir plus sur un domaine en particulier.Each section contains additional resources to learn more about a particular area. Le guide se conclut par des ressources de procédures pas à pas et une exploration pratique d’une implémentation serverless.The guide concludes with resources for walkthroughs and hands-on exploration of serverless implementation.

Envoyez votre feedbackSend your feedback

Le guide et les exemples associés sont en constante évolution, donc votre feedback est le bienvenu !The guide and related samples are constantly evolving, so your feedback is welcomed! Si vous avez des commentaires sur la façon dont ce guide peut être amélioré, utilisez la section de feedback au bas des pages reposant sur GitHub issues.If you have comments about how this guide can be improved, use the feedback section at the bottom of any page built on GitHub issues.