Scaling manuel

Cette page explique comment effectuer un scaling manuel de votre service. Elle fournit également des instructions pour un cas d'utilisation courant : modifier le nombre d'instances en fonction d'une programmation à 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 spécifique d'instances, quels que soient le trafic ou l'utilisation, et sans avoir à redéployer. Vous pouvez ainsi écrire votre propre logique de scaling à l'aide d'un système externe. Pour obtenir un exemple, consultez la section Scaling basé sur une programmation.

Par défaut, Cloud Run effectue automatiquement un scaling à la hausse jusqu'à un nombre maximal d'instances spécifié ou par défaut, en fonction du trafic, du processeur ou de vos propres cibles d'utilisation personnalisées du processeur ou de la simultanéité. Toutefois, dans certains cas d'utilisation, vous pouvez définir un nombre spécifique d'instances à l'aide du scaling manuel.

Paramètres minimaux et maximaux au niveau de la révision et scaling manuel

Si vous définissez votre service sur le scaling manuel, tous les paramètres minimaux au niveau de la révision et maximaux d'instance 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 dans le cadre du scaling manuel. Cela inclut le comportement des révisions avec uniquement des tags de trafic.

  • Lors d'une répartition du trafic, chaque révision reçoit des instances proportionnellement, en fonction de la répartition du trafic, comme 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 manuelles, certaines révisions n'auront aucune instance. Le trafic envoyé à ces révisions générera 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, tous les paramètres minimaux et maximaux d'instance au niveau de la révision sont désactivés.

  • 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 n'effectue pas d'autoscaling.
    • Si le nombre minimal d'instances au niveau de la révision n'est pas défini, la révision effectue un scaling à la hausse jusqu'à 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 lorsque vous utilisez 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 mises à l'échelle manuellement sont facturées en tant qu'instances minimales inactives. Pour obtenir des informations complètes 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 :

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.

Configurer le scaling manuel

Vous pouvez configurer le mode de scaling à l'aide de la Google Cloud console, de Google Cloud CLI, d'un fichier YAML ou d'une API lorsque vous créez un service ou mettez à jour une révision :

Console

  1. Dans la Google Cloud console, accédez à la page Services de Cloud Run :

    Accédez à Cloud Run

  2. Si vous configurez un nouveau service, cliquez sur Déployer un conteneur pour afficher le formulaire Créer un service. Si vous configurez un service existant, cliquez sur celui-ci pour afficher son panneau de détails, puis sur l'icône Stylo à côté de Scaling en haut à droite.

  3. Recherchez le formulaire Scaling des services (pour un nouveau service) ou le formulaire Modifier le scaling pour un service existant.

    image

    Dans le champ Nombre d'instances, spécifiez le nombre d'instances de conteneur pour le service.

  4. Cliquez sur Créer pour un nouveau service ou sur Enregistrer pour un service existant.

gcloud

Pour spécifier le scaling d'un nouveau service, utilisez la commande de déploiement :

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. Cela définit le service sur le scaling manuel. Spécifiez la valeur 0 pour désactiver le service. Spécifiez la valeur auto pour utiliser le comportement d'autoscaling par défaut de Cloud Run.
  • IMAGE_URL : référence à l'image de conteneur, par exemple us-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 suit le format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

Spécifiez le scaling d'un service existant à l'aide de la commande de mise à jour suivante :

gcloud run services update SERVICE \
   --scaling=INSTANCE_COUNT

YAML

  1. 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
  2. Modifiez les attributs scalingMode et manualInstanceCount :

    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 : manual pour le scaling manuel ou automatic pour le comportement d'autoscaling par défaut de Cloud Run.
    • INSTANCE_COUNT : nombre d'instances que vous mettez à l'échelle manuellement pour le service. Spécifiez la valeur 0 pour désactiver le service.
  3. Créez ou mettez à jour le service à l'aide de la commande suivante :

    gcloud run services replace service.yaml

API REST

Pour modifier le nombre d'instances d'un service donné dans le scaling 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 qui dispose des autorisations IAM permettant de mettre à jour un service. Par exemple, si vous êtes connecté à gcloud, vous pouvez récupérer un jeton d'accès à l'aide de gcloud 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. Cela définit le service sur le scaling manuel. Spécifiez la valeur 0 pour désactiver le service.
  • SERVICE : nom du service.
  • REGION : région dans laquelle le service est déployé. Google Cloud
  • PROJECT_ID : ID du Google Cloud projet.

Pour passer du mode de scaling manuel au mode automatique, envoyez une PATCH requête 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 la page Commandes Terraform de base.

Ajoutez les éléments suivants à une google_cloud_run_v2_service ressource 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 exemple us-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 suit le format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • INSTANCE_COUNT : nombre d'instances que vous mettez à l'échelle 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 de scaling de votre service Cloud Run :

Console

  1. Dans la Google Cloud console, accédez à la page Services de Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur le service qui vous intéresse pour ouvrir le panneau Informations sur le service.

  3. Le paramètre de scaling actuel s'affiche en haut à droite du panneau d'informations sur le service, après le libellé Scaling, à côté de l'icône Stylo.

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 scalingMode et manualInstanceCount attributs.

Désactiver un service

Lorsque vous désactivez un service, toutes les requêtes en cours de traitement peuvent se terminer. Toutefois, toutes les requêtes ultérieures envoyées à l'URL du service échoueront 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, définissez le scaling sur zéro. Vous pouvez désactiver un service à l'aide de la Google Cloud console, de Google Cloud CLI, d'un fichier YAML ou d'une API :

Console

  1. Dans la Google Cloud console, accédez à la page Services de Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur le service que vous souhaitez désactiver pour afficher son panneau de détails, puis sur l'icône Stylo à côté de Scaling en haut à droite.

  3. Recherchez le formulaire Modifier le scaling et sélectionnez Scaling manuel.

    image

    Dans le champ Nombre d'instances, saisissez la valeur 0 (zéro).

  4. Cliquez sur Enregistrer.

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

  1. Téléchargez la configuration YAML de votre service :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Définissez l'attribut manualInstanceCount sur 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.

  3. 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 qui dispose des autorisations IAM permettant de mettre à jour un service. Par exemple, si vous êtes connecté à gcloud, vous pouvez récupérer un jeton d'accès à l'aide de gcloud 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 dans laquelle le service est déployé. Google Cloud
  • PROJECT_ID : ID du Google Cloud projet.

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 exemple us-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 suit le format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

Exemple de scaling basé sur une programmation

Un cas d'utilisation courant du scaling manuel consiste à modifier le nombre d'instances en fonction d'une programmation prédéfinie. Dans cet exemple, nous utilisons Cloud Scheduler pour planifier deux jobs, chacun appelant l'API Cloud Run Admin afin de mettre à l'échelle le nombre d'instances. Le premier job Cloud Scheduler définit le service sur le scaling manuel à un nombre spécifié d'instances pendant les horaires d'ouverture (de 9h à 17h, du lundi au vendredi). Le deuxième job définit le service sur le scaling à la baisse à un nombre spécifié d'instances en dehors des heures de bureau.

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 le scaling manuel basé sur une programmation :

  1. 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 du Google Cloud projet.
  2. Configurez votre service pour le scaling manuel à 10 instances à l'aide de la commande suivante :

    gcloud run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. Créez un job Cloud Scheduler qui effectue manuellement un scaling à un nombre spécifié d'instances de service pendant les horaires 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 du Google Cloud projet.
    • INSTANCE_COUNT : nombre d'instances que vous souhaitez mettre à l'échelle, par exemple 10.
    • PROJECT_NUMBER : numéro du Google Cloud projet.

    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.com pour les jobs Cloud Scheduler. Vous pouvez utiliser n'importe quel compte de service disposant des autorisations nécessaires pour mettre à jour les services Cloud Run.

  4. Créez un job Cloud Scheduler qui réduit manuellement le nombre d'instances de service en dehors des heures de bureau :

    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 du Google Cloud projet.
    • INSTANCE_COUNT : nombre d'instances que vous souhaitez mettre à l'échelle. Pour désactiver le service, définissez cette valeur sur 0.
    • PROJECT_NUMBER : numéro du Google Cloud projet.

    Cette commande crée un job Cloud Scheduler qui effectue un appel HTTP à l'API Cloud Run Admin, en définissant les instances de scaling manuel sur le nombre d'instances que vous avez spécifié. Définir les instances sur zéro désactive le service, mais pas les jobs Cloud Scheduler. Ces jobs continuent de s'exécuter et réinitialisent (et réactivent) le service à un nombre d'instances plus élevé comme prévu.