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


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

  • Planifier l'augmentation ou la diminution automatique de la taille du pool de démarrage rapide
  • Démarrage automatique des stations de travail à intervalles réguliers.

Ce tutoriel vous aide à augmenter et réduire la taille du pool de démarrage rapide afin de correspondent aux horaires d'ouverture habituels.

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 une tâche Cloud Scheduler qui planifie l'exécution du service créé à l'étape 1 de 9h à 17h, du lundi au vendredi, conformément aux heures de bureau PST.

Coûts

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

  • 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, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. 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 gratuits 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.

    Go to project selector

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activer les API Cloud Run, Cloud Scheduler, Cloud Workstations .

    Activer les API

  5. Installez Google Cloud CLI.
  6. Pour initialiser gcloudCLI, exécutez la commande suivante :

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

    Go to project selector

  8. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  9. Activer les API Cloud Run, Cloud Scheduler, Cloud Workstations .

    Activer les API

  10. Installez Google Cloud CLI.
  11. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init

Préparer l'environnement

Définissez les variables d'environnement suivantes, qui sont utilisées par le des scripts automatisés que vous créerez par la suite.

  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. 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.
  • Jobs Cloud Scheduler pour passer des appels selon un calendrier défini afin de mettre à jour le WorkstationConfig.

Schéma de l'architecture système montrant la planification des opérations des stations de travail à l'aide de Cloud Scheduler et Cloud Run

créer un service Cloud Run ;

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

Pour écrire l'application d'écoute du 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 le 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 répertorier tous les WorkstationConfig d'un cluster donné et mettre à jour sa Taille du 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 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. Lorsque l'URL du service s'affiche au format suivant, copiez-la:

SERVICE_URL=$SERVICE_URL

Configurer le compte de service pour appeler Cloud Run

Le service "station de travail-config-updater" que vous avez déployé n'autorise pas non authentifiés.

Cloud Scheduler requiert un compte de service disposant des identifiants appropriés pour appeler le service "station-config-updater".

Configurer le compte de service

  1. Si vous ne possédez pas encore de compte de service que vous souhaitez utiliser pour les tâches Cloud Scheduler, créez un compte de service.

    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é depuis 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 un job pour augmenter la taille du pool de démarrage rapide pour 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 pour la configuration de votre station 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 jobs

Pour vous assurer que vos tâches 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 doit apparaître dans la liste des tâches.

  2. Sur la ligne de la tâche workstation-pool-increaser-cron, cliquez sur Actions > Forcer l'exécution du job.

    L'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 vous avez pour exécuter correctement votre job.

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

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

    Accéder à la page "Configurations des stations de travail"

  2. Vérifiez que la taille du pool de démarrage rapide correspond à 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

Bien que Cloud Run ne facture pas lorsque le service n'est pas utilisé, il se peut que des frais vous soient facturés pour le stockage de l'image de conteneur dans Artifact Registry. Vous pouvez supprimer votre image de conteneur ou votre projet Google Cloud afin d'éviter que des frais ne vous soient facturés. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

  1. Dans la console Google Cloud, 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 sur Arrêter pour supprimer le projet.

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.

Étape suivante

  • Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.