Vous pouvez utiliser Cloud Scheduler pour démarrer et arrêter des instances Cloud SQL de manière régulière. Par exemple, vous pouvez souhaiter que vos instances ne s'exécutent qu'à certaines heures.
Ce tutoriel explique comment démarrer et arrêter automatiquement une instance Cloud SQL pour SQL Server en créant une architecture événementielle à l'aide des produits Google Cloud .
Objectifs
Dans ce tutoriel, vous allez créer des jobs Cloud Scheduler qui planifient l'exécution des instances Cloud SQL dotées d'une étiquette de ressource env=dev pendant des heures spécifiques. Vous ne planifierez qu'une seule instance. Cependant, l'architecture décrite dans ce tutoriel peut être utilisée pour arrêter et démarrer plusieurs instances dans lesquelles l'étiquette de ressource est env=dev.
Pour ce faire, procédez comme suit :
- Créez une instance Cloud SQL pour SQL Server et attribuez-lui un libellé de ressource spécifique (
env=dev). - Créez deux sujets Pub/Sub qui serviront de sources d'événements pour vos déclencheurs Eventarc et d'agents de messages.
- Créez et déployez deux fonctions Cloud Run basées sur des événements déclenchées par les sujets Pub/Sub. Lorsqu'elles sont déclenchées, les fonctions recherchent les instances Cloud SQL de votre projet qui correspondent au libellé fourni dans la charge utile du message Pub/Sub (
env=dev). - Créez et déployez deux déclencheurs Eventarc. Les événements de sujet Pub/Sub sont acheminés vers vos fonctions en tant que requêtes HTTP, et le contenu du message d'événement est transmis en tant que données d'entrée aux fonctions.
- Créez deux tâches Cron Cloud Scheduler pour publier un message contenant le libellé cible dans les sujets Pub/Sub à des moments spécifiques. Programmez le démarrage des instances à 9h et leur arrêt à 17h, du lundi au vendredi.
Le diagramme suivant présente une vue d'ensemble de l'architecture événementielle :
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
-
Cloud Run functions
Cloud Run functions operate as Cloud Run services and are billed accordingly.
- Cloud Scheduler
- Cloud SQL for SQL Server
-
Eventarc
Cloud Run uses Eventarc for event delivery. Pricing for Eventarc is not included in the Cloud Run pricing.
- Pub/Sub
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.
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
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour en savoir plus sur la résolution de ce problème, consultez Développer des applications dans un environnement Google Cloud limité.
- 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 sans frais pour exécuter, tester et déployer des charges de travail.
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Si vous utilisez un projet existant pour ce guide, vérifiez que vous disposez des autorisations nécessaires pour suivre les instructions. Si vous avez créé un projet, vous disposez déjà des autorisations requises.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez les API Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin et Eventarc :
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.gcloud services enable cloudbuild.googleapis.com
cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com -
Configurez l'authentification :
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
roles/iam.serviceAccountCreator) et "Administrateur IAM du projet" (roles/resourcemanager.projectIamAdmin). Découvrez comment attribuer des rôles. -
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAMEpar le nom que vous souhaitez donner au compte de service. -
Attribuez des rôles au compte de service. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME: nom du compte de service.PROJECT_ID: ID du projet dans lequel vous avez créé le compte de service.ROLE: rôle à accorder
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Si vous utilisez un projet existant pour ce guide, vérifiez que vous disposez des autorisations nécessaires pour suivre les instructions. Si vous avez créé un projet, vous disposez déjà des autorisations requises.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez les API Cloud Build, Cloud Functions, Cloud Pub/Sub, Cloud Run Admin, Cloud Scheduler, Cloud SQL Admin et Eventarc :
Rôles requis pour activer les API
Pour activer les API, vous devez disposer de l'autorisation
serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.gcloud services enable cloudbuild.googleapis.com
cloudfunctions.googleapis.com pubsub.googleapis.com run.googleapis.com cloudscheduler.googleapis.com sqladmin.googleapis.com eventarc.googleapis.com -
Configurez l'authentification :
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
roles/iam.serviceAccountCreator) et "Administrateur IAM du projet" (roles/resourcemanager.projectIamAdmin). Découvrez comment attribuer des rôles. -
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAMEpar le nom que vous souhaitez donner au compte de service. -
Attribuez des rôles au compte de service. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
roles/cloudbuild.builds.builder, roles/cloudsql.editor, roles/run.invoker:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME: nom du compte de service.PROJECT_ID: ID du projet dans lequel vous avez créé le compte de service.ROLE: rôle à accorder
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
Créer une instance Cloud SQL
Pour créer une instance Cloud SQL pour SQL Server avec le libellé de ressource env=dev, utilisez la commande gcloud beta sql instances create :
gcloud beta sql instances create dev-instance \ --database-version=SQLSERVER_2019_EXPRESS \ --region=us-west1 \ --tier=db-custom-2-3840 \ --root-password=YourStrongPassword123! \ --labels=env=dev
La création de l'instance peut prendre quelques minutes. Pour en savoir plus, consultez la page Créer des instances.
Créer des sujets Pub/Sub
Pour créer les deux sujets Pub/Sub qui servent de sources d'événements pour vos déclencheurs Eventarc, utilisez la commande gcloud pubsub topics create :
gcloud pubsub topics create start-instance-event gcloud pubsub topics create stop-instance-event
Pour en savoir plus, consultez Créer un sujet.
Créer et déployer des fonctions Cloud Run
Créez et déployez deux fonctions Cloud Run (Node.js) déclenchées par Eventarc via des sujets Pub/Sub. Lorsqu'elles sont déclenchées, les fonctions recherchent les instances Cloud SQL de votre projet qui correspondent au libellé fourni dans la charge utile du message Pub/Sub (env=dev) :
- La fonction de démarrage met à jour le
activationPolicyde l'instance surALWAYS, ce qui l'active. - La fonction d'arrêt met à jour
activationPolicysurNEVER, ce qui arrête l'instance.
Pour en savoir plus, consultez Écrire des fonctions Cloud Run et Déclencheurs des fonctions Cloud Run.
Créer les fonctions
Créez des fonctions Cloud Run Functions basées sur des événements qui annulent automatiquement les événements conformes à la spécification CloudEvents. Cette spécification standard du secteur décrit les données d'événement de manière courante.
Votre code source doit définir un point d'entrée de fonction, qui est le code qui s'exécute lorsque Cloud Run appelle votre fonction. Vous spécifiez ce point d'entrée lorsque vous déployez votre fonction.
Téléchargez le code.
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire approprié.
cd nodejs-docs-samples/functions/scheduleinstance/
Déployer les fonctions basées sur des événements
Pour déployer les fonctions sur Cloud Run, utilisez la commande gcloud run deploy.
Déployez la fonction qui démarre l'instance Cloud SQL :
gcloud run deploy startinstance \ --source . \ --function startInstanceEvent \ --base-image nodejs24 \ --region=us-west1 \ --build-service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Si vous êtes invité à créer un dépôt dans la région spécifiée, saisissez
y.À l'invite
Allow unauthenticated invocations, saisissezn.Déployez la fonction qui arrête l'instance Cloud SQL :
gcloud run deploy stopinstance \ --source . \ --function stopInstanceEvent \ --base-image nodejs24 \ --region=us-west1 \ --build-service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Si vous êtes invité à créer un dépôt dans la région spécifiée, saisissez
y.À l'invite
Allow unauthenticated invocations, saisissezn.
Une fois le déploiement terminé, la Google Cloud CLI affiche une URL sur laquelle le service est en cours d'exécution.
Créer des déclencheurs Eventarc
Pour créer des déclencheurs Eventarc qui acheminent les événements depuis Pub/Sub, utilisez la commande gcloud eventarc triggers create. Chaque message publié dans le sujet Pub/Sub déclenche la fonction correspondante, et son contenu est transmis sous forme de données d'entrée.
Créez un déclencheur qui démarre l'instance Cloud SQL :
gcloud eventarc triggers create start-instance-trigger \ --location=us-west1 \ --destination-run-service=startinstance \ --destination-run-region=us-west1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=start-instance-event \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Créez un déclencheur qui arrête l'instance Cloud SQL :
gcloud eventarc triggers create stop-instance-trigger \ --location=us-west1 \ --destination-run-service=stopinstance \ --destination-run-region=us-west1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=stop-instance-event \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
L'activation d'un nouveau déclencheur peut prendre jusqu'à deux minutes.
Facultatif : Vérifier que les fonctions sont opérationnelles
Vous pouvez vérifier que vos fonctions fonctionnent en publiant directement des messages dans les sujets Pub/Sub. La mise à jour de l'instance Cloud SQL peut prendre quelques minutes.
Pour arrêter les instances portant le libellé
env=dev, utilisez la commandegcloud pubsub topics publishpour publier un message dans le sujet d'arrêt :gcloud pubsub topics publish stop-instance-event --message='{"label":"env=dev"}'
Pour vérifier que l'instance est arrêtée, vérifiez sa règle d'activation à l'aide de la commande
gcloud sql instances describe:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Le résultat
NEVERdoit s'afficher.Pour démarrer des instances avec le libellé
env=dev, publiez un message dans le sujet de démarrage :gcloud pubsub topics publish start-instance-event --message='{"label":"env=dev"}'
Vérifiez que l'instance a démarré en consultant sa règle d'activation :
gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Le résultat
ALWAYSdoit s'afficher.
Créer les tâches Cloud Scheduler
Créez des tâches Cloud Scheduler qui publient des messages dans les sujets Pub/Sub à intervalles réguliers.
Pour créer un job qui s'exécute à 9h du lundi au vendredi et qui démarre les instances, utilisez la commande
gcloud scheduler jobs create:gcloud scheduler jobs create pubsub startup-dev-instances \ --schedule '0 9 * * 1-5' \ --topic start-instance-event \ --message-body '{"label":"env=dev"}' \ --time-zone 'America/Los_Angeles' \ --location us-east1
Créez un job qui s'exécute à 17h du lundi au vendredi et qui arrête les instances :
gcloud scheduler jobs create pubsub shutdown-dev-instances \ --schedule '0 17 * * 1-5' \ --topic stop-instance-event \ --message-body '{"label":"env=dev"}' \ --time-zone 'America/Los_Angeles' \ --location us-east1
En raison d'une configuration initiale, l'exécution de la première tâche créée dans un projet peut prendre quelques minutes.
Facultatif : Vérifier que les jobs fonctionnent
Vous pouvez exécuter manuellement vos tâches Cloud Scheduler pour vérifier qu'elles déclenchent correctement les fonctions de démarrage et d'arrêt. La mise à jour de l'instance Cloud SQL peut prendre quelques minutes.
Pour exécuter le job et arrêter l'instance Cloud SQL, utilisez la commande
gcloud scheduler jobs run:gcloud scheduler jobs run shutdown-dev-instances --location="us-east1"
Vérifiez que la règle d'activation de
dev-instanceestNEVER:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Exécutez le job pour démarrer l'instance :
gcloud scheduler jobs run startup-dev-instances --location="us-east1"
Vérifiez que la règle d'activation de
dev-instanceestALWAYS:gcloud sql instances describe dev-instance --format="value(settings.activationPolicy)"
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans ce tutoriel ne soient facturées, supprimez-les.
- Supprimez les jobs Cloud Scheduler :
gcloud scheduler jobs delete startup-dev-instances --location=us-east1 --quiet gcloud scheduler jobs delete shutdown-dev-instances --location=us-east1 --quiet
- Supprimez les déclencheurs Eventarc :
gcloud eventarc triggers delete start-instance-trigger --location=us-west1 --quiet gcloud eventarc triggers delete stop-instance-trigger --location=us-west1 --quiet
- Supprimez les services Cloud Run :
gcloud run services delete startinstance --region=us-west1 --quiet gcloud run services delete stopinstance --region=us-west1 --quiet
- Supprimez les sujets Pub/Sub :
gcloud pubsub topics delete start-instance-event gcloud pubsub topics delete stop-instance-event
- Supprimez l'instance Cloud SQL :
gcloud sql instances delete dev-instance --quiet
- Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.
Supprimer un projet Google Cloud :
gcloud projects delete PROJECT_ID
É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.