Aspects fondamentaux de la mise en œuvre de la plateforme
L'ingénierie de plate-forme est une approche multidisciplinaire qui combine l'ingénierie logicielle, la conception de systèmes et l'excellence opérationnelle pour créer une infrastructure fiable et évolutive pour la création et le déploiement d'applications. À la base, il ne s’agit pas seulement de créer des plateformes robustes, mais également de créer un environnement en libre-service qui responsabilise les équipes de développement tout en garantissant l’alignement avec les objectifs commerciaux. Une initiative d’ingénierie de plate-forme réussie commence par la bonne équipe et une compréhension claire de l’espace du problème. Cette fondation permet le développement de systèmes qui rationalisent les opérations, réduisent les frictions et permettent aux développeurs de se concentrer sur la création d’applications plutôt que sur la gestion de l’infrastructure.
Une fois l’équipe en place, l’accent est mis sur l’automatisation des zones à forte charge de travail, en identifiant les tâches manuelles et répétitives qui peuvent être automatisées pour gagner du temps et réduire les erreurs. Ensuite, un inventaire des ressources existantes est essentiel, permettant aux équipes de centraliser les outils et les services, les rendant plus faciles à gérer et à faire évoluer. L’étape suivante est appelée ouvrir des chemins pavés, qui implique la création de flux de travail et d’environnements standard qui garantissent la cohérence entre les projets. Par la suite, le déploiement d’environnements en tant que service contribue à rationaliser davantage les processus, permettant aux équipes de créer rapidement des environnements à la demande. À ce stade, l’objectif principal devient l’optimisation des expériences de développement en libre-service, en permettant aux développeurs de gérer leurs flux de travail de manière indépendante tout en s’assurant qu’ils disposent des outils et du support nécessaires à leur réussite. Cette approche transforme la manière dont les équipes de développement interagissent avec l’infrastructure, créant un environnement agile et performant pour la création et la livraison d’applications.
Outre le fait d’avoir un plan de mise en œuvre clairement défini, plutôt que d’aborder l’ingénierie de la plateforme comme un concept unique et large, il peut être utile de la décomposer en quatre domaines principaux pour faciliter le processus de mise en œuvre :
- Systèmes d'ingénierie, qui incluent les outils et services qui permettent le développement, tels que CI/CD, la gestion des packages, les environnements de codage basés sur le cloud, les scanners de code et les linters, ainsi que les assistants d'intelligence artificielle (IA) tels que GitHub Copilot.
- Plateforme d’applications, qui se compose d’une sélection organisée de services utilisés comme éléments de base de piles d’applications couramment utilisées (par exemple, Azure Policy, Azure Key Vault, Azure Container Apps ou Cosmos DB).
- Modèles d'application, qui fournissent des modèles bien définis et spécifiques à l'organisation pour faciliter la fourniture de la charge de travail et s'aligner sur les meilleures pratiques.
- Fonctionnalités de libre-service pour les Développeurs, qui permettent aux Développeurs de gérer de manière autonome leurs flux de travail tout en garantissant la gouvernance et la conformité aux normes organisationnelles.
L’intégration de ces domaines dans votre stratégie de mise en œuvre réduit le travail des développeurs, favorise l’innovation et crée une expérience de développement transparente.
Créez une équipe
Dans une organisation d’ingénierie de plateforme, favoriser la bonne culture est essentiel pour le succès à long terme. La transition d’une culture réactive vers une culture proactive est essentielle, où les équipes de plateforme assument la responsabilité de créer et de maintenir des outils pour soutenir l’organisation. Ce changement est crucial pour réduire les silos de connaissances et les perturbations opérationnelles. Le succès des efforts d’ingénierie de plateforme s’aligne sur la capacité d’investissement décrite dans le modèle de capacité d’ingénierie de plateforme, qui met l’accent sur le passage par les différentes étapes de maturité organisationnelle, du provisoire à l’optimisation. Au stade provisoire, les entreprises reconnaissent la nécessité d’une ingénierie de plate-forme, mais il peut manquer un alignement complet entre les équipes de direction et de développement. À mesure que les organisations gagnent en maturité, l’adhésion des dirigeants et les changements culturels encouragent un environnement plus collaboratif et innovant dans lequel les équipes de plateforme sont habilitées à conduire des changements significatifs, permettant aux organisations d’évoluer efficacement.
Une équipe d’ingénierie de plateforme nécessite un ensemble diversifié de compétences techniques et un état d’esprit centré sur le produit pour créer et faire évoluer des plateformes de développement internes fiables, efficaces et sécurisées. Les ingénieurs de plateforme doivent maîtriser plusieurs domaines clés, notamment l'orchestration de conteneurs (par exemple, Kubernetes), les pipelines CI/CD (par exemple, GitHub Actions, Azure Pipelines) et les outils de surveillance (par exemple, Azure Monitor, Prometheus, Grafana). L’expertise dans les outils d’infrastructure en tant que code (IaC) tels que Terraform et Bicep est essentielle pour automatiser le provisionnement de l’infrastructure. De plus, les ingénieurs de plateforme doivent être à l’aise avec l’écriture de code dans des langages de script tels que Python, PowerShell ou Bash pour permettre l’automatisation et l’intégration entre les systèmes. Bien que le vivier de talents pour les ingénieurs de plateforme puisse être difficile à exploiter, une équipe performante doit combiner l’expertise de divers horizons, tels que le développement de logiciels, l’ingénierie de fiabilité du site (SRE) et les opérations informatiques.
Automatisez les zones à forte charge de travail
L’automatisation des zones à forte charge de travail représente généralement le premier chemin pavé sur la voie permettant aux développeurs de bénéficier de capacités d’auto-service. Pour le mettre en œuvre, commencez par identifier les processus fréquents, sujets aux erreurs ou nécessitant beaucoup de travail, en particulier ceux liés aux opérations manuelles ou au service d’assistance. Ensuite, évaluez des facteurs tels que la fréquence, la complexité et l’auditabilité des processus pour hiérarchiser les cibles d’automatisation. L’implémentation d’une infrastructure en tant que code (IaC) dans vos pipelines de livraison continue (CD) rationalise non seulement le déploiement des applications, mais permet également le provisionnement dynamique d’infrastructures et d’outils partagés. Utilisez des plateformes CI/CD flexibles telles que GitHub Actions et Azure DevOps, ou des solutions GitOps telles que Flux et Argo CD pour réduire les goulots d'étranglement et responsabiliser les équipes.
Au fil du temps, l’adoption du modèle « Everything as Code » (EaC) crée un cadre d’automatisation sécurisé et reproductible, utilisant des référentiels Git centralisés pour les modèles et configurations IaC (y compris, par exemple, les modèles Bicep et Azure Resource Manager, les fichiers manifestes Terraform et les graphiques Helm). Ces référentiels, gérés par une équipe d'exploitation, permettent aux développeurs de soumettre des demandes d'extraction qui sont examinées et auditées en toute sécurité avant la fusion. Les mêmes outils CI/CD peuvent ensuite provisionner et configurer n’importe quelle infrastructure, outil ou service, qu’ils soient spécifiques à une application ou partagés. Cette approche prend en charge l’évolutivité, le libre-service des développeurs et l’intégration transparente avec les processus de gouvernance, garantissant que l’ingénierie de la plateforme s’aligne sur les objectifs organisationnels tout en favorisant l’agilité opérationnelle.
L'approche « Tout comme code » consiste à représenter presque toutes les ressources ou processus sous forme de fichier dans un référentiel Git sécurisé. Les fonctionnalités de sécurité robustes de Git, telles que l'historique des validations, les contrôles d'accès, les demandes d'extraction et les protections de branches, garantissent la transparence, permettent des révisions collaboratives et appliquent des contrôles automatisés avant l'intégration des modifications. Associé aux systèmes CI/CD, cela crée un cadre polyvalent, auditable et sécurisé pour la gestion de l'infrastructure, des outils et des processus.
Inventoriez et centralisez
À mesure que les organisations se développent, le volume et la complexité de leurs actifs techniques augmentent, ce qui entraîne souvent une duplication des efforts, des projets orphelins et un gaspillage de ressources. La centralisation des stocks et du suivi des actifs est une étape essentielle de l’ingénierie des plateformes pour relever ces défis. Un système d’inventaire permet aux équipes de suivre et de gérer des actifs tels que le code, les API, les conteneurs, les VMs (VM), les autorisations, etc. Ce processus améliore non seulement la gouvernance, mais favorise également la réutilisation et améliore la découvrabilité, permettant aux équipes de fonctionner de manière plus efficace et plus efficiente.
Les inventaires centralisés jouent un rôle essentiel dans l’amélioration de la gouvernance en étiquetant et en organisant les actifs. Un balisage approprié garantit que les ressources sont associées à leurs propriétaires ou équipes respectifs, ce qui facilite la gestion des cycles de vie et la compréhension de l'impact potentiel des changements. L’amélioration de la découvrabilité est un autre avantage clé, car elle réduit la prolifération technique en aidant les équipes à trouver et à réutiliser les ressources existantes, évitant ainsi la duplication inutile des efforts. De plus, la centralisation des inventaires aide les organisations à optimiser les ressources en identifiant et en nettoyant les actifs obsolètes ou inutiles, ce qui entraîne une réduction du gaspillage et une augmentation des économies de coûts.
Différents outils prennent en charge l’inventaire et le suivi des actifs, chacun répondant à différents aspects de l’écosystème technique. Par exemple, Environnements de déploiement Azure (ADE) offre un moyen de suivre une infrastructure complexe créée via Infrastructure as Code (IaC). De même, Azure API Center permet aux développeurs de découvrir et de gérer efficacement les API. Les registres de packages tels que GitHub Packages ou Azure Artifacts offrent une valeur supplémentaire en améliorant la sécurité de la chaîne d'approvisionnement et en gérant les packages et SDK approuvés.
Pour améliorer encore les avantages des systèmes d’inventaire, les organisations peuvent établir des liens relationnels entre les actifs pour créer une vue plus complète de leur écosystème. Par exemple, la cartographie des relations entre une définition d’API, son référentiel de code, les environnements associés et les politiques de gouvernance permet aux équipes de gérer les ressources avec plus de précision.
Tracer des chemins d’accès pavés
En ingénierie de plateforme, l’analogie du « chemin pavé » traduit l’équilibre entre la promotion de l’innovation et la fourniture de conseils standardisés. Au début, les équipes peuvent emprunter des chemins variés et informels pour atteindre leurs objectifs, en expérimentant différents outils et flux de travail. Au fil du temps, les équipes de la plateforme observent les approches les plus efficaces et les plus largement adoptées et les convertissent en « chemins pavés » : des flux de travail optimisés, efficaces, conviviaux et convaincants à adopter pour les équipes.
Ce processus, souvent décrit comme « ouvrir la voie à des solutions pavées », implique l’identification de modèles communs dans les flux de travail des équipes et leur transformation en solutions standardisées et évolutives. Ces chemins intègrent de manière transparente la sécurité, les meilleures pratiques architecturales et les exigences de conformité, offrant une expérience fluide et fiable. Les développeurs bénéficient d’une charge cognitive réduite, d’API cohérentes pour l’intégration, de capacités modulaires pouvant être combinées selon les besoins et de performances prévisibles qui s’alignent sur les objectifs opérationnels.
Le modèle de capacité d’ingénierie de plateforme joue un rôle essentiel dans ce processus, en aidant les organisations à déterminer quand passer des chemins informels aux chemins pavés. Il identifie les domaines nécessitant une normalisation et fournit des indications sur la manière de faire évoluer ces pratiques de manière efficace. Cette approche structurée garantit que l’innovation n’est pas étouffée tout en maintenant l’accent sur la qualité, la conformité et la performance.
L’approche des chemins pavés encourage les bonnes pratiques sans être trop prescriptive. Il prend en charge les contributions de la communauté, permettant aux équipes de collaborer et de façonner la plateforme tout en conservant la flexibilité pour des cas d'utilisation uniques. En équilibrant innovation et standardisation, cette méthodologie favorise un environnement dans lequel les équipes peuvent exceller tout en garantissant que les exigences organisationnelles sont systématiquement respectées.
Déployer des environnements en tant que service
Le déploiement d’environnements en tant que service est conçu pour permettre un provisionnement sécurisé, standardisé et automatisé de l’infrastructure. Un principe clé de cette approche consiste à conserver les identités et les secrets de provisionnement de manière à empêcher les développeurs d’y accéder directement. Cela renforce la gouvernance tout en garantissant que les mises à jour de l’infrastructure restent sécurisées. Par exemple, les Environnements de déploiement Azure (ADE) illustrent ce modèle en prenant en charge la séparation des rôles et en centralisant la gestion des modèles IaC.
Avec ADE, les ingénieurs de la plateforme et les équipes d'exploitation créent et maintiennent en collaboration un catalogue de modèles pour des types d'environnements spécifiques. Ces modèles, enrichis de paramètres préconfigurés, intègrent des identités gérées et contrôlent les accès en fonction des rôles. Les développeurs peuvent ensuite utiliser des pipelines CI/CD pour provisionner l’infrastructure via des outils tels que Azure CLI ou Azure Developer CLI, sans avoir besoin d’un accès direct aux informations d’identification sensibles ou à l’abonnement sous-jacent. Cette séparation garantit la conformité et la sécurité tout en préservant la productivité des développeurs.
Même si ADE n’est pas utilisé, les mêmes principes peuvent être appliqués plus largement, avec un contenu d’infrastructure en tant que code (IaC) provenant d’emplacements sécurisés et immuables et une gestion secrète automatisée et isolée. En permettant ces pratiques, l’ingénierie de plateforme permet aux équipes de déployer des environnements cohérents tout en maintenant la gouvernance organisationnelle et l’efficacité opérationnelle.
Optimisez l'expérience des développeurs en libre-service
Une expérience de développement en libre-service transparente est essentielle au succès de l'ingénierie de la plateforme, mais pour y parvenir, il faut souvent rencontrer les utilisateurs là où ils se trouvent. Chaque rôle (développeurs, opérations et autres) est orienté vers des outils et des environnements spécifiques qui définissent leurs flux de travail. Pour que de nouvelles expériences soient adoptées, il est important de s’aligner sur ces « centres de gravité » existants. Une approche pragmatique implique la planification de plusieurs interfaces utilisateur adaptées aux outils déjà utilisés, permettant aux équipes de commencer par des améliorations simples, de prouver leur valeur et d’évoluer vers des solutions plus sophistiquées à mesure que les besoins surviennent.
Au lieu de créer des expériences entièrement nouvelles, envisagez d’améliorer et d’intégrer les outils existants. Les plateformes telles que les éditeurs, les environnements de développement intégrés (IDE), les suites DevOps, les outils CLI et les environnements low-code disposent souvent de modèles d'extensibilité qui permettent la personnalisation et l'extension avec une surcharge minimale. Cette approche réduit la maintenance, applique des expériences utilisateur familières et accélère l’adoption. Par exemple, les extensions IDE basées sur le Web, comme celles conçues pour VS Code ou vscode.dev, fournissent un point de départ flexible et compatible avec le Web qui peut s'adapter aux environnements de développement locaux. De même, les interfaces ChatOps dans des outils comme Microsoft Teams ou Slack offrent des moyens intuitifs de déclencher des flux de travail d’automatisation et de s’intégrer aux plateformes CI/CD.
Pour les organisations ayant besoin d’une interface centralisée, investir dans un portail de développeur personnalisé peut offrir des avantages à long terme, mais nécessite une planification et des ressources minutieuses. Des solutions comme Backstage.io, une boîte à outils initialement développée par Spotify, offrent des portails hautement personnalisables qui peuvent intégrer des plugins et des outils tiers, créant ainsi un hub dynamique centré sur les développeurs. Que vous commenciez avec des solutions légères comme Power Pages ou que vous créiez un portail complet, l'objectif est de fournir des expériences évolutives et conviviales qui responsabilisent les développeurs tout en s'alignant sur les besoins de l'organisation.