Migration vers Google Cloud : déployer vos charges de travail

Ce document peut vous aider à planifier et concevoir la phase de déploiement de votre migration vers Google Cloud. Une fois que vous avez évalué votre environnement actuel, planifié la migration vers Google Cloud et créé votre base Google Cloud, vous pouvez déployer vos charges de travail.

Cet article fait partie d'une série en plusieurs parties :

Le diagramme suivant illustre le parcours de votre migration.

Chemin de migration en quatre phases.

La phase de déploiement est la troisième phase de votre migration vers Google Cloud, au cours de laquelle vous concevez un processus de déploiement pour vos charges de travail.

Ce document est utile si vous planifiez une migration vers Google Cloud depuis un environnement sur site, un environnement d'hébergement privé ou un autre fournisseur cloud, ou si vous souhaitez évaluer une migration potentielle afin de découvrir en quoi elle pourrait consister.

Dans ce document, nous allons passer en revue les différents types de processus de déploiement, par ordre de flexibilité, d'automatisation et de complexité, ainsi que les critères de sélection d'une approche adaptée :

  1. Déployer manuellement
  2. Déployer avec des outils de gestion de la configuration
  3. Déployer à l'aide d'outils d'orchestration des conteneurs
  4. Déployer automatiquement
  5. Déployer en appliquant le modèle Infrastructure en tant que code

Avant de déployer vos charges de travail, vous devez planifier et concevoir votre phase de déploiement. Tout d'abord, vous devez évaluer les différents types de processus de déploiement que vous pouvez mettre en œuvre pour vos charges de travail. Lorsque vous évaluez les types de processus de déploiement, vous pouvez commencer par un processus simple et passer à un processus plus complexe par la suite. Cette approche peut entraîner des résultats plus rapides, mais également provoquer des frictions lors du passage à un processus plus avancé, car vous devez absorber la dette technique accumulée lors de l'utilisation du processus simplifié. Par exemple, si vous passez d'un déploiement entièrement manuel à une solution automatisée, vous devrez peut-être gérer les mises à niveau de votre pipeline de déploiement et de vos applications.

Bien qu'il soit possible de mettre en œuvre différents types de processus de déploiement en fonction des besoins de vos charges de travail, cette approche peut également accroître la complexité de cette phase. Si vous utilisez différents types de processus de déploiement, vous bénéficierez d'une plus grande flexibilité, mais vous aurez peut-être besoin d'expertises, d'outils et de ressources adaptés à chaque processus.

Déployer manuellement

Un déploiement entièrement manuel s'appuie sur un processus de provisionnement, de configuration et de déploiement qui n'est absolument pas automatisé. Bien qu'il existe des spécifications et des listes de contrôle pour chaque étape du processus, il n'existe aucune vérification ou application automatique de ces spécifications. Un processus manuel est sujet à l'erreur humaine, non reproductible, et ses performances sont limitées par le facteur humain.

Les processus de déploiement entièrement manuels peuvent être utiles, par exemple lorsque vous devez rapidement orchestrer un test dans un environnement de bac à sable. La configuration d'un processus structuré et automatisé pour un test qui ne dure que quelques minutes peut ralentir inutilement votre rythme, en particulier pendant les premières étapes de la migration, lorsque vous pouvez manquer d'expertise dans les outils et les pratiques de conception d'un processus automatisé.

Bien que cette limitation ne soit pas présente avec Google Cloud, sachez que les déploiements entièrement manuels peuvent être votre seule option lorsque vous exploitez des environnements bare metal n'offrant pas les API de gestion nécessaires. En pareil cas, vous ne pouvez pas mettre en œuvre un processus automatisé en raison de l'absence des interfaces nécessaires. Si vous exploitez une ancienne infrastructure virtualisée qui ne permet pas l'automatisation, vous devrez peut-être utiliser un processus entièrement manuel.

Nous vous recommandons d'éviter un déploiement entièrement manuel, sauf si vous n'avez pas d'autre option.

Vous pouvez mettre en œuvre un processus de provisionnement, de configuration et de déploiement entièrement manuel à l'aide d'outils tels que Google Cloud Console, Cloud Shell, les API Cloud et le SDK Cloud.

Déployer avec des outils de gestion de la configuration

Les outils de gestion de la configuration vous permettent de configurer un environnement de manière reproductible et contrôlée. Ces outils incluent un ensemble de plug-ins et de modules qui mettent en œuvre les opérations de configuration courantes de manière native. Ces outils vous permettent de vous concentrer sur l'état final que vous souhaitez atteindre pour votre environnement, plutôt que de mettre en œuvre la logique pour atteindre cet état final. Si les opérations incluses ne sont pas suffisantes, les outils de gestion de la configuration disposent souvent d'un système d'extensions que vous pouvez utiliser pour développer vos propres modules. Bien que ces extensions soient possibles, essayez d'utiliser les modules et plug-ins prédéfinis, le cas échéant, afin d'éviter des tâches de développement et de maintenance supplémentaires.

