Planifier des opérations de station de travail à l'aide de Cloud Scheduler et de Cloud Run


Ce tutoriel explique comment utiliser Cloud Scheduler et Cloud Run pour effectuer automatiquement des opérations telles que

  • Planification des augmentations et des diminutions automatiques de la taille du pool de démarrage rapide.
  • Démarrer automatiquement les postes de travail à intervalles réguliers.

Ce tutoriel vous aide à augmenter et à diminuer la taille du pool de démarrage rapide pour l'adapter aux heures d'ouverture habituelles.

Objectifs

  1. Écrivez et déployez un service Cloud Run qui met à jour la taille du pool de démarrage rapide pour une configuration de station de travail.
  2. Configurez un job Cloud Scheduler qui planifie l'exécution du service créé à l'étape 1 de 9h00 à 17h00, du lundi au vendredi, pour correspondre aux heures de bureau PST.

Coûts

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

  • Cloud Scheduler
  • Cloud Run

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, supprimez les ressources que vous avez créées pour éviter que des frais vous soient facturés. 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la CLI gcloud avec votre identité fédérée.

  7. Pour initialiser la CLI gcloud, exécutez la commande suivante :

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  10. Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la CLI gcloud avec votre identité fédérée.

  13. Pour initialiser la CLI gcloud, exécutez la commande suivante :

    gcloud init
  14. Préparer l'environnement

    Définissez les variables d'environnement suivantes, qui sont utilisées par les scripts automatisés que vous créerez ultérieurement.

    1. Définissez les variables PROJECT_ID et REGION que vous prévoyez d'utiliser :

      PROJECT_ID=$PROJECT_ID
      REGION=$REGION
      

      Remplacez $REGION par le nom de la région que vous prévoyez d'utiliser, par exemple us-central1.

      Pour en savoir plus sur les régions disponibles, consultez Emplacements Cloud Workstations.

    Architecture de l'application

    Cette solution comprend les composants Google Cloud suivants :

    • Cloud Run pour mettre à jour la taille du pool de démarrage rapide de WorkstationConfig.
    • Tâches Cloud Scheduler permettant d'appeler les fonctions de mise à jour de WorkstationConfig selon le calendrier défini.

    Diagramme d'architecture système montrant la planification des opérations Workstations à l'aide de Cloud Scheduler et Cloud Run

    créer un service Cloud Run ;

    La première étape consiste à configurer un serveur Web simple pour écouter les requêtes HTTP que vous recevez sur le port 8080. Comme l'application est conteneurisée, vous pouvez écrire votre serveur dans n'importe quel langage.

    Pour écrire l'application d'écouteur de serveur Web en Python, procédez comme suit :

    1. Créez un répertoire nommé workstation-config-updater et modifiez les sous-répertoires comme suit :

      mkdir workstation-config-updater
      cd workstation-config-updater
      
    2. Créez un fichier nommé app.py et collez-y le code suivant :

      import os, subprocess
      from flask import Flask, request, abort
      
      app = Flask(__name__)
      
      @app.route("/", methods=["POST"])
      def update():
          app.logger.info("Update request received.")
          data = request.json
          cluster = data["cluster"]
          region = data["region"]
          pool_size = data["pool-size"]
      
          path = os.path.join(app.root_path, "update_config.sh")
          o = subprocess.run(
              [path, cluster, region, pool_size],
              stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True
          )
          app.logger.info("Sending response:", o.stdout)
          return o.stdout
      
      if __name__ == "__main__":
          app.run(host="0.0.0.0", port=8080, debug=True)
      

      Ce code crée un serveur Web de base qui écoute le port défini par la variable d'environnement PORT et exécute le script update_config.sh.

    3. Créez un fichier nommé update_config.sh et collez-y le code suivant :

      #!/bin/bash
      
      set -e
      
      if [ $# -ne 3 ]
      then
         echo "Usage: update_config.sh CLUSTER REGION POOL_SIZE"
         exit 1
      fi
      
      CLUSTER=$1
      REGION=$2
      POOL_SIZE=$3
      
      # list workstation configs
      echo "Attempting to list workstation configs in cluster $CLUSTER and region $REGION ..."
      for CONFIG in $(gcloud  workstations configs list --cluster $CLUSTER --region $REGION --format="value(NAME)"); do
          echo "Attempting to update Quick Pool Size to $POOL_SIZE for config $CONFIG ..."
          # update the workstation config pool-size
          RET=$(gcloud workstations configs update $CONFIG --cluster $CLUSTER  --region $REGION --pool-size=$POOL_SIZE)
          if [[ $RET -eq 0 ]]; then
              echo "Workstation config $CONFIG updated."
          else
              echo "Workstation config $CONFIG update failed."
          fi
      done
      
      

      Ce script utilise des commandes gcloud pour lister tous les WorkstationConfig d'un cluster donné et mettre à jour sa taille de pool de démarrage rapide sur POOL_SIZE.

    4. Créez un fichier nommé Dockerfile et collez-y le code suivant :

      FROM google/cloud-sdk
      
      RUN apt-get update && apt-get install -y python3-pip python3
      
      # Copy local code to the container image.
      ENV APP_HOME /app
      WORKDIR $APP_HOME
      COPY . ./
      
      RUN /bin/bash -c 'ls -la; chmod +x ./update_config.sh'
      
      # Install production dependencies.
      RUN pip3 install Flask gunicorn
      
      # Run the web service on container startup
      CMD exec gunicorn --bind :8080 --workers 1 --threads 8 app:app
      

      Ce code conteneurise l'application pour la préparer à être déployée sur Cloud Run.

    Déployer dans Cloud Run

    Pour déployer sur Cloud Run, exécutez la commande suivante :

    gcloud run deploy --source . --project $PROJECT_ID --region $REGION
    1. Lorsque vous êtes invité à saisir le nom du service, appuyez sur Entrée pour accepter le nom par défaut, workstation-config-updater.

    2. Si vous êtes invité à activer l'API Artifact Registry ou à autoriser la création du dépôt Artifact Registry, appuyez sur y.

    3. Lorsque vous êtes invité à autoriser les appels non authentifiés, appuyez sur n.

    4. Patientez jusqu'à la fin du déploiement.

    5. Copiez l'URL du service lorsqu'elle s'affiche au format suivant :

    SERVICE_URL=$SERVICE_URL
    

    Configurer le compte de service pour appeler Cloud Run

    Le service workstation-config-updater que vous avez déployé n'autorise pas les appels non authentifiés.

    Cloud Scheduler nécessite un compte de service disposant des identifiants appropriés pour appeler le service workstation-config-updater.

    Configurer le compte de service

    1. Si vous ne disposez pas encore d'un compte de service que vous souhaitez utiliser pour les tâches Cloud Scheduler, créez-en un.

      gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
          --description="$DESCRIPTION" \
          --display-name="$DISPLAY_NAME"
    2. Ajoutez la liaison de rôle IAM requise pour permettre à votre compte de service d'appeler Cloud Run.

      gcloud run services add-iam-policy-binding workstation-config-updater \
          --member=serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --region $REGION \
          --role=roles/run.invoker

    Créer une configuration Cloud Scheduler avec authentification

    1. Créez un job et spécifiez le URL que vous avez copié à partir de Déployer sur Cloud Run :

      gcloud scheduler jobs create http workstation-pool-increaser-cron \
          --http-method=POST \
          --location=us-central1 \
          --schedule="0 9 * * 1-5" \
          --time-zone="America/Los_Angeles" \
          --headers "Content-Type=application/json" \
          --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "2"}' \
          --uri=$SERVICE_URL \
          --oidc-service-account-email=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Cette commande planifie une tâche pour augmenter la taille du pool de démarrage rapide pour tous les WorkstationConfigs dans WorkstationCluster $CLUSTER à 2 à 9h PST du lundi au vendredi.

      Pour plus d'informations, reportez-vous à la rubrique Configurer la planification de tâches.

    2. De même, pour réduire la taille du pool de la configuration de votre poste de travail à 0 à la fin d'une journée de travail, exécutez la commande suivante :

      gcloud scheduler jobs create http workstation-pool-decreaser-cron \
          --http-method=POST \
          --location=$REGION \
          --schedule="0 17 * * 1-5" \
          --time-zone="America/Los_Angeles" \
          --headers "Content-Type=application/json" \
          --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "0"}' \
          --uri=$SERVICE_URL \
          --oidc-service-account-email=$SERVICE-ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

    Facultatif : Vérifier les tâches

    Pour vous assurer que vos jobs fonctionnent comme prévu, vous pouvez les vérifier.

    1. Accédez à la page Cloud Scheduler dans la console Google Cloud .

      Accéder à Cloud Scheduler

      workstation-pool-increaser-cron devrait apparaître dans la liste des tâches.

    2. Sur la ligne correspondant à la tâche workstation-pool-increaser-cron, cliquez sur Actions > Forcer l'exécution d'une tâche.

      La première exécution de la première tâche créée dans un projet peut prendre quelques minutes.

    3. Dans la colonne État de la dernière exécution, l'état Success indique que la tâche a bien été exécutée.

    Pour vérifier que les configurations de la station de travail sont à jour, procédez comme suit :

    1. Accédez à la page Configurations de stations de travail dans la console Google Cloud .

      Accéder aux configurations de stations de travail

    2. Vérifiez que la taille du pool de démarrage rapide est définie sur 2.

    3. Affichez les journaux de votre service Cloud Run.

    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 le projet de test

    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 guide de démarrage rapide.

    Supprimer votre dépôt

    Cloud Run ne vous facture pas lorsque votre service déployé n'est pas utilisé. Toutefois, il se peut que des frais vous soient facturés pour le stockage de l'image de conteneur dans Artifact Registry. Pour supprimer des dépôts Artifact Registry, suivez les étapes décrites dans Supprimer des dépôts de la documentation Artifact Registry.

    Supprimer votre service

    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, procédez comme suit :

    Console

    Pour supprimer un service, procédez comme suit :

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

      Accédez à Cloud Run

    2. Recherchez le service que vous souhaitez supprimer dans la liste des services, puis cliquez la case correspondante pour le sélectionner.

    3. Cliquez sur Supprimer pour supprimer toutes les révisions du service.

    gcloud

    Pour supprimer un service, exécutez la commande suivante :

    gcloud run services delete SERVICE --region REGION

    Remplacez les éléments suivants :

    • SERVICE : nom de votre service.
    • REGION : Google Cloud région du service.

    Supprimer votre projet de test

    La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources de ce projet. Pour libérer toutes les ressources Google Cloud de votre projet, procédez comme suit :

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Supprimer des jobs Cloud Scheduler

    Pour supprimer des ressources Cloud Scheduler individuelles,

    1. Accédez à la page Cloud Scheduler dans la console Google Cloud .

      Accéder à Cloud Scheduler

    2. Cochez les cases situées en regard de vos tâches.

    3. Cliquez sur le bouton Supprimer en haut de la page et confirmez la suppression.

    Étapes suivantes

    • Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Cloud Architecture Center.