- Planification des augmentations et des diminutions automatiques de la taille du pool de démarrage rapide.
- Démarrer automatiquement les postes de travail selon une programmation régulière.
Ce tutoriel vous aide à augmenter et à diminuer la taille du pool de démarrage rapide pour l'adapter aux heures d'ouverture habituelles.
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.
Définissez les variables
PROJECT_ID
etREGION
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.
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 :
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
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 scriptupdate_config.sh
.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 lesWorkstationConfig
d'un cluster donné et mettre à jour sa taille de pool de démarrage rapide surPOOL_SIZE
.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
Lorsque vous êtes invité à saisir le nom du service, appuyez sur Entrée pour accepter le nom par défaut,
workstation-config-updater
.Si vous êtes invité à activer l'API Artifact Registry ou à autoriser la création du dépôt Artifact Registry, appuyez sur y.
Lorsque vous êtes invité à autoriser les appels non authentifiés, appuyez sur n.
Patientez jusqu'à la fin du déploiement.
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
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"
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
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
dansWorkstationCluster
$CLUSTER à 2 à 9h PST du lundi au vendredi.Pour plus d'informations, reportez-vous à la rubrique Configurer la planification de tâches.
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.
Accédez à la page Cloud Scheduler dans la console Google Cloud .
workstation-pool-increaser-cron
devrait apparaître dans la liste des tâches.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.
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 :
Accédez à la page Configurations de stations de travail dans la console Google Cloud .
Vérifiez que la taille du pool de démarrage rapide est définie sur 2.
Affichez les journaux de votre service Cloud Run.