Vous utilisez des outils de gestion de la configuration lorsque vous devez configurer des environnements. Vous pouvez également les utiliser pour provisionner votre infrastructure et mettre en œuvre un processus de déploiement pour vos charges de travail. Les processus faisant appel à des outils de gestion de la configuration sont plus pertinents que les processus de provisionnement, de configuration et de déploiement entièrement manuels, car ils sont reproductibles, contrôlables et vérifiables. Cependant, il existe plusieurs inconvénients, car les outils de gestion de la configuration ne sont pas conçus pour les tâches de provisionnement ou de déploiement. Ils ne disposent généralement pas de fonctionnalités intégrées pour mettre en œuvre une logique de provisionnement élaborée, comme la détection et la gestion des différences entre l'état réel de votre infrastructure et l'état souhaité, ou pour des processus de déploiement complexes, comme les déploiements sans temps d'arrêt ou les déploiements bleu-vert. Vous pouvez mettre en œuvre les fonctionnalités manquantes à l'aide des points d'extension mentionnés précédemment. Ces extensions peuvent entraîner des efforts supplémentaires et accroître la complexité globale du processus de déploiement, car vous avez besoin de l'expertise nécessaire pour concevoir, développer et gérer une solution de déploiement personnalisée.

Vous pouvez mettre en œuvre ce type de provisionnement, de configuration et de déploiement à l'aide d'outils tels qu'Ansible, Chef, Puppet et SaltStack.

Déployer à l'aide d'outils d'orchestration de conteneurs

Si vous avez déjà investi ou envisagez d'investir dans la conteneurisation de vos charges de travail, vous pouvez utiliser un outil d'orchestration de conteneurs pour déployer vos charges de travail.

Un outil d'orchestration de conteneurs gère l'infrastructure qui sous-tend votre environnement et accepte un large éventail d'opérations de déploiement et de blocs fonctionnels permettant de mettre en œuvre la logique de déploiement. Vous pouvez les utiliser lorsque les outils existants ne suffisent pas. En utilisant ces outils, vous pouvez vous concentrer sur la rédaction de la logique de déploiement réelle en vous appuyant sur les mécanismes fournis. Vous ne perdez pas de temps à développer des outils équivalents.

Les outils d'orchestration de conteneurs fournissent également des abstractions permettant de généraliser vos processus de déploiement à différents environnements sous-jacents. Vous n'avez donc pas besoin de concevoir ni de mettre en œuvre des processus différents pour chacun de vos environnements. Par exemple, ces outils intègrent généralement la logique de scaling et de mise à niveau des déploiements. Vous n'avez donc pas besoin de mettre cela en œuvre vous-même. Vous pouvez même commencer à exploiter ces outils pour mettre en œuvre vos processus de déploiement dans votre environnement actuel. Vous pouvez ensuite les transférer vers l'environnement cible, étant donné que ces opérations de mise en œuvre sont par essence très proches. En adoptant ces outils très tôt, vous gagnez en expérience dans l'administration des environnements de conteneurs. Cette expérience est très utile pour votre migration vers Google Cloud.

Vous pouvez utiliser un outil d'orchestration de conteneurs si vos charges de travail sont déjà conteneurisées ou si vous avez prévu de le faire par la suite. Dans ce dernier cas, vous devez effectuer une analyse approfondie de chaque charge de travail pour déterminer les éléments suivants :

  • Assurez-vous qu'une conteneurisation de la charge de travail est possible.
  • Évaluez les avantages potentiels que vous pourriez obtenir en conteneurisant la charge de travail.

Si les risques l'emportent sur les avantages de la conteneurisation, vous ne devez utiliser un outil d'orchestration de conteneurs que si vos équipes s'y sont déjà engagées et si vous ne souhaitez pas gérer d'environnements hétérogènes.

Par exemple, les solutions d'entreposage de données ne sont généralement pas déployées à l'aide d'outils d'orchestration de conteneurs, car elles ne sont pas conçues pour fonctionner dans des conteneurs éphémères.

Vous pouvez mettre en œuvre ce processus de déploiement à l'aide d'outils tels que Kubernetes et de services gérés tels que Google Kubernetes Engine sur Google Cloud. Si vous êtes intéressé par un environnement sans serveur, vous pouvez utiliser des outils tels que l'environnement flexible App Engine, Cloud Functions et Cloud Run.

