Cette page explique comment effectuer un scaling manuel de votre service. Il fournit également des instructions pour un cas d'utilisation courant : modifier le nombre d'instances selon une planification à l'aide de jobs Cloud Scheduler et de l'API Cloud Run Admin.
Présentation
Le scaling manuel vous permet de définir un nombre d'instances spécifique, indépendamment du trafic ou de l'utilisation, et sans nécessiter de redéploiement. Vous pouvez ainsi écrire votre propre logique de scaling à l'aide d'un système externe. Pour obtenir un exemple, consultez Scaling basé sur une planification.
Par défaut, Cloud Run effectue un scaling horizontal automatique jusqu'à un nombre maximal d'instances spécifié ou par défaut, en fonction du trafic, du processeur ou de vos propres objectifs d'utilisation du processeur ou de simultanéité personnalisés. Toutefois, pour certains cas d'utilisation, vous pouvez définir un nombre spécifique d'instances à l'aide de l'autoscaling manuel.
Paramètres minimum et maximum au niveau de la révision et scaling manuel
Si vous définissez votre service sur l'autoscaling manuel, tous les paramètres d'instances minimales et maximales au niveau de la révision sont ignorés.
Répartition du trafic pour le scaling manuel
La liste suivante décrit comment les instances sont allouées lors de la répartition du trafic avec un scaling manuel. Cela inclut le comportement des révisions ne comportant que des tags de trafic.
Lors d'une répartition du trafic, chaque révision se voit attribuer des instances proportionnellement, en fonction de la répartition du trafic, de la même manière que pour la répartition du trafic avec un nombre minimal d'instances au niveau du service.
Si le nombre de révisions recevant du trafic dépasse le nombre d'instances manuel, certaines révisions n'auront pas d'instances. Le trafic envoyé à ces révisions recevra la même erreur que si les révisions étaient désactivées.
Pour toutes les révisions recevant du trafic dans une répartition du trafic, les instances minimales et maximales au niveau de la révision sont désactivées.
Si une révision est active uniquement en raison de tags de trafic :
- Si le nombre minimal d'instances au niveau de la révision est défini, le nombre d'instances spécifié démarre, mais n'est pas comptabilisé dans le nombre total d'instances manuelles du service. La révision ne sera pas autoscalée.
- Si le nombre minimal d'instances au niveau de la révision n'est pas défini, la révision effectue un scaling horizontal vers une instance au maximum, en réponse au trafic envoyé à l'URL du tag.
Comportement de facturation avec le scaling manuel
Lorsque vous utilisez le scaling manuel, le comportement de facturation est semblable à celui de la fonctionnalité d'instances minimales.
Autrement dit, avec le scaling manuel et la facturation basée sur les instances, les instances inactives mises à l'échelle manuellement sont facturées en tant qu'instances actives.
Si vous utilisez le scaling manuel avec la facturation basée sur les requêtes, les instances inactives avec scaling manuel sont facturées en tant qu'instances minimales inactives. Pour en savoir plus sur la facturation, consultez la page des tarifs.
Rôles requis
Pour obtenir les autorisations nécessaires pour déployer des services Cloud Run, demandez à votre administrateur de vous accorder les rôles IAM suivants :
- Développeur Cloud Run (
roles/run.developer) sur le service Cloud Run - Utilisateur du compte de service (
roles/iam.serviceAccountUser) sur l'identité du service - Lecteur Artifact Registry (
roles/artifactregistry.reader) sur le dépôt Artifact Registry de l'image de conteneur déployée (le cas échéant)
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.
Configurer le scaling manuel
Vous pouvez configurer le mode de scaling à l'aide de la console Google Cloud , de la Google Cloud CLI, d'un fichier YAML ou de l'API lorsque vous créez un service ou mettez à jour une révision :
Console
Dans la console Google Cloud , accédez à Cloud Run :
Sélectionnez Services dans le menu de navigation Cloud Run :
Si vous configurez un nouveau service, cliquez sur Déployer un conteneur et remplissez la page initiale des paramètres du service.
Si vous configurez un service existant, cliquez sur celui-ci, puis sur l'onglet Scaling.
Cliquez sur Scaling manuel.
Spécifiez le nombre d'instances de conteneur pour le service dans le champ Nombre d'instances.
Cliquez sur Créer pour un nouveau service. Cliquez sur Afficher les différences et redéployer, puis sur Déployer les modifications pour un service existant.
gcloud
Pour spécifier le scaling d'un nouveau service, utilisez la commande deploy :
gcloud run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
Remplacez les éléments suivants :
- SERVICE : nom de votre service.
- INSTANCE_COUNT : nombre d'instances pour le service.
Le service est ainsi défini sur le scaling manuel. Spécifiez la valeur
0pour désactiver le service. Spécifiez la valeurautopour utiliser le comportement d'autoscaling Cloud Run par défaut. IMAGE_URL: référence à l'image de conteneur, par exempleus-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL respecte le formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Spécifiez le scaling pour un service existant à l'aide de la commande de mise à jour suivante :
gcloud run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :
gcloud run services describe SERVICE --format export > service.yaml
Modifiez les attributs
scalingModeetmanualInstanceCount:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
Remplacez les éléments suivants :
- SERVICE : nom de votre service Cloud Run.
- MODE :
manualpour l'autoscaling manuel ouautomaticpour le comportement d'autoscaling Cloud Run par défaut. - INSTANCE_COUNT : nombre d'instances que vous faites évoluer manuellement pour le service. Spécifiez la valeur
0pour désactiver le service.
Créez ou mettez à jour le service à l'aide de la commande suivante :
gcloud run services replace service.yaml
Par défaut, la commande
gcloud run services replaceutilise le fichierservice.yamls'il est présent.
API REST
Pour mettre à jour le nombre d'instances d'un service donné en autoscaling manuel, envoyez une requête HTTP PATCH au point de terminaison service de l'API Cloud Run Admin.
Exemple, à l'aide de curl :
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
Remplacez les éléments suivants :
- ACCESS_TOKEN : jeton d'accès valide pour un compte disposant des autorisations IAM pour mettre à jour un service.
Par exemple, si vous êtes connecté à
gcloud, vous pouvez récupérer un jeton d'accès à l'aide degcloud auth print-access-token. À partir d'une instance de conteneur Cloud Run, vous pouvez récupérer un jeton d'accès via le serveur de métadonnées d'instance de conteneur. - MANUAL_INSTANCE_COUNT : nombre d'instances pour le service.
Le service est ainsi défini sur le scaling manuel. Spécifiez la valeur
0pour désactiver le service. - SERVICE : nom du service.
- REGION : région Google Cloud dans laquelle le service est déployé.
- PROJECT_ID : ID de votre projet Google Cloud .
Pour passer du mode de scaling manuel au mode automatique, envoyez une requête PATCH au point de terminaison service de l'API Cloud Run Admin et définissez le champ scalingMode sur AUTOMATIC.
Par exemple, exécutez la commande curl suivante :
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"scalingMode": "AUTOMATIC","manualInstanceCount":null}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.scalingMode,scaling.manualInstanceCount
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez Commandes Terraform de base.
Ajoutez les éléments suivants à une ressourcegoogle_cloud_run_v2_service dans votre configuration Terraform :resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "INSTANCE_COUNT"
}
}
Remplacez les éléments suivants :
- SERVICE_NAME : nom de votre service Cloud Run.
- REGION : région Google Cloud . Exemple :
europe-west1. IMAGE_URL: référence à l'image de conteneur, par exempleus-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL respecte le formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- INSTANCE_COUNT : nombre d'instances que vous faites évoluer manuellement pour le service. Ce nombre d'instances est réparti entre toutes les révisions avec un trafic spécifié en fonction du pourcentage de trafic qu'elles reçoivent.
Afficher la configuration de scaling de votre service
Pour afficher les instances de configuration du scaling pour votre service Cloud Run, procédez comme suit :
Console
Dans la console Google Cloud , accédez à la page Services de Cloud Run :
Cliquez sur le service qui vous intéresse pour ouvrir le panneau Informations sur le service.
Cliquez sur l'onglet Scaling (Scaling) pour accéder aux paramètres de scaling.
gcloud
Utilisez la commande suivante pour afficher la configuration de scaling actuelle du service :
gcloud run services describe SERVICE
Remplacez SERVICE par le nom du service.
Recherchez le champ Scaling: Manual (Instances: ) en haut du texte renvoyé par describe.
YAML
Utilisez la commande suivante pour télécharger la configuration YAML du service :
gcloud run services describe SERVICE --format export > service.yaml
La configuration de scaling est contenue dans les attributs scalingMode et manualInstanceCount.
Désactiver un service
Lorsque vous désactivez un service, toutes les requêtes en cours de traitement sont autorisées à se terminer.
Toutefois, toute autre requête envoyée à l'URL du service échouera avec une erreur Service unavailable ou Service disabled.
Les requêtes adressées aux révisions de service qui ne sont actives qu'en raison de tags de trafic ne sont pas affectées, car ces révisions ne sont pas désactivées.
Pour désactiver un service, vous devez définir le scaling sur zéro. Vous pouvez désactiver un service à l'aide de la console Google Cloud , de la Google Cloud CLI, d'un fichier YAML ou de l'API :
Console
Dans la console Google Cloud , accédez à la page Services de Cloud Run :
Cliquez sur le service que vous souhaitez désactiver pour afficher son panneau de détails, puis cliquez sur l'onglet Scaling.
Sélectionnez Scaling manuel.
Saisissez la valeur
0(zéro) dans le champ Nombre d'instances.Cliquez sur Afficher les différences et déployer, puis sur Déployer les modifications.
gcloud
Pour désactiver un service, utilisez la commande suivante pour définir le scaling sur zéro :
gcloud run services update SERVICE --scaling=0
Remplacez SERVICE par le nom du service.
YAML
Téléchargez la configuration YAML de votre service :
gcloud run services describe SERVICE --format export > service.yaml
Définissez l'attribut
manualInstanceCountsur zéro (0) :apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
Remplacez SERVICE par le nom de votre service Cloud Run.
Créez ou mettez à jour le service à l'aide de la commande suivante :
gcloud run services replace service.yaml
API REST
Pour désactiver un service, envoyez une requête HTTP PATCH au point de terminaison service de l'API Cloud Run Admin.
Exemple, à l'aide de curl :
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"scaling":{"manualInstanceCount":0 }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
Remplacez les éléments suivants :
- ACCESS_TOKEN : jeton d'accès valide pour un compte disposant des autorisations IAM pour mettre à jour un service.
Par exemple, si vous êtes connecté à
gcloud, vous pouvez récupérer un jeton d'accès à l'aide degcloud auth print-access-token. À partir d'une instance de conteneur Cloud Run, vous pouvez récupérer un jeton d'accès via le serveur de métadonnées d'instance de conteneur. - SERVICE : nom du service.
- REGION : région Google Cloud dans laquelle le service est déployé.
- PROJECT_ID : ID de votre projet Google Cloud .
Terraform
Pour désactiver un service, définissez l'attribut manual_instance_count sur zéro (0) :
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "0"
}
}
Remplacez les éléments suivants :
- SERVICE_NAME : nom de votre service Cloud Run.
- REGION : région Google Cloud . Exemple :
europe-west1. IMAGE_URL: référence à l'image de conteneur, par exempleus-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL respecte le formatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Exemple de scaling basé sur une programmation
Un cas d'utilisation courant de l'autoscaling manuel consiste à modifier le nombre d'instances en fonction d'une planification prédéfinie. Dans cet exemple, nous utilisons Cloud Scheduler pour planifier deux jobs, chacun appelant l'API Cloud Run Admin pour faire évoluer le nombre d'instances. Le premier job Cloud Scheduler configure le service pour qu'il effectue un scaling manuel vers un nombre spécifié d'instances pendant les heures d'ouverture (de 9h à 17h, du lundi au vendredi). Le deuxième job configure le service pour qu'il effectue un scaling à la baisse jusqu'à un nombre d'instances spécifié pendant les heures creuses.
Dans cet exemple, nous utilisons le guide de démarrage rapide de Cloud Run par souci de simplicité, mais vous pouvez utiliser le service de votre choix.
Pour configurer l'autoscaling manuel basé sur une planification :
Déployez votre service à l'aide de la commande suivante :
gcloud run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
Remplacez les éléments suivants :
- SERVICE : nom du service Cloud Run.
- REGION : région dans laquelle le service Cloud Run est déployé.
- PROJECT_ID : ID de votre projet Google Cloud .
Configurez votre service pour un scaling manuel à 10 instances à l'aide de la commande suivante :
gcloud run services update SERVICE \ --region=REGION \ --scaling=10
Créez un job Cloud Scheduler qui effectue un scaling manuel vers un nombre spécifié d'instances de service pendant les heures d'ouverture :
gcloud scheduler jobs create http hello-start-instances \ --location=REGION \ --schedule="0 9 * * MON-FRI" \ --time-zone=America/Los_Angeles \ --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/ locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \ --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \ --http-method=PUT \ --message-body='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Remplacez les éléments suivants :
- REGION : région dans laquelle le service Cloud Run est déployé.
- PROJECT_ID : ID de votre projet Google Cloud .
- INSTANCE_COUNT : nombre d'instances vers lequel vous souhaitez effectuer le scaling (par exemple,
10). - PROJECT_NUMBER : numéro de votre projet Google Cloud .
Cette commande crée un job Cloud Scheduler qui effectue un appel HTTP à l'API Cloud Run Admin, en définissant le nombre d'instances sur le nombre que vous spécifiez. L'exemple utilise le compte de service Compute Engine par défaut
PROJECT_NUMBER-compute@developer.gserviceaccount.compour les jobs Cloud Scheduler. Vous pouvez utiliser n'importe quel compte de service autorisé à mettre à jour les services Cloud Run.Créez un job Cloud Scheduler qui réduit manuellement la capacité des instances de service pendant les heures creuses :
gcloud scheduler jobs create http hello-stop-instances \ --location=REGION \ --schedule="0 17 * * MON-FRI" \ --time-zone=America/Los_Angeles \ --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/ locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \ --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \ --http-method=PUT \ --message-body='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Remplacez les éléments suivants :
- REGION : région dans laquelle le service Cloud Run est déployé.
- PROJECT_ID : ID de votre projet Google Cloud .
- INSTANCE_COUNT : nombre d'instances vers lequel vous souhaitez effectuer le scaling.
Pour désactiver le service, définissez cette option sur
0. - PROJECT_NUMBER : numéro de votre projet Google Cloud .
Cette commande crée un job Cloud Scheduler qui effectue un appel HTTP à l'API Cloud Run Admin, en définissant le nombre d'instances de scaling manuel sur le nombre d'instances que vous avez spécifié. Définir le nombre d'instances sur zéro désactive le service, mais pas les jobs Cloud Scheduler. Ces tâches continuent de s'exécuter et réinitialisent (et réactivent) le service avec un nombre accru d'instances, comme prévu.