Ce tutoriel explique comment utiliser Cloud Scheduler et les fonctions Cloud Run pour planifier des sauvegardes manuelles pour une base de données Cloud SQL.
Ce tutoriel prend environ 30 minutes.
Tout d'abord, configurez l'environnement en clonant un dépôt Git contenant les bases de données de test et en stockant ces dernières dans un bucket Cloud Storage.
Ensuite, créez une instance de base de données Cloud SQL pour MySQL et importez les bases de données de test à partir du bucket Cloud Storage dans l'instance.
Une fois l'environnement configuré, créez une tâche Cloud Scheduler qui publie un message de déclenchement de sauvegarde à une date et une heure planifiées sur un sujet Pub/Sub. Le message contient des informations sur le nom de l'instance Cloud SQL et sur l'ID du projet. Le message déclenche une fonction Cloud Run. La fonction utilise l'API Cloud SQL Admin pour démarrer une sauvegarde de base de données sur Cloud SQL. Le schéma suivant illustre ce workflow :
Composants Google Cloud
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
- Cloud Storage : stocke les bases de données de test que vous importez dans Cloud SQL.
- Instance Cloud SQL : contient la base de données à sauvegarder.
- Cloud Scheduler : publie des messages dans un sujet Pub/Sub selon un calendrier défini.
- Pub/Sub : contient les messages envoyés depuis Cloud Scheduler.
- Fonctions Cloud Run : s'abonne au sujet Pub/Sub et, lorsque déclenchées, effectuent un appel d'API vers l'instance Cloud SQL pour lancer la sauvegarde.
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
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
Dans la console Google Cloud, accédez à la page API et activez les API suivantes :
- API Cloud SQL Admin
- API Cloud Run functions
- API Cloud Scheduler
- API Cloud Build
- API App Engine Admin
Dans la suite de ce tutoriel, vous allez exécuter toutes les commandes à partir de Cloud Shell.
Configurer votre environnement
Pour commencer, vous devez d'abord cloner le dépôt contenant les exemples de données. Vous devez ensuite configurer votre environnement et créer des rôles personnalisés disposant des autorisations nécessaires pour ce tutoriel.
Vous pouvez effectuer toutes les tâches de ce tutoriel dans Cloud Shell.
Clonez le dépôt contenant les exemples de données :
git clone https://github.com/GoogleCloudPlatform/training-data-analyst.git
Vous devez créer une base de données avec des enregistrements fictifs à l'aide des données du dépôt
training-data-analyst
.Configurez les variables d'environnement suivantes :
export PROJECT_ID=`gcloud config get-value project` export DEMO="sql-backup-tutorial" export BUCKET_NAME=${USER}-MySQL-$(date +%s) export SQL_INSTANCE="${DEMO}-sql" export GCF_NAME="${DEMO}-gcf" export PUBSUB_TOPIC="${DEMO}-topic" export SCHEDULER_JOB="${DEMO}-job" export SQL_ROLE="sqlBackupCreator" export STORAGE_ROLE="simpleStorageRole" export REGION="us-west2"
Créez deux rôles personnalisés qui ne disposent que des autorisations nécessaires pour ce tutoriel :
gcloud iam roles create ${STORAGE_ROLE} --project ${PROJECT_ID} \ --title "Simple Storage role" \ --description "Grant permissions to view and create objects in Cloud Storage" \ --permissions "storage.objects.create,storage.objects.get"
gcloud iam roles create ${SQL_ROLE} --project ${PROJECT_ID} \ --title "SQL Backup role" \ --description "Grant permissions to backup data from a Cloud SQL instance" \ --permissions "cloudsql.backupRuns.create"
Ces rôles réduisent le champ d'application des accès aux comptes de service des fonctions Cloud Run et Cloud SQL, conformément au principe du moindre privilège.
Créer une instance Cloud SQL
Dans cette section, vous allez créer un bucket Cloud Storage et une instance Cloud SQL pour MySQL. Vous transférerez ensuite la base de données de test dans le bucket Cloud Storage et l'importerez dans l'instance Cloud SQL.
Créer un bucket Cloud Storage
Vous utilisez gcloud CLI pour créer un bucket Cloud Storage.
```sh
gcloud storage buckets create gs://${BUCKET_NAME} --location=${REGION}
```
Créer une instance Cloud SQL et octroyer des autorisations à son compte de service
Créez ensuite une instance Cloud SQL et attribuez à son compte de service les autorisations nécessaires pour créer des exécutions de sauvegarde.
Créez une instance Cloud SQL pour MySQL :
sh gcloud sql instances create ${SQL_INSTANCE} --database-version MYSQL_5_7 --region ${REGION}
Cette opération prend quelques minutes.
Vérifiez que l'instance Cloud SQL est en cours d'exécution :
gcloud sql instances list --filter name=${SQL_INSTANCE}
La sortie ressemble à ceci :
NAME DATABASE_VERSION LOCATION TIER PRIMARY_ADDRESS PRIVATE_ADDRESS STATUS sql-backup-tutorial MYSQL_5_7 us-west2-b db-n1-standard-1 x.x.x.x - RUNNABLE
Accordez à votre compte de service Cloud SQL les autorisations nécessaires pour exporter des données vers Cloud Storage avec le rôle Simple Storage :
export SQL_SA=(`gcloud sql instances describe ${SQL_INSTANCE} \ --project ${PROJECT_ID} \ --format "value(serviceAccountEmailAddress)"`) gcloud storage buckets add-iam-policy-binding gs://${BUCKET_NAME} \ --member=serviceAccount:${SQL_SA} \ --role=projects/${PROJECT_ID}/roles/${STORAGE_ROLE}
Remplir une instance Cloud SQL avec des exemples de données
Vous pouvez à présent importer des fichiers dans votre bucket, puis créer votre exemple de base de données et le remplir.
Accédez au dépôt que vous avez cloné :
cd training-data-analyst/CPB100/lab3a/cloudsql
Importez les fichiers du répertoire dans votre nouveau bucket :
gcloud storage cp * gs://${BUCKET_NAME}
Créer un exemple de base de données. À la question "Do you want to continue (Y/n)?" (Voulez-vous continuer (O/N) ?), saisissez "Y" (Oui) pour continuer.
gcloud sql import sql ${SQL_INSTANCE} gs://${BUCKET_NAME}/table_creation.sql --project ${PROJECT_ID}
Remplissez la base de données. À la question "Do you want to continue (Y/n)?" (Voulez-vous continuer (O/N) ?), saisissez "Y" (Oui) pour continuer.
gcloud sql import csv ${SQL_INSTANCE} gs://${BUCKET_NAME}/accommodation.csv \ --database recommendation_spark \ --table Accommodation
gcloud sql import csv ${SQL_INSTANCE} gs://${BUCKET_NAME}/rating.csv \ --database recommendation_spark \ --table Rating
Créer un sujet, une fonction et une tâche Cloud Scheduler
Dans cette section, vous allez créer un compte de service IAM personnalisé et le lier au rôle SQL personnalisé que vous avez créé dans la section Configurer votre environnement. Vous allez ensuite créer un sujet Pub/Sub et une fonction Cloud Run qui s'abonne au sujet puis utilise l'API Cloud SQL Admin pour lancer une sauvegarde. Enfin, vous allez créer une tâche Cloud Scheduler pour publier régulièrement un message dans le sujet Pub/Sub.
Créer un compte de service pour la fonction Cloud Run
La première étape consiste à créer un compte de service personnalisé et à le lier au rôle SQL personnalisé que vous avez créé dans la section Configurer votre environnement.
Créez un compte de service IAM à utiliser par la fonction Cloud Run :
gcloud iam service-accounts create ${GCF_NAME} \ --display-name "Service Account for GCF and SQL Admin API"
Accordez au compte de service de la fonction Cloud Run l'accès au rôle SQL personnalisé :
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${GCF_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="projects/${PROJECT_ID}/roles/${SQL_ROLE}"
Créer un sujet Pub/Sub
L'étape suivante consiste à créer un sujet Pub/Sub permettant de déclencher la fonction Cloud Run qui interagit avec la base de données Cloud SQL.
```sh
gcloud pubsub topics create ${PUBSUB_TOPIC}
```
Créer une fonction Cloud Run
Créez à présent la fonction Cloud Run.
Créez un fichier
main.py
en collant le contenu suivant dans Cloud Shell :cat <<EOF > main.py import base64 import logging import json from datetime import datetime from httplib2 import Http from googleapiclient import discovery from googleapiclient.errors import HttpError from oauth2client.client import GoogleCredentials def main(event, context): pubsub_message = json.loads(base64.b64decode(event['data']).decode('utf-8')) credentials = GoogleCredentials.get_application_default() service = discovery.build('sqladmin', 'v1beta4', http=credentials.authorize(Http()), cache_discovery=False) try: request = service.backupRuns().insert( project=pubsub_message['project'], instance=pubsub_message['instance'] ) response = request.execute() except HttpError as err: logging.error("Could NOT run backup. Reason: {}".format(err)) else: logging.info("Backup task status: {}".format(response)) EOF
Créez un fichier
requirements.txt
en collant le contenu suivant dans Cloud Shell :cat <<EOF > requirements.txt google-api-python-client Oauth2client EOF
Déployez le code :
gcloud functions deploy ${GCF_NAME} \ --trigger-topic ${PUBSUB_TOPIC} \ --runtime python37 \ --entry-point main \ --service-account ${GCF_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
Créer une tâche Cloud Scheduler
Enfin, créez une tâche Cloud Scheduler pour déclencher périodiquement la fonction de sauvegarde de données. Cloud Scheduler utilise une instance App Engine pour le déploiement.
Créez une instance App Engine pour la tâche Cloud Scheduler :
gcloud app create --region=${REGION}
Créez une tâche Cloud Scheduler :
gcloud scheduler jobs create pubsub ${SCHEDULER_JOB} \ --schedule "0 * * * *" \ --topic ${PUBSUB_TOPIC} \ --message-body '{"instance":'\"${SQL_INSTANCE}\"',"project":'\"${PROJECT_ID}\"'}' \ --time-zone 'America/Los_Angeles'
Tester votre solution
La dernière étape consiste à tester votre solution. Commencez par exécuter la tâche Cloud Scheduler.
Exécutez la tâche Cloud Scheduler manuellement afin de déclencher un vidage MySQL de votre base de données.
gcloud scheduler jobs run ${SCHEDULER_JOB}
Répertoriez les opérations effectuées sur l'instance MySQL et vérifiez s'il existe une opération de type
BACKUP_VOLUME
:gcloud sql operations list --instance ${SQL_INSTANCE} --limit 1
Le résultat affiche une tâche de sauvegarde terminée. Par exemple :
NAME TYPE START END ERROR STATUS 8b031f0b-9d66-47fc-ba21-67dc20193749 BACKUP_VOLUME 2020-02-06T21:55:22.240+00:00 2020-02-06T21:55:32.614+00:00 - DONE
Effectuer un nettoyage
Afin d'éviter que des frais ne soient facturés sur votre compte Google Cloud pour les ressources utilisées dans ce tutoriel, supprimez le projet que vous venez de créer. Il s'agit du moyen le plus simple d'empêcher la facturation.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Si vous ne souhaitez pas supprimer l'intégralité du projet, supprimez chacune des ressources que vous avez créées. Pour ce faire, accédez aux pages correspondantes dans la console Google Cloud, sélectionnez la ressource, puis supprimez-la.
Étape suivante
- Apprenez à planifier des instances de calcul avec Cloud Scheduler.
- Apprenez-en plus sur les sauvegardes Cloud SQL.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.