Déployer automatiquement

Quels que soient les outils de provisionnement, de configuration, de déploiement et d'orchestration utilisés, vous pouvez mettre en œuvre des processus de déploiement entièrement automatisés pour réduire les erreurs humaines et pour consolider, rationaliser et standardiser les processus au sein de votre organisation. Si nécessaire, vous pouvez également insérer des étapes d'approbation manuelle dans le processus de déploiement. Cependant, toutes les étapes du déploiement restent entièrement automatisées.

Les étapes d'un pipeline de déploiement de bout en bout standard sont les suivantes :

  1. Révision du code.
  2. Intégration continue (CI).
  3. Production d'artefacts.
  4. Déploiement continu (CD), avec approbations manuelles à terme.

Vous pouvez automatiser toutes ces étapes indépendamment les unes des autres. Vous pouvez donc migrer progressivement vos processus de déploiement actuels vers une solution automatisée, ou mettre en œuvre un nouveau processus directement dans l'environnement cible. Pour que ce processus soit efficace, vous avez besoin de procédures de test et de validation à chaque étape du pipeline, pas seulement lors de la révision du code ou de l'étape d'intégration continue.

Pour chaque modification dans votre codebase, vous devez effectuer un examen approfondi afin d'évaluer la qualité de la modification. La plupart des outils de gestion de code source sont compatibles avec les révisions de code. Ils acceptent également la création et l'initialisation automatiques des révisions par examen de la zone de code source modifiée, à condition que vous ayez configuré les équipes responsables de chaque zone de votre codebase. Vous pouvez également exécuter des outils de vérification automatique sur le code source, tels que l'outil lint et les analyseurs statiques, afin d'appliquer des normes de cohérence et de qualité dans le codebase.

Une fois que vous avez examiné et intégré une modification dans le codebase, l'outil CI peut exécuter automatiquement des tests, évaluer les résultats, puis vous avertir de tout problème concernant la version actuelle. Vous pouvez ajouter de la valeur à cette étape en suivant un processus de développement piloté par les tests pour garantir une évaluation exhaustive des caractéristiques de chaque charge de travail.

Pour chaque version ayant passé les tests avec succès, vous pouvez automatiser la création des artefacts de déploiement. Ces artefacts représentent une version prête à déployer de vos charges de travail, avec les dernières modifications. Dans le cadre de la création d'artefacts, vous pouvez également effectuer une validation automatisée de l'artefact lui-même. Par exemple, vous pouvez configurer une analyse des vulnérabilités afin d'identifier les problèmes connus et n'autoriser le déploiement de l'artefact que si aucune faille n'est détectée.

Enfin, vous pouvez automatiser le déploiement de chaque artefact approuvé dans l'environnement cible. Si vous disposez de plusieurs environnements d'exécution, vous pouvez également mettre en œuvre une logique de déploiement unique pour chacun d'entre eux, en ajoutant si nécessaire des étapes d'approbation manuelle. Vous pouvez par exemple déployer automatiquement de nouvelles versions de vos charges de travail dans vos environnements de développement, d'assurance qualité et de préproduction, tout en continuant à exiger une révision et une approbation manuelles de votre équipe de contrôle de la production pour un déploiement dans votre environnement de production.

Bien qu'un processus de bout en bout entièrement automatisé soit l'une de vos meilleures options si vous avez besoin d'un processus automatisé, structuré, rationalisé et vérifiable, la mise en œuvre d'un tel processus n'est pas chose aisée. Avant d'opter pour ce type de processus, vous devez connaître clairement les avantages attendus et les coûts impliqués, et savoir si le niveau actuel des connaissances et de l'expertise de l'équipe est suffisant pour mettre en œuvre un processus de déploiement entièrement automatisé.

Vous pouvez mettre en œuvre un processus entièrement automatisé avec des outils tels que SonarQube, Jenkins, Cloud Build, Container Registry et Spinnaker.

Déployer en appliquant le modèle Infrastructure en tant que code

L'Infrastructure as code est un processus dans lequel vous traitez le provisionnement des ressources dans un environnement d'exécution de la même manière que vous gérez le code source de vos charges de travail. Par exemple, vous pouvez gérer l'intégralité du cycle de vie des ressources Google Cloud à l'aide des API Cloud et coder l'état final dans votre code source. Vous mettez ensuite en œuvre un processus de provisionnement entièrement automatisé pour votre infrastructure, semblable à celui que vous mettez en œuvre pour vos charges de travail, complété par une suite de tests complets.

