Ce document explique comment configurer et déployer un service Cloud Run multirégion à disponibilité élevée, avec des fonctionnalités de basculement et de reprise après sinistre automatisées.
L'état de santé du service Cloud Run expose l'état de santé global de votre service dans chaque région à l'aide de groupes de points de terminaison du réseau (NEG) sans serveur.
Pour acheminer le trafic public (externe), vous configurez l'état de santé du service avec un équilibreur de charge d'application externe global.
Pour acheminer le trafic privé (interne), vous configurez l'état de santé du service avec un équilibreur de charge d'application interne interrégional.
Fonctionnement
Le basculement automatisé achemine les requêtes entrantes d'un équilibreur de charge d'application externe global ou d'un équilibreur de charge d'application interne interrégional vers vos services Cloud Run via des NEG sans serveur régionaux. Les instances de conteneur individuelles exécutent des vérifications d'aptitude, que Cloud Run agrège pour déterminer l'état de fonctionnement global de chaque service régional.
Un service Cloud Run dans une région est opérationnel et reçoit du trafic si 60% ou plus de ses instances réussissent leurs sondes de disponibilité. Si une région n'est plus opérationnelle, l'équilibreur de charge redirige automatiquement le trafic vers une région opérationnelle. Une fois que la région non opérationnelle est rétablie, l'équilibreur de charge y restaure progressivement le trafic.
Limites
Les limites suivantes s'appliquent à l'état de santé des services Cloud Run :
- Vous devez configurer au moins une instance minimale au niveau du service ou de la révision par région pour calculer l'état. Vous pouvez également utiliser la métrique Nombre d'instances de conteneur dans Cloud Monitoring pour estimer le nombre minimal d'instances requis pour vos régions.
- Les basculements nécessitent au moins deux services provenant de régions différentes. Sinon, si un service échoue, le message d'erreur
no healthy upstreams'affiche. - Vous ne pouvez pas configurer de masque d'URL ni de tags dans les NEG sans serveur.
- Vous ne pouvez pas activer IAP à partir d'un service de backend ou d'un équilibreur de charge. Activez IAP directement depuis Cloud Run.
- Si un service Cloud Run est supprimé, Cloud Run ne signale pas d'état non opérationnel à l'équilibreur de charge.
- Le premier test d'aptitude n'est pas comptabilisé lors du démarrage d'une nouvelle instance. Il est donc possible qu'une requête soit brièvement acheminée vers un service qui vient de démarrer avant de devenir non opérationnel.
- L'état de fonctionnement du service Cloud Run est calculé pour toutes les instances. Les révisions sans sondes sont traitées comme inconnues. L'équilibreur de charge considère les instances inconnues comme opérationnelles.
- Le calcul de l'état du service peut générer des résultats inexacts si les instances plantent rapidement.
Bonnes pratiques
Vous pouvez combiner les vérifications d'aptitude, la répartition du trafic et le nombre minimal d'instances pour effectuer des déploiements progressifs et sécurisés. Cela vous permet de vérifier l'état d'une nouvelle révision dans une seule région "canari" avant de la promouvoir, en vous assurant que l'équilibreur de charge n'envoie le trafic qu'aux backends régionaux opérationnels.
Lorsque vous configurez des vérifications sur votre propre application, ajoutez un point de terminaison HTTP/1 (valeur par défaut de Cloud Run, et non HTTP/2) dans votre code de service pour répondre à la vérification. Le nom du point de terminaison (par exemple, /startup, /health ou /are_you_ready) doit correspondre à path dans la configuration de la vérification. Les points de terminaison HTTP de vérification d'état sont accessibles en externe et suivent les mêmes principes que tous les autres points de terminaison de service HTTP exposés en externe.
Processus de déploiement recommandé
Vous pouvez déployer une révision de service sur un service Cloud Run existant qui n'utilise pas de vérification de préparation ni l'état de santé du service Cloud Run. Suivez cette procédure région par région pour déployer une nouvelle révision en toute sécurité :
Déployez la nouvelle révision dans une seule région "canari" avec une vérification de l'état configurée.
Envoyez une petite quantité de trafic (par exemple, 1%) vers la nouvelle révision.
Utilisez un nombre minimal d'instances non nul au niveau du service plutôt qu'au niveau de la révision.
Vérifiez la métrique de sonde de disponibilité (
run.googleapis.com/container/instance_count_with_readiness) pour vous assurer que les nouvelles instances sont opérationnelles.Augmentez progressivement le pourcentage de trafic vers la nouvelle révision. À mesure que vous augmentez le trafic, surveillez la métrique sur l'état du service Cloud Run régional (
run.googleapis.com/service_health_count), qui est utilisée par l'équilibreur de charge. Les rapports sur l'état du service Cloud RunUNKNOWNjusqu'à ce qu'un trafic suffisant soit acheminé vers la nouvelle révision.Une fois que la révision reçoit 100% du trafic et que l'état du service Cloud Run régional est stable et opérationnel, répétez ce processus pour toutes les autres régions.
Tutoriel : Configurer le basculement automatique
Ce tutoriel vous guide dans le déploiement d'un exemple d'application Go dans deux régions, la configuration d'un équilibreur de charge d'application externe mondial avec des NEG sans serveur et le test du basculement automatique.
Au cours de ce tutoriel, vous allez :
- Préparer l'exemple d'application
- Déployer des services Cloud Run dans deux régions avec des sondes de disponibilité
- Configurer un équilibreur de charge d'application externe global
- Ajouter vos services via le NEG sans serveur
- Tester le basculement
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue,
utilisez le simulateur de coût.
- Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Activez les API Artifact Registry, Cloud Build, Cloud Run Admin, Network Services et Compute Engine, si certaines ne sont pas déjà activées.
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.- Installez et initialisez la gcloud CLI.
- Mettez à jour les composants :
gcloud components update
- Définissez les variables de configuration utilisées dans ce tutoriel :
Remplacez PROJECT_ID par l'ID de votre projet Google Cloud .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
Définir les rôles requis
Pour déployer à partir de la source avec 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 modifiez ce comportement. Pour que Cloud Build puisse créer vos sources, demandez à votre administrateur d'accorder le rôle Créateur 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 le numéro de votre projet Google Cloudet PROJECT_ID par l'ID de votre projet Google Cloud. Pour obtenir des instructions détaillées sur la recherche de votre ID du projet et de votre numéro de projet, consultez Créer et gérer des projets.
L'attribution du rôle de compilateur Cloud Run au compte de service Compute Engine par défaut prend quelques minutes à 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é de 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 les APIGoogle Cloud , 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 :
Clonez le dépôt de l'exemple sur votre ordinateur local :
git clone https://github.com/GoogleCloudPlatform/golang-samplesAccé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 préparation
Les basculements nécessitent au moins deux services provenant de régions différentes. Pour déployer vos services à partir de la source dans deux régions différentes avec des vérifications de disponibilité, exécutez les commandes suivantes. Si vous préférez utiliser Terraform, consultez Déployer un service multirégional et assurez-vous d'ajouter la configuration de la sonde de disponibilité.
Déployez votre service
health-exampledansus-west1eteurope-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 préparation :gcloud run deploy $SERVICE \ --source=. \ --regions=$REGION_A,$REGION_B \ --min=10 \ --readiness-probe httpGet.path="/are_you_ready"Répondez aux invites pour installer les API requises en répondant
ylorsque 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 mondial afin d'acheminer le trafic entre us-west1 et europe-west1, procédez comme suit. Si vous préférez provisionner votre équilibreur de charge à l'aide de Terraform, consultez Créer un équilibreur de charge d'application externe global.
Créez un service de backend :
gcloud compute backend-services create $SERVICE-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --globalConfigurez 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 \ --globalCré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-bsCré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-lbCré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, suivez ces étapes. Si vous préférez provisionner vos NEG sans serveur à l'aide de Terraform, consultez Configurer des groupes de points de terminaison du réseau régionaux.
Créez un groupe de points de terminaison du réseau (NEG) sans serveur pour votre service Cloud Run dans
us-west1eteurope-west1:gcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_A \ --region $REGION_A \ --network-endpoint-type=serverless \ --cloud-run-service=$SERVICEgcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_B \ --region $REGION_B \ --network-endpoint-type=serverless \ --cloud-run-service=$SERVICEAjoutez le NEG sans serveur en tant que backend aux services de backend dans
us-west1eteurope-west1:gcloud compute backend-services add-backend $SERVICE-bs \ --global \ --network-endpoint-group=$SERVICE-neg-$REGION_A \ --network-endpoint-group-region=$REGION_Agcloud compute backend-services add-backend $SERVICE-bs \ --global \ --network-endpoint-group=$SERVICE-neg-$REGION_B \ --network-endpoint-group-region=$REGION_B
Pour découvrir d'autres options de configuration, consultez Configurer un équilibreur de charge d'application externe global avec Cloud Run.
Signaler l'état de santé régional
Pour agréger l'état de santé des services Cloud Run régionaux et signaler un état sain ou non sain à l'équilibreur de charge, procédez comme suit :
Déployez une révision de service Cloud Run dans plusieurs régions avec un ou plusieurs nombres minimaux d'instances. Exécutez la commande suivante pour utiliser la vérification d'aptitude que vous avez configurée à l'étape précédente :
gcloud run deploy
SERVICE_NAME\ --regions=REGION_A,REGION_B\ --min=MIN_INSTANCESRemplacez les éléments suivants :
- SERVICE_NAME : nom du service.
- REGION_A, REGION_B : différentes régions pour la révision de votre service. Par exemple, définissez REGION_A sur
us-central1et REGION_B sureurope-west1. - MIN_INSTANCES : nombre d'instances de conteneur à garder en attente et prêtes à recevoir des requêtes. Vous devez définir la valeur minimale sur 1 ou plus.
Configurez une vérification de disponibilité gRPC ou HTTP sur chaque instance de conteneur.
Configurez un équilibreur de charge d'application externe global ou un équilibreur de charge d'application interne interrégional pour rediriger le trafic loin des régions non opérationnelles.
Configurez des NEG sans serveur pour chaque service Cloud Run dans chaque région.
Configurez un service de backend pour qu'il se connecte aux NEG sans serveur.
Découvrez comment déployer un exemple d'application Cloud Run dans deux régions avec des sondes de préparation.
Tester et vérifier le basculement
Pour tester le basculement afin d'assurer la fiabilité et la résilience de vos services Cloud Run, procédez comme suit :
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)')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)" $LBIPObtenez 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.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 desservies. Cela désigne la région opérationnelle et l'instance diffusant le trafic :
Surveiller les vérifications de l'état
Une fois que vous avez configuré l'état de santé du service Cloud Run, les NEG sans serveur collectent la métrique d'état de santé du service Cloud Monitoring. Vous pouvez afficher l'état de fonctionnement des services régionaux existants.
Si un service d'une région n'est pas opérationnel, l'équilibreur de charge redirige le trafic de la région non opérationnelle vers une région opérationnelle. Le trafic est rétabli une fois la région redevenue opérationnelle.
Utiliser des abonnements push Pub/Sub authentifiés avec un déploiement multirégional
Par défaut, un service Pub/Sub envoie des messages à des points de terminaison push dans la même région Google Cloud où le service Pub/Sub les stocke. Pour contourner ce comportement, consultez Utiliser un abonnement push Pub/Sub authentifié avec un déploiement multirégional Cloud Run.
Alternative : Configurer le basculement manuel
Si vous devez configurer manuellement le trafic pour qu'il bascule vers une région opérationnelle sans vous appuyer sur des vérifications, modifiez le mappage d'URL de l'équilibreur de charge d'application externe global.
Pour mettre à jour le mappage d'URL de l'équilibreur de charge d'application externe global, supprimez le NEG du service de backend à l'aide de l'indicateur
--global:gcloud compute backend-services remove-backend
BACKEND_NAME\ --network-endpoint-group=NEG_NAME\ --network-endpoint-group-region=REGION\ --globalRemplacez les éléments suivants :
BACKEND_NAME: nom du service de backend.NEG_NAME: nom de la ressource du groupe de points de terminaison du réseau, par exemplemyservice-neg-uscentral1.REGION: région dans laquelle le NEG a été créé et dans laquelle vous souhaitez supprimer votre service. Exemple :us-central1,asia-east1.
Pour vérifier qu'une région opérationnelle diffuse désormais du trafic, accédez à https://
.
Pour éviter que des frais supplémentaires ne soient facturés sur votre compte Google Cloud , 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 apportées lors du présent tutoriel, supprimez les ressources créées pour ce 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 :
- Dans la console Google Cloud , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources du tutoriel
Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel. Les services Cloud Run n'entraînent pas de frais 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 consoleGoogle Cloud .
Supprimez la configuration régionale par défaut
gcloudque vous avez ajoutée lors de la configuration du tutoriel :gcloud config unset run/regionSupprimez la configuration du projet :
gcloud config unset project
Étapes suivantes
- En savoir plus sur la configuration des vérifications de l'état pour les services Cloud Run
- Découvrez en détail la configuration d'un équilibreur de charge d'application externe global avec Cloud Run.
- Découvrez les configurations multirégionales dans d'autres produits tels que Spanner multirégional et Emplacements Cloud Storage.