Questo tutorial mostra come pianificare i backup per le istanze Filestore utilizzando le funzioni Cloud Scheduler e Cloud Run.
Obiettivi
- Crea un account di servizio client per Cloud Scheduler con le credenziali necessarie per richiamare una funzione Cloud Run.
- Crea un account di servizio client per le funzioni Cloud Run che disponga delle credenziali per chiamare l'endpoint Filestore.
- Crea una funzione Cloud Run Functions che crea un backup di un'istanza Filestore.
- Crea una funzione Cloud Run Functions che elimina un backup di un'istanza Filestore.
- Crea un job Cloud Scheduler che esegua una delle due funzioni a intervalli regolari.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di 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
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Prima di iniziare
- 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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Se non hai un'istanza Filestore nel tuo progetto, devi prima crearne una.
Crea service account client per le funzioni Cloud Scheduler e Cloud Run
Se non l'hai ancora fatto, nella console Google Cloud , fai clic su Attiva Cloud Shell.
Crea un account di servizio client che Cloud Scheduler esegue per richiamare una funzione Cloud Run Functions. Per questo esempio, utilizza il comando
iam service-accounts create
per denominare l'accountschedulerunner
e impostare il nome visualizzato su "Service Account for FS Backups-Scheduler":gcloud iam service-accounts create schedulerunner \ --display-name="Service Account for FS Backups-Scheduler"
Crea un account di servizio client con cui vengono eseguite le funzioni Cloud Run per chiamare l'endpoint Filestore. Per questo esempio, chiamiamo l'account
backupagent
e impostiamo il nome visualizzato su "Service Account for FS Backups-GCF":gcloud iam service-accounts create backupagent \ --display-name="Service Account for FS Backups-GCF"
Puoi verificare se il account di servizio è stato creato eseguendo il comando
iam service-accounts list
:gcloud iam service-accounts list
Il comando restituisce un output simile al seguente:
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
Imposta le variabili di ambiente
Imposta le seguenti variabili di ambiente nel tuo ambiente locale:
Google Cloud ID progetto e progetto:
export PROJECT_ID=`gcloud config get-value core/project` export PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format="value(projectNumber)"`
L'agente di servizio Cloud Scheduler e i service account client per le funzioni Cloud Scheduler e 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
La tua istanza Filestore:
export SOURCE_INSTANCE_LOCATION=fs-location export SOURCE_INSTANCE_NAME=instance-id export SHARE_NAME=file-share-name
Sostituisci quanto segue:
- fs-location con la zona o la regione in cui si trova l'istanza Filestore di origine.
- instance-id con l'ID istanza dell'istanza Filestore di origine.
- file-share-name con il nome specificato per la condivisione di file NFS servita dall'istanza.
Imposta le variabili di ambiente per il backup Filestore:
export BACKUP_REGION=backup-region
Sostituisci backup-region con la regione in cui vuoi archiviare il backup.
Crea una funzione che crea un backup
Nella Google Cloud console, vai alla pagina Cloud Run Functions.
Fai clic su Scrivi una funzione e configura la funzione nel seguente modo:
- Configura:
- Nome servizio: per questo esempio, chiamiamo la funzione
fsbackup
. - Regione: per questo esempio, seleziona
us-central1
. - Runtime: seleziona un runtime Python 3 supportato completamente supportato da Cloud Run Functions dal menu.
- Nome servizio: per questo esempio, chiamiamo la funzione
- Trigger:
- Il trigger non deve essere impostato per questo esempio.
- Autenticazione: seleziona
Require authentication
. - Ingress: seleziona
All
. - Container, volumi, networking, sicurezza
- Vai alla scheda Sicurezza e seleziona
Service Account for FS Backups-GCF
(backupagent@$PROJECT_ID.iam.gserviceaccount.com
) dal menu.
- Vai alla scheda Sicurezza e seleziona
- Configura:
Fai clic su Crea e continua la configurazione nel seguente modo:
- Entry point della funzione: inserisci
create_backup
. Aggiungi le seguenti dipendenze al file
requirements.txt
:functions-framework==3.* google-auth==2.29.0 requests==2.31.0
A seconda del tuo caso d'uso, potresti dover specificare altre dipendenze insieme ai numeri di versione corrispondenti. Per ulteriori informazioni, vedi Pacchetti preinstallati.
Copia il seguente esempio di codice Python nel file
main.py
utilizzando l'editor incorporato:Crea backup
Questo esempio di codice crea un backup denominato
mybackup-
a cui viene aggiunta la data e l'ora di creazione.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 functions_framework 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") @functions_framework.http 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!"
Sostituisci quanto segue:
- project-id con l'ID progetto Google Cloud dell'istanza Filestore di origine.
- fs-location con la zona o la regione dell'istanza Filestore di origine.
- instance-id con il nome dell'istanza Filestore di origine.
- file-share-name con il nome della condivisione file.
- backup-region con la regione in cui archiviare il backup.
Fai clic su Test.
Si apre una nuova sessione di schede in Cloud Shell. Se l'operazione ha esito positivo, viene restituito il seguente messaggio:
Backup creation has begun!
Fai clic su Salva e riesegui il deployment e attendi il completamento del deployment.
Torna alla scheda precedente di Cloud Shell.
Eliminare un backup
Questo esempio di codice elimina i backup precedenti a un periodo predefinito.
Puoi eliminare un solo backup per istanza di origine alla volta. Per ulteriori informazioni, vedi Backup.
Configura questa funzione nello stesso modo in cui hai configurato la funzione utilizzata per creare un backup, utilizzando le seguenti modifiche:
- Nome della funzione:
deletefsbackup
. - Punto di ingresso:
delete_backup
.
PROJECT_ID = 'project-id' BACKUP_REGION = 'region' BACKUP_RETENTION_TIME_HRS = hours import functions_framework 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 @functions_framework.http 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."
Sostituisci quanto segue:
- project-id con l'ID progetto Google Cloud del backup.
- region con la regione in cui si trova il backup. Il backup, il job dello scheduler e la funzione devono trovarsi nella stessa posizione.
- hours con il numero di ore per conservare i backup. Ad esempio, se vuoi conservare i backup per 10 giorni, inserisci
240
.
- Entry point della funzione: inserisci
Assegna ruoli IAM agli account di servizio client
Aggiungi l'agente di servizio Cloud Scheduler al criterio IAM dell'account di servizio client Cloud Scheduler con il ruolo di
roles/cloudscheduler.serviceAgent
. In questo modo, l'agente di servizio può simulare l'identità delaccount di serviziot cliente per richiamare la funzione che crea un backup. Esegui il comandoiam 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
Assegna al account di servizio client delle funzioni Cloud Run il ruolo
roles/file.editor
in modo che possa effettuare chiamate all'endpoint Filestore. Esegui il comandoprojects add-iam-policy-binding
:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$GCF_CLIENT_SA \ --role=roles/file.editor
Concedi al account di servizio client di Cloud Scheduler il ruolo di
roles/run.invoker
per la funzione che vuoi utilizzare. Esegui questo comandorun services add-iam-policy-binding
:Crea backup
gcloud run services add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invoker \ --region=us-central1
Ora, solo il account di servizio client di Cloud Scheduler può richiamare
fsbackup
.Eliminare un backup
gcloud run services add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invoker
Ora, solo il account di servizio client di Cloud Scheduler può richiamare
deletefsbackup
.
Crea un job Cloud Scheduler che attiva la funzione in base a una pianificazione specificata
Crea backup
Nell'esempio di questo tutorial, se vuoi pianificare un backup ogni giorno lavorativo alle 22:00, utilizza il comando
scheduler jobs create http
:gcloud scheduler jobs create http fsbackupschedule \ --schedule "0 22 * * 1-5" \ --http-method=GET \ --uri=https://fsbackup-$PROJECT_NUMBER.us-central1.run.app \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --location=us-central1
Il flag
--schedule
è il punto in cui specifichi la frequenza con cui viene eseguito il job utilizzando la formattazione unix-cron. Per maggiori dettagli, vedi Configurazione di pianificazioni cron job.Puoi creare un massimo di sei backup per istanza all'ora.
Avvia il job Cloud Scheduler creato nel passaggio precedente. Nel nostro esempio, utilizza il comando
scheduler jobs runs
per eseguirlo immediatamente:gcloud scheduler jobs run fsbackupschedule
Il job
fsbackupschedule
richiama la funzionefsbackup
immediatamente dopo l'esecuzione del comando e poi la richiama di nuovo ogni giorno feriale alle 22:00 fino a quando il job non viene messo in pausa.Controlla i log della funzione
fsbackup
per verificare se viene eseguita correttamente e restituisce unstatus 200
.Per visualizzare i log nella console Google Cloud , utilizza Esplora log:
-
Nella Google Cloud console, vai alla pagina Esplora log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
I log più recenti vengono visualizzati nel riquadro Risultati query.
-
Controlla lo stato dei backup esistenti utilizzando il comando
backups list
:gcloud filestore backups list
Il comando restituisce un output simile al seguente:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
Eliminare un backup
Nell'esempio di questo tutorial, se vuoi programmare un'operazione per eliminare un backup ogni giorno feriale alle 22:00, utilizzeresti il comando
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
Il flag
--schedule
è il punto in cui specifichi la frequenza con cui viene eseguito il job utilizzando la formattazione unix-cron. Per maggiori dettagli, vedi Configurazione di pianificazioni cron job.Le operazioni di backup
delete
associate alla stessa istanza di origine devono essere eseguite una alla volta. Per ulteriori informazioni, consulta la sezione Backup.Avvia il job Cloud Scheduler creato nel passaggio precedente. Nel nostro esempio, utilizziamo il comando
scheduler jobs runs
per eseguirlo immediatamente:gcloud scheduler jobs run deletefsbackupschedule
Il job
deletefsbackupschedule
richiama la funzionedeletefsbackup
immediatamente dopo l'esecuzione del comando e poi la richiama di nuovo ogni giorno feriale alle 22:00 finché il job non viene messo in pausa.Controlla i log della funzione
deletefsbackup
per verificare se viene eseguita correttamente e restituisce unstatus 200
.Per visualizzare i log nella console Google Cloud , utilizza Esplora log:
-
Nella Google Cloud console, vai alla pagina Esplora log:
Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.
I log più recenti vengono visualizzati nel riquadro Risultati query.
-
Controlla lo stato dei backup esistenti utilizzando il comando
backups list
:gcloud filestore backups list
Il comando restituisce un output simile al seguente:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
Avvisi di quota bassa per i backup
Se l'implementazione della pianificazione dei backup ti espone al rischio di esaurire la quota di backup, ti consigliamo di configurare avvisi di quota di backup bassa. In questo modo, riceverai una notifica quando la quota di backup è in esaurimento.
Esegui la pulizia
Al termine del tutorial, puoi liberare spazio eliminando le risorse che hai creato in modo che non utilizzino più la quota e non generino addebiti. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.
Per eliminare il progetto:
- 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.
Passaggi successivi
- Scopri di più sugli snapshot di Filestore.
- Scopri di più sui backup Filestore.
- Scopri come pianificare gli snapshot di Filestore Enterprise.