Un outil de provisionnement est conçu pour amorcer votre infrastructure et la préparer pour la configuration. Il n'est pas adapté pour effectuer des tâches de configuration. C'est pourquoi, après avoir provisionné toutes les ressources de votre infrastructure, vous devez utiliser un outil de gestion de la configuration pour configurer ces ressources en fonction de vos besoins. Bien qu'il soit en théorie possible de réaliser des tâches de configuration avec des outils de provisionnement et des tâches de provisionnement avec des outils de gestion de la configuration, ces deux types d'outils sont conçus dans un but spécifique et se complètent parfaitement. Vous devez utiliser l'outil approprié pour chaque tâche. Par conséquent, utilisez des outils de provisionnement pour provisionner votre infrastructure et des outils de gestion de la configuration pour la configurer.

Si vous pouvez gérer entièrement les ressources de votre environnement cible à l'aide d'API, comme dans Google Cloud, vous devez mettre en œuvre un processus de type "Infrastructure en tant que code". Vous bénéficiez immédiatement d'une possibilité de réaliser des audits complets et de la gestion des versions pour l'ensemble de votre infrastructure cloud. En outre, vous pouvez mettre en œuvre un processus d'intégration continue et de déploiement continu (CI/CD) pour appliquer automatiquement les modifications à votre infrastructure.

En revanche, si l'environnement cible n'offre pas d'accès programmatique pour gérer et configurer les ressources, il n'est pas possible de mettre en œuvre un processus de déploiement de type "Infrastructure en tant que code". Vous devez également vous renseigner auprès de votre service des achats, car le provisionnement et la désactivation de ressources dans un environnement cloud peuvent entraîner des variations dans la facturation et les dépenses.

Vous pouvez mettre en œuvre une "Infrastructure en tant que code" avec des outils tels que Terraform et des services gérés comme Deployment Manager. Vous pouvez également utiliser des outils tels que RSpec, Serverspec et InSpec pour mettre en oœuvre des suites de tests pour votre infrastructure.

Résumé

Maintenant que vous connaissez les différentes options, que vous savez quand les utiliser et quand les éviter, et que vous avez des exemples à explorer, le graphique suivant vous permet de comparer facilement toutes les options pour vos charges de travail et vos cas d'utilisation.

Type de processus de déploiement Quand utiliser cette fonctionnalité Quand faut-il l'éviter Outils et services
Déploiement entièrement manuel Lorsque vous devez rapidement réaliser un test dans un environnement en bac à sable, ou lorsque vous travaillez avec des environnements bare metal ou avec une ancienne infrastructure virtualisée n'offrant pas les API de gestion nécessaires Chaque fois qu'il existe une autre possibilité plus gérable ND
Déploiement avec les outils de gestion de la configuration Lorsque vous devez automatiser vos déploiements manuels et que vous avez déjà considérablement investi dans des outils de gestion de la configuration pour la configuration de vos environnements Lorsque vos efforts pour surmonter les limites des outils de gestion de la configuration en termes de déploiement sont trop importants Ansible, Chef, Puppet, SaltStack
Orchestration de conteneurs Si vos charges de travail sont déjà conteneurisées ou si elles peuvent être conteneurisées à l'avenir et si vous prévoyez d'investir dans ces efforts Lorsque les pièges potentiels l'emportent sur les avantages de la conteneurisation Kubernetes, GKE, environnement flexible App Engine, Cloud Functions, Cloud Run
Automatisation des déploiements Si vous avez besoin d'un processus automatisé, structuré, simplifié et vérifiable Si vos équipes ne possèdent pas les compétences nécessaires et n'ont pas la chance d'être formées, ou si vous ne pouvez pas vous permettre de mettre en œuvre un processus entièrement automatisé SonarQube, Jenkins, Cloud Build, Container Registry, Spinnaker
Infrastructure as code Lorsque les ressources de votre environnement cible peuvent être entièrement gérées avec des API de manière automatisée Si l'environnement cible ne propose pas d'accès programmatique pour gérer et configurer les ressources Terraform, Cloud Deployment Manager

Il n'existe pas de processus de déploiement optimal, car cela dépend entièrement de votre situation actuelle, de votre niveau d'expertise et de ce que vous attendez du processus.

Obtenir de l'aide

Google Cloud vous propose différentes options et ressources pour vous aider à utiliser au mieux les services Google Cloud :

D'autres ressources pouvant vous aider dans la migration des charges de travail vers Google Cloud sont proposées dans le centre de migration Google Cloud.

Pour en savoir plus sur ces ressources, consultez la section Obtenir de l'aide du document Migration vers Google Cloud : premiers pas.

Étape suivante