Déployer dans Compute Engine (original) (raw)


Ce guide explique comment effectuer des déploiements bleu/vert sans temps d'arrêt sur des groupes d'instances gérés (MIG, Managed Instance Groups) Compute Engine à l'aide de Cloud Build et de Terraform.

Cloud Build vous permet d'automatiser divers processus de développement, y compris la création et le déploiement d'applications sur différents Google Cloud environnements d'exécution tels que Compute Engine, Google Kubernetes Engine, GKE Enterprise et fonctions Cloud Run.

Les MIG Compute Engine vous permettent d'exécuter des applications sur plusieurs machines virtuelles (VM) identiques. Vous pouvez rendre vos charges de travail évolutives et disponibilité élevée en tirant parti des services de MIG automatisés, comme l'autoscaling, l'autoréparation, le déploiement régional (multizone) et la mise à jour automatique. À l'aide du modèle de déploiement continu bleu/vert, vous apprendrez à transférer progressivement le trafic utilisateur d'un MIG (bleu) vers un autre MIG (vert), tous deux en production.

Présentation de la conception

Le diagramme suivant montre le modèle de déploiement bleu/vert utilisé par l'exemple de code décrit dans ce document:

Modèle bleu-vert

De manière générale, ce modèle comprend les composants suivants:

Les pools de VM bleus et verts sont implémentés en tant que MIG Compute Engine, et les adresses IP externes sont routées vers les VM du MIG à l'aide d'équilibreurs de charge HTTP(S) externes. L'exemple de code décrit dans ce document utilise Terraform pour configurer cette infrastructure.

Le schéma suivant illustre les opérations de développement qui se produisent lors du déploiement:

Flux des opérations des développeurs

Dans le diagramme ci-dessus, les flèches rouges représentent le flux de démarrage qui se produit lorsque vous configurez l'infrastructure de déploiement pour la première fois, et les flèches bleues représentent le flux GitOps qui se produit à chaque déploiement.

Pour configurer cette infrastructure, vous exécutez un script de configuration qui lance le processus de démarrage et configure les composants du flux GitOps.

Le script de configuration exécute un pipeline Cloud Build qui effectue les opérations suivantes:

Le déclencheur apply est associé à un fichier Terraform nommé main.tfvars dans Cloud Source Repositories. Ce fichier contient les variables Terraform représentant les équilibreurs de charge bleu et vert.

Pour configurer le déploiement, vous devez mettre à jour les variables dans le fichier main.tfvars. Le déclencheur apply exécute un pipeline Cloud Build qui exécute tf_apply et effectue les opérations suivantes:

Le déclencheur de destruction est déclenché manuellement pour supprimer toutes les ressources créées par le déclencheur d'application.

Objectifs

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux Google Cloud utilisateurs peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
  4. To initialize the gcloud CLI, run the following command:
    gcloud init
  5. Create or select a Google Cloud project.
    • Create a Google Cloud project:
      gcloud projects create PROJECT_ID
      Replace PROJECT_ID with a name for the Google Cloud project you are creating.
    • Select the Google Cloud project that you created:
      gcloud config set project PROJECT_ID
      Replace PROJECT_ID with your Google Cloud project name.
  6. Make sure that billing is enabled for your Google Cloud project.
  7. Install the Google Cloud CLI.
  8. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
  9. To initialize the gcloud CLI, run the following command:
    gcloud init
  10. Create or select a Google Cloud project.
  1. Make sure that billing is enabled for your Google Cloud project.

Essayez-le !

  1. Exécutez le script de configuration à partir du dépôt d'exemples de code Google:
bash <(curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-build-samples/main/mig-blue-green/setup.sh)  
  1. Lorsque le script de configuration demande le consentement de l'utilisateur, saisissez yes (Oui).
    L'exécution du script se termine en quelques secondes.
  2. Dans la console Google Cloud , ouvrez la page Historique de compilation de Cloud Build:
    Ouvrir la page "Historique de compilation"
  3. Cliquez sur le dernier build.
    La page Détails de la compilation s'affiche. Elle présente un pipeline Cloud Build avec trois étapes de compilation: la première crée un dépôt dans Cloud Source Repositories, la deuxième clone le contenu de l'exemple de dépôt dans GitHub dans Cloud Source Repositories, et la troisième ajoute deux déclencheurs de compilation.
  4. Ouvrez Cloud Source Repositories:
    Ouvrir Cloud Source Repositories
  5. Dans la liste des dépôts, cliquez sur copy-of-gcp-mig-simple.
    Dans l'onglet Historique en bas de la page, vous voyez un commit avec la description A copy of https://github.com/GoogleCloudPlatform/cloud-build-samples.git effectué par Cloud Build pour créer un dépôt nommé copy-of-gcp-mig-simple.
  6. Ouvrez la page Déclencheurs de Cloud Build:
    Ouvrir la page Déclencheurs

Deux déclencheurs de compilation nommés apply et destroy s'affichent. Le déclencheur apply est associé au fichier infra/main.tfvars dans la branche main. Ce déclencheur est exécuté chaque fois que le fichier est mis à jour. Le déclencheur destroy est un déclencheur manuel.

  1. Pour lancer le processus de déploiement, mettez à jour le fichier infra/main.tfvars:
    1. Dans votre fenêtre de terminal, créez un dossier nommé deploy-compute-engine et accédez-y:
    mkdir ~/deploy-compute-engine  
    cd ~/deploy-compute-engine  
    1. Clonez le dépôt copy-of-gcp-mig-simple :
    gcloud source repos clone copy-of-mig-blue-green  
    1. Accédez au répertoire cloné:
    cd ./copy-of-mig-blue-green  
    1. Mettez à jour infra/main.tfvars pour remplacer le bleu par le vert:
    sed -i'' -e 's/blue/green/g' infra/main.tfvars  
    1. Ajoutez le fichier mis à jour:
    git add .  
    1. Validez le fichier :
    git commit -m "Promote green"  
    1. Transférez le fichier:
    git push  

    Modifier infra/main.tfvars déclenche l'exécution du déclencheur apply, qui lance le déploiement.

  2. Ouvrez Cloud Source Repositories:
    Ouvrir Cloud Source Repositories
  3. Dans la liste des dépôts, cliquez sur copy-of-gcp-mig-simple.
    Le commit avec la description Promote green s'affiche dans l'onglet Historique en bas de la page.
  4. Pour afficher l'exécution du déclencheur apply, ouvrez la page Historique de compilation dans la console Google Cloud :
    Ouvrir la page "Historique de compilation"
  5. Ouvrez la page Informations sur le build en cliquant sur le premier build.
    Le pipeline de déclencheur apply s'affiche avec deux étapes de compilation. La première étape de compilation exécute Terraform apply pour créer les ressources Compute Engine et d'équilibrage de charge pour le déploiement. La deuxième étape de compilation affiche l'adresse IP à laquelle vous pouvez voir l'application en cours d'exécution.
  6. Ouvrez l'adresse IP correspondant au MIG vert dans un navigateur. Une capture d'écran semblable à celle-ci s'affiche pour afficher le déploiement:
    Déploiement
  7. Accédez à la page Groupe d'instances de Compute Engine pour afficher les groupes d'instances bleus et verts:
    Ouvrir la page "Groupe d'instances"
  8. Ouvrez la page Instances de VM pour afficher les quatre instances de VM:
    Ouvrir la page "Instance de VM"
  9. Ouvrez la page Adresses IP externes pour afficher les trois équilibreurs de charge:
    Ouvrir la page "Adresses IP externes"

Comprendre le code

Le code source de cet exemple de code comprend les éléments suivants:

Script de configuration

setup.sh est le script de configuration qui exécute le processus d'amorçage et crée les composants du déploiement bleu-vert. Le script effectue les opérations suivantes:

Pipelines Cloud Build

apply.cloudbuild.yaml et destroy.cloudbuild.yaml sont les fichiers de configuration Cloud Build que le script de configuration utilise pour configurer les ressources du flux GitOps. apply.cloudbuild.yaml contient deux étapes de compilation:

destroy.cloudbuild.yaml appelle tf_destroy, qui supprime toutes les ressources créées par tf_apply.

Les fonctions tf_install_in_cloud_build_step, tf_apply, describe_deployment et tf_destroy sont définies dans le fichier bash_utils.sh. Les fichiers de configuration de compilation utilisent la commande source pour appeler les fonctions.

Le code suivant montre la fonction tf_install_in_cloud_build_step définie dans bash_utils.sh. Les fichiers de configuration de compilation appellent cette fonction pour installer Terraform instantanément. Il crée un bucket Cloud Storage pour enregistrer l'état Terraform.

L'extrait de code suivant montre la fonction tf_apply définie dans bash_utils.sh. Il appelle d'abord terraform init, qui charge tous les modules et les bibliothèques personnalisées, puis exécute terraform apply pour charger les variables à partir du fichier main.tfvars.

L'extrait de code suivant montre la fonction describe_deployment définie dans bash_utils.sh. Il utilise gcloud compute addresses describe pour récupérer les adresses IP des équilibreurs de charge à l'aide du nom et les imprimer.

L'extrait de code suivant montre la fonction tf_destroy définie dans bash_utils.sh. Il appelle terraform init, qui charge tous les modules et les bibliothèques personnalisées, puis exécute terraform destroy, qui décharge les variables Terraform.

Modèles Terraform

Vous trouverez tous les fichiers et variables de configuration Terraform dans le dossier copy-of-gcp-mig-simple/infra/.

L'extrait de code suivant montre le contenu de infra/main.tfvars. Il contient trois variables: deux qui déterminent la version d'application à déployer dans les pools bleu et vert, et une variable pour la couleur active: bleu ou vert. Les modifications apportées à ce fichier déclenchent le déploiement.

Voici un extrait de code de infra/main.tf. Dans cet extrait:

L'extrait de code suivant de infra/main.tf montre l'instanciation du module de séparateur. Ce module prend en charge la couleur active afin que l'équilibreur de charge de l'outil de fractionnement sache quel MIG déployer pour l'application.

L'extrait de code suivant de infra/main.tf définit deux modules identiques pour les MIG bleus et verts. Il prend en compte la couleur, le réseau et le sous-réseau définis dans le module de fractionnement.

Le fichier splitter/main.tf définit les objets créés pour le MIG de l'outil de fractionnement. Voici un extrait de code de splitter/main.tf contenant la logique permettant de basculer entre le MIG vert et le MIG bleu. Il est basé sur le service google_compute_region_backend_service, qui peut acheminer le trafic vers deux régions de backend: var.instance_group_blue ou var.instance_group_green.capacity_scaler définit la quantité de trafic à acheminer.

Le code suivant achemine 100% du trafic vers la couleur spécifiée, mais vous pouvez mettre à jour ce code pour le déploiement Canary afin d'acheminer le trafic vers un sous-ensemble d'utilisateurs.

Le fichier mig/main.tf définit les objets appartenant aux migrations bleues et vertes. L'extrait de code suivant de ce fichier définit le modèle d'instance Compute Engine utilisé pour créer les pools de VM. Notez que la propriété de cycle de vie Terraform de ce modèle d'instance est définie sur create_before_destroy. En effet, lorsque vous mettez à jour la version du pool, vous ne pouvez pas utiliser le modèle pour créer la nouvelle version des pools lorsqu'il est toujours utilisé par la version précédente du pool. Toutefois, si l'ancienne version du pool est détruite avant la création du nouveau modèle, les pools seront indisponibles pendant un certain temps. Pour éviter ce scénario, nous définissons le cycle de vie Terraform sur create_before_destroy afin que la nouvelle version d'un pool de VM soit créée avant la destruction de l'ancienne version.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer des ressources individuelles

  1. Supprimez les ressources Compute Engine créées par le déclencheur d'application:
    1. Ouvrez la page Déclencheurs de Cloud Build:
      Ouvrir la page Déclencheurs
    2. Dans le tableau Déclencheurs, recherchez la ligne correspondant au déclencheur destroy, puis cliquez sur Run (Exécuter). Une fois l'exécution du déclencheur terminée, les ressources créées par le déclencheur apply sont supprimées.
  2. Supprimez les ressources créées lors du démarrage en exécutant la commande suivante dans la fenêtre de votre terminal:
bash <(curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloud-build-samples/main/mig-blue-green/teardown.sh)  

Supprimer le projet

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

Étapes suivantes