Ce tutoriel explique comment planifier des sauvegardes pour des instances Filestore à l'aide de Cloud Scheduler et de Cloud Run Functions.
Objectifs
- Créez un compte de service client pour Cloud Scheduler qui dispose des identifiants nécessaires pour appeler une fonction Cloud Run.
- Créez un compte de service client pour les fonctions Cloud Run qui dispose des identifiants nécessaires pour appeler le point de terminaison Filestore.
- Créer une fonction Cloud Run Functions qui crée une sauvegarde d'une instance Filestore
- Créer une fonction Cloud Run Functions qui supprime une sauvegarde d'une instance Filestore
- Créez une tâche Cloud Scheduler qui exécute l'une ou l'autre fonction à intervalles réguliers.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Artifact Registry API
- Cloud Build API
- Filestore API
- Cloud Functions API
- Cloud Logging API
- Pub/Sub API
- Cloud Run Admin API
- Cloud Scheduler API
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- 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.
-
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.
-
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Si vous ne disposez pas d'une instance Filestore dans votre projet, vous devez d'abord en créer une.
Créer des comptes de service client pour les fonctions Cloud Scheduler et Cloud Run
Si vous ne l'avez pas déjà fait, dans la console Google Cloud, cliquez sur Activer Cloud Shell.
Créer un compte de service client que Cloud Scheduler exécute pour appeler une fonction Cloud Run Pour cet exemple, utilisez la commande
iam service-accounts create
pour nommer le compteschedulerunner
et définir le nom à afficher sur "Service Account for FS Backups-Scheduler":gcloud iam service-accounts create schedulerunner \ --display-name="Service Account for FS Backups-Scheduler"
Créez un compte de service client que les fonctions Cloud Run exécutent pour appeler le point de terminaison Filestore. Pour cet exemple, nous appelons le compte
backupagent
et f définissons le nom à afficher sur "Service Account for FS Backups-GCF":gcloud iam service-accounts create backupagent \ --display-name="Service Account for FS Backups-GCF"
Vous pouvez vérifier si le compte de service est créé en exécutant la commande
iam service-accounts list
:gcloud iam service-accounts list
La commande renvoie un résultat semblable à celui-ci:
NAME EMAIL DISABLED Service Account for FS Backups-GCF backupagent@$PROJECT_ID.iam.gserviceaccount.com False Service Account for FS Backups-Scheduler schedulerunner@$PROJECT_ID.iam.gserviceaccount.com False
Configurer des variables d'environnement
Configurez les variables d'environnement suivantes dans votre environnement local:
ID et projet Google Cloud:
export PROJECT_ID=`gcloud config get-value core/project` export PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format="value(projectNumber)"`
L'agent de service Cloud Scheduler et les comptes de service client pour les fonctions Cloud Scheduler et Cloud Run:
export SCHEDULER_SA=service-$PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com export SCHEDULER_CLIENT_SA=schedulerunner@$PROJECT_ID.iam.gserviceaccount.com export GCF_CLIENT_SA=backupagent@$PROJECT_ID.iam.gserviceaccount.com
Votre instance Filestore:
export SOURCE_INSTANCE_LOCATION=fs-location export SOURCE_INSTANCE_NAME=instance-id export SHARE_NAME=file-share-name
Remplacez les éléments suivants :
- fs-location par la zone ou la région où se trouve l'instance Filestore source.
- instance-id par l'ID de l'instance Filestore source.
- file-share-name est le nom que vous spécifiez pour le partage de fichiers NFS qui est diffusé à partir de l'instance.
Configurez les variables d'environnement pour votre sauvegarde Filestore:
export BACKUP_REGION=backup-region
Remplacez backup-region par la région dans laquelle vous souhaitez stocker la sauvegarde.
Créer une fonction permettant de créer une sauvegarde
Dans la console Google Cloud, accédez à la page des fonctions Cloud Run.
Cliquez sur Créer une fonction, puis configurez la fonction comme suit:
- Principes de base :
- Environnement: pour cet exemple, sélectionnez
2nd gen
, qui est la valeur par défaut. - Nom de la fonction: pour cet exemple, nous appelons la fonction :
fsbackup
. - Région: pour cet exemple, sélectionnez
us-central1
.
- Environnement: pour cet exemple, sélectionnez
- Déclencheur :
- Type de déclencheur: sélectionnez
HTTPS
dans le menu. - Authentification: sélectionnez
Require authentication
.
- Type de déclencheur: sélectionnez
- Paramètres d'exécution, de compilation, de connexion et de sécurité :
- Exécution > Compte de service d'exécution > Compte de service: sélectionnez
Service Account for FS Backups-GCF
(backupagent@$PROJECT_ID.iam.gserviceaccount.com
) dans le menu. - Connexions > Paramètres d'entrée: sélectionnez
Allow all traffic
.
- Exécution > Compte de service d'exécution > Compte de service: sélectionnez
- Principes de base :
Cliquez sur Suivant, puis poursuivez la configuration comme suit:
- Environnement d'exécution: sélectionnez
Python 3.8
ou une version ultérieure entièrement compatible avec les fonctions Cloud Run dans le menu. - Code source :
Inline editor
. - Point d'entrée: saisissez
create_backup
. Ajoutez les dépendances suivantes à votre fichier
requirements.txt
:google-auth==2.29.0 requests==2.31.0
Selon votre cas d'utilisation, vous devrez peut-être spécifier d'autres dépendances avec leurs numéros de version correspondants. Pour en savoir plus, consultez la section Packages préinstallés.
Copiez l'exemple de code Python suivant dans le fichier
main.py
à l'aide de l'éditeur intégré:Créer une sauvegarde
- Cet exemple de code crée une sauvegarde nommée
mybackup-
, ainsi que l'heure de création.
PROJECT_ID = 'project-id' SOURCE_INSTANCE_LOCATION = 'fs-location' SOURCE_INSTANCE_NAME = 'instance-id' SOURCE_FILE_SHARE_NAME = 'file-share-name' BACKUP_REGION = 'backup-region' import google.auth import google.auth.transport.requests from google.auth.transport.requests import AuthorizedSession import time import requests import json credentials, project = google.auth.default() request = google.auth.transport.requests.Request() credentials.refresh(request) authed_session = AuthorizedSession(credentials) def get_backup_id(): return "mybackup-" + time.strftime("%Y%m%d-%H%M%S") def create_backup(request): trigger_run_url = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups?backupId={}".format(PROJECT_ID, BACKUP_REGION, get_backup_id()) headers = { 'Content-Type': 'application/json' } post_data = { "description": "my new backup", "source_instance": "projects/{}/locations/{}/instances/{}".format(PROJECT_ID, SOURCE_INSTANCE_LOCATION, SOURCE_INSTANCE_NAME), "source_file_share": "{}".format(SOURCE_FILE_SHARE_NAME) } print("Making a request to " + trigger_run_url) r = authed_session.post(url=trigger_run_url, headers=headers, data=json.dumps(post_data)) data = r.json() print(data) if r.status_code == requests.codes.ok: print(str(r.status_code) + ": The backup is uploading in the background.") else: raise RuntimeError(data['error']) return "Backup creation has begun!"
Remplacez les éléments suivants :
- project-id par l'ID de projet Google Cloud de l'instance Filestore source.
- fs-location par la zone ou la région de l'instance Filestore source.
- instance-id par le nom de l'instance Filestore source.
- file-share-name par le nom du partage de fichiers ;
- backup-region par la région dans laquelle stocker la sauvegarde.
Cliquez sur Tester la fonction.
Une nouvelle session dans un nouvel onglet s'ouvre dans Cloud Shell. Si l'opération réussit, le message suivant est renvoyé:
Function is ready to test.
Cliquez sur Déployer et attendez la fin du déploiement.
Revenez à l'onglet Cloud Shell précédent.
Supprimer une sauvegarde
Cet exemple de code supprime les sauvegardes antérieures à une période prédéfinie.
Vous ne pouvez supprimer qu'une seule sauvegarde par instance source à la fois. Pour en savoir plus, consultez la section Sauvegardes.
Configurez cette fonction de la même manière que la fonction que vous avez utilisée pour créer une sauvegarde, en appliquant les modifications suivantes:
- Nom de la fonction :
deletefsbackup
. - Point d'entrée :
delete_backup
.
PROJECT_ID = 'project-id' BACKUP_REGION = 'region' BACKUP_RETENTION_TIME_HRS = hours import google.auth import google.auth.transport.requests from google.auth.transport.requests import AuthorizedSession import time import requests import json credentials, project = google.auth.default() request = google.auth.transport.requests.Request() credentials.refresh(request) authed_session = AuthorizedSession(credentials) retention_seconds = BACKUP_RETENTION_TIME_HRS * 60 * 60 def delete_backup(request): now = time.time() backup_list = [] trigger_run_url = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups".format(PROJECT_ID, BACKUP_REGION) r = authed_session.get(trigger_run_url) data = r.json() if not data: print("No backups to delete.") return "No backups to delete." else: backup_list.extend(data['backups']) while "nextPageToken" in data.keys(): nextPageToken = data['nextPageToken'] trigger_run_url_next = "https://file.googleapis.com/v1/projects/{}/locations/{}/backups?pageToken={}".format(PROJECT_ID, BACKUP_REGION, nextPageToken) r = authed_session.get(trigger_run_url_next) data = r.json() backup_list.extend(data['backups']) for i in backup_list: backup_time = i['createTime'] backup_time = backup_time[:-4] backup_time = float(time.mktime(time.strptime(backup_time, "%Y-%m-%dT%H:%M:%S.%f"))) i['backup_timestamp'] = backup_time sorted_backup_list = sorted(backup_list, key=lambda d: d['backup_timestamp']) oldest_backup = sorted_backup_list[0] if now - oldest_backup['backup_timestamp'] > retention_seconds: print(oldest_backup['name'] + " is older than the indicated retention time.") r = authed_session.delete("https://file.googleapis.com/v1/{}".format(oldest_backup['name'])) data = r.json() print(data) if r.status_code == requests.codes.ok: print(str(r.status_code) + ": Deleting " + oldest_backup['name'] + " in the background.") else: raise RuntimeError(data['error']) return "Backup deletion has begun!" return "All backups are within the indicated retention period."
Remplacez les éléments suivants :
- project-id par l'ID de projet Google Cloud de la sauvegarde.
- region par la région dans laquelle se trouve la sauvegarde. La sauvegarde, la tâche de planification et la fonction doivent toutes se trouver au même endroit.
- hours par le nombre d'heures de conservation des sauvegardes. Par exemple, si vous souhaitez conserver les sauvegardes pendant 10 jours, saisissez
240
.
- Cet exemple de code crée une sauvegarde nommée
- Environnement d'exécution: sélectionnez
Attribuer des rôles IAM aux comptes de service client
Ajoutez l'agent de service Cloud Scheduler à la stratégie IAM du compte de service client Cloud Scheduler avec le rôle
roles/cloudscheduler.serviceAgent
. Cela permet à l'agent de service d'usurper l'identité du compte de service client afin d'appeler la fonction qui crée une sauvegarde. Exécutez la commandeiam service-accounts add-iam-policy-binding
:gcloud iam service-accounts add-iam-policy-binding $SCHEDULER_CLIENT_SA \ --member=serviceAccount:$SCHEDULER_SA \ --role=roles/cloudscheduler.serviceAgent
Attribuez le rôle
roles/file.editor
au compte de service client des fonctions Cloud Run afin qu'il puisse appeler le point de terminaison Filestore. Exécutez la commandeprojects add-iam-policy-binding
:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$GCF_CLIENT_SA \ --role=roles/file.editor
Attribuez au compte de service client Cloud Scheduler le rôle
roles/cloudfunctions.invoker
pour la fonction que vous souhaitez utiliser. Exécutez la commandefunctions add-iam-policy-binding
suivante:Créer une sauvegarde
gcloud functions add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/cloudfunctions.invoker
Une invite s'affiche, indiquant que le rôle
roles/run.invoker
doit être accordé au service Cloud Run sous-jacent et que vous pouvez exécuter la commandegcloud functions add-invoker-policy-binding
pour l'appliquer. Lorsque vous êtes invité à répondre, saisissezY
.Désormais, seul le compte de service client de Cloud Scheduler peut appeler
fsbackup
.Supprimer une sauvegarde
gcloud functions add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/cloudfunctions.invoker
Une invite s'affiche, indiquant que le rôle
roles/run.invoker
doit être accordé au service Cloud Run sous-jacent et que vous pouvez exécuter la commandegcloud functions add-invoker-policy-binding
pour l'appliquer. Lorsque vous êtes invité à répondre, saisissezY
.Désormais, seul le compte de service client de Cloud Scheduler peut appeler
deletefsbackup
.
Créer une tâche Cloud Scheduler qui déclenche la fonction avec une programmation spécifiée
Créer une sauvegarde
Dans notre exemple pour ce tutoriel, si vous souhaitez planifier une sauvegarde tous les jours de la semaine à 22h, vous devez utiliser la commande
scheduler jobs create http
:gcloud scheduler jobs create http fsbackupschedule \ --schedule "0 22 * * 1-5" \ --http-method=GET \ --uri=https://us-central1-$PROJECT_ID.cloudfunctions.net/fsbackup \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --oidc-token-audience=https://us-central1-$PROJECT_ID.cloudfunctions.net/fsbackup
L'option
--schedule
vous permet de spécifier la fréquence à laquelle la tâche est exécutée au format unix-cron. Pour plus d'informations, consultez la section Configurer la planification de tâches Cron.Vous pouvez créer six sauvegardes maximum par instance et par heure.
Démarrez la tâche Cloud Scheduler créée à l'étape précédente. Dans notre exemple, utilisez la commande
scheduler jobs runs
pour l'exécuter immédiatement:gcloud scheduler jobs run fsbackupschedule
La tâche
fsbackupschedule
appelle la fonctionfsbackup
immédiatement après l'exécution de la commande, puis l'invoque à nouveau tous les jours de la semaine à 22h jusqu'à ce que la tâche soit suspendue.Vérifiez les journaux de la fonction
fsbackup
pour voir si elle s'exécute correctement et renvoie un objetstatus 200
.Pour afficher vos journaux dans la console Google Cloud, utilisez l'explorateur de journaux:
-
Dans la console Google Cloud, accédez à la page Explorateur de journaux.
Accéder à l'explorateur de journaux
Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Logging.
Vos journaux les plus récents s'affichent dans le volet Résultats de la requête.
-
Vérifiez l'état de vos sauvegardes existantes à l'aide de la commande
backups list
:gcloud filestore backups list
La commande renvoie un résultat semblable au suivant :
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
Supprimer une sauvegarde
Dans notre exemple pour ce tutoriel, si vous souhaitez planifier une opération visant à supprimer une sauvegarde tous les jours de la semaine à 22h, vous devez utiliser la commande
scheduler jobs create http
:gcloud scheduler jobs create http deletefsbackupschedule \ --schedule "0 22 * * 1-5" \ --http-method=GET \ --uri=https://us-central1-$PROJECT_ID.cloudfunctions.net/deletefsbackup \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --oidc-token-audience=https://us-central1-$PROJECT_ID.cloudfunctions.net/deletefsbackup
L'option
--schedule
vous permet de spécifier la fréquence à laquelle la tâche est exécutée au format unix-cron. Pour plus d'informations, consultez la section Configurer la planification de tâches Cron.Les opérations
delete
de sauvegarde associées à la même instance source doivent se produire une à la fois. Pour en savoir plus, consultez la section Sauvegardes.Démarrez la tâche Cloud Scheduler créée à l'étape précédente. Dans notre exemple, nous utilisons la commande
scheduler jobs runs
pour l'exécuter immédiatement:gcloud scheduler jobs run deletefsbackupschedule
La tâche
deletefsbackupschedule
appelle la fonctiondeletefsbackup
immédiatement après l'exécution de la commande, puis l'invoque à nouveau tous les jours de la semaine à 22h jusqu'à ce que la tâche soit suspendue.Vérifiez les journaux de la fonction
deletefsbackup
pour voir si elle s'exécute correctement et renvoie un objetstatus 200
.Pour afficher vos journaux dans la console Google Cloud, utilisez l'explorateur de journaux:
-
Dans la console Google Cloud, accédez à la page Explorateur de journaux.
Accéder à l'explorateur de journaux
Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Logging.
Vos journaux les plus récents s'affichent dans le volet Résultats de la requête.
-
Vérifiez l'état de vos sauvegardes existantes à l'aide de la commande
backups list
:gcloud filestore backups list
La commande renvoie un résultat semblable au suivant :
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
Alertes de quota faibles pour les sauvegardes
Si la mise en œuvre de la programmation de sauvegardes vous présente un risque de manquer de quota de sauvegardes, nous vous recommandons de configurer des alertes de faible quota de sauvegardes. Ainsi, vous êtes averti lorsque le quota de sauvegardes est faible.
Effectuer un nettoyage
Une fois le tutoriel terminé, vous pouvez procéder au nettoyage des ressources que vous avez créées afin qu'elles ne soient plus comptabilisées dans votre quota et qu'elles ne vous soient plus facturées. Dans les sections suivantes, nous allons voir comment supprimer ou désactiver ces ressources.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- 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.
Étape suivante
- Découvrez les instantanés Filestore.
- En savoir plus sur les sauvegardes Filestore
- Découvrez comment programmer des instantanés Filestore Enterprise.