Automatiser le basculement multirégional avec Service Health

Ce guide vous explique comment déployer un service Cloud Run multirégional à disponibilité élevée avec basculement et restauration automatiques pour le trafic externe. Vous pouvez configurer un service Cloud Run avec ces fonctionnalités en configurant des NEG sans serveur, un équilibreur de charge d'application externe global et une sonde de disponibilité. Pour en savoir plus, consultez la page Diffuser du trafic provenant de plusieurs régions.

Objectifs

Au cours de ce tutoriel, vous allez :

  1. Préparer l'exemple d'application
  2. Déployer des services Cloud Run dans deux régions avec des sondes de disponibilité
  3. Configurer un équilibreur de charge d'application externe global
  4. Ajouter vos services via le NEG sans serveur
  5. Tester le basculement

Avant de commencer

  1. Connectez-vous à votre Google Cloud compte. Si vous n'avez jamais utilisé Google Cloud, créez un compte pour évaluer les performances de nos produits dans des scénarios réels. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Activez les API Artifact Registry, Cloud Build, Cloud Run Admin, Network Services et Compute Engine.

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    Activer les API

  7. Installez et initialisez gcloud CLI.
  8. Mettez à jour les composants :
    gcloud components update
  9. Définissez les variables de configuration utilisées dans ce tutoriel :
    PROJECT_ID= gcloud config set core/project PROJECT_ID
    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    SERVICE=health-example
    REGION_A=us-west1
    REGION_B=europe-west1
    Remplacez PROJECT_ID par l'ID de votre Google Cloud projet.

Définir les rôles requis

Pour effectuer un déploiement à partir d'une source avec une compilation, vous ou votre administrateur devez attribuer les rôles IAM suivants au compte de service Cloud Build.

Cliquez ici pour afficher les rôles requis pour le compte de service Cloud Build

Cloud Build utilise automatiquement le compte de service Compute Engine par défaut comme compte de service Cloud Build par défaut pour compiler votre code source et votre ressource Cloud Run, sauf si vous remplacez ce comportement. Pour que Cloud Build puisse compiler vos sources, demandez à votre administrateur d'attribuer le rôle Compilateur Cloud Run (roles/run.builder) au compte de service Compute Engine par défaut sur votre projet :

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

Remplacez PROJECT_NUMBER par votre Google Cloud numéro de projet et PROJECT_ID par votre Google Cloud ID de projet. Pour obtenir des instructions détaillées sur la façon de trouver l'ID du projet et le numéro de votre projet, consultez Créer et gérer des projets.

La propagation de l'attribution du rôle Compilateur Cloud Run au compte de service Compute Engine par défaut prend quelques minutes pour se propager.

Pour obtenir les autorisations nécessaires à votre identité de service pour accéder au fichier et au bucket Cloud Storage, demandez à votre administrateur d'accorder à l'identité du service le rôle Administrateur Storage (roles/storage.admin). Pour en savoir plus sur les rôles et les autorisations Cloud Storage, consultez la page IAM pour Cloud Storage.

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre service Cloud Run communique avec Google Cloud des API, telles que les bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les pages Autorisations de déploiement et Gérer les accès.

Préparer l'exemple d'application

Pour récupérer l’exemple de code à utiliser, procédez comme suit :

  1. Clonez le dépôt de l'exemple sur votre ordinateur local :

    git clone https://github.com/GoogleCloudPlatform/golang-samples
    
  2. Accédez au répertoire contenant l'exemple de code Cloud Run :

    cd golang-samples/run/service-health
    

Déployer le service Cloud Run dans deux régions avec des sondes de disponibilité

Les basculements nécessitent au moins deux services provenant de régions différentes. Pour déployer vos services à partir d'une source dans deux régions différentes avec des sondes de disponibilité, exécutez les commandes suivantes :

  1. Déployez votre service health-example dans us-west1 et europe-west1 à partir du répertoire source. Vous avez besoin d'au moins une instance minimale pour configurer l'état du service avec des sondes de disponibilité :

    gcloud beta run deploy $SERVICE \
    --source=. \
    --regions=$REGION_A,$REGION_B \
    --min=10 \
    --readiness-probe httpGet.path="/are_you_ready"
    
  2. Répondez aux invites pour installer les API requises en répondant y lorsque vous y êtes invité. Vous ne devez procéder à cette opération qu'une fois par projet. Répondez aux autres invites en fournissant la plate-forme et la région, si vous n'avez pas défini les paramètres par défaut pour celles-ci, comme décrit dans la section Avant de commencer.

Configurer un équilibreur de charge d'application externe global

Pour configurer un équilibreur de charge d'application externe global afin d'acheminer le trafic entre us-west1 et europe-west1, procédez comme suit :

  1. Créez un service de backend :

    gcloud compute backend-services create $SERVICE-bs \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --global
    
  2. Configurez une adresse IP externe statique globale pour accéder à votre équilibreur de charge :

    gcloud compute addresses create $SERVICE-ip \
      --network-tier=PREMIUM \
      --ip-version=IPV4 \
      --global
    
  3. Créez un mappage d'URL pour acheminer les requêtes entrantes vers le service de backend :

    gcloud compute url-maps create $SERVICE-lb \
      --default-service $SERVICE-bs
    
  4. Créez un proxy HTTP cible, qui va rediriger les requêtes vers votre mappage d'URL :

    gcloud compute target-http-proxies create $SERVICE-hp \
    --url-map=$SERVICE-lb
    
  5. Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy :

    gcloud compute forwarding-rules create $SERVICE-fr \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=PREMIUM \
      --address=$SERVICE-ip \
      --target-http-proxy=$SERVICE-hp \
      --global \
      --ports=80
    

Ajouter vos services via un NEG sans serveur

Pour ajouter les services que vous avez déployés dans us-west1 et europe-west1 à l'aide du NEG sans serveur, procédez comme suit :

  1. Créez un groupe de points de terminaison du réseau (NEG) sans serveur pour votre service Cloud Run dans us-west1 et europe-west1 :

    gcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_A \
        --region $REGION_A \
        --network-endpoint-type=serverless \
        --cloud-run-service=$SERVICE
    
    gcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_B \
        --region $REGION_B \
        --network-endpoint-type=serverless \
        --cloud-run-service=$SERVICE
    
  2. Ajoutez le NEG sans serveur en tant que backend aux services de backend dans us-west1 et europe-west1 :

    gcloud compute backend-services add-backend $SERVICE-bs \
        --global \
        --network-endpoint-group=$SERVICE-neg-$REGION_A \
        --network-endpoint-group-region=$REGION_A
    
    gcloud compute backend-services add-backend $SERVICE-bs \
        --global \
        --network-endpoint-group=$SERVICE-neg-$REGION_B \
        --network-endpoint-group-region=$REGION_B
    

Pour obtenir d'autres options de configuration, consultez Configurer un équilibreur de charge d'application externe global avec Cloud Run.

Tester le basculement

Pour tester le basculement afin de garantir la fiabilité et la résilience de vos services Cloud Run, procédez comme suit :

  1. Exécutez la commande suivante pour obtenir l'adresse IP de votre équilibreur de charge :

    LBIP=$(gcloud compute addresses describe $SERVICE-ip --global --format='value(address)')
    
  2. Facultatif : Envoyez une requête à votre équilibreur de charge si vos services nécessitent une authentification :

    curl  -H "Authorization: Bearer $(gcloud auth print-identity-token)" $LBIP
    
  3. Obtenez la valeur de la variable LBIP en exécutant la commande echo $LBIP. L'adresse IP de l'équilibreur de charge s'affiche. Par exemple, 11.22.33.44.

  4. Pour tester un basculement, accédez à l'URL http://LOAD_BALANCER_IP, où LOAD_BALANCER_IP correspond à la valeur que vous avez obtenue à l'étape précédente. Cliquez sur le bouton bascule de votre région dans la section Régions de diffusion. Cela désigne la région opérationnelle et l'instance qui diffuse le trafic :

    Automatiser le basculement multirégional avec l'état du service Cloud Run

Libérer de l'espace

Pour éviter que des frais supplémentaires ne soient facturés sur votre Google Cloud compte, supprimez toutes les ressources que vous avez déployées avec ce tutoriel.

Supprimer le projet

Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous devez le conserver sans les modifications que vous avez ajoutées dans ce tutoriel, supprimez les ressources que vous avez créées pour le tutoriel.

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans la Google Cloud console, accédez à la page Gérer les ressources.

    Accéder à la page "Gérer les ressources"

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez Arrêter pour supprimer le projet.

Supprimer les ressources du tutoriel

  1. Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel. Les services Cloud Run n'entraînent pas de coûts tant qu'ils ne reçoivent pas de requêtes.

    Pour supprimer votre service Cloud Run, exécutez la commande suivante :

    gcloud run services delete SERVICE-NAME

    Remplacez SERVICE-NAME par le nom du service.

    Vous pouvez également supprimer des services Cloud Run à partir de la Google Cloud console.

  2. Supprimez la configuration régionale gcloud par défaut que vous avez ajoutée lors de la configuration du tutoriel :

     gcloud config unset run/region
    
  3. Supprimez la configuration du projet :

     gcloud config unset project
    

Étape suivante