Questo tutorial mostra come pianificare i backup per le istanze Filestore di livello HDD base e SSD base utilizzando Cloud Scheduler e Cloud Functions.
Obiettivi
- Creare un account di servizio client per Cloud Scheduler con le credenziali necessarie per richiamare una funzione Cloud Functions.
- Creare un account di servizio client da utilizzare con Cloud Functions con le credenziali per chiamare l'endpoint Filestore.
- Creare una funzione Cloud Functions che crea (o elimina) il backup di una condivisione file.
- Crea un job Cloud Scheduler che esegue la funzione di creazione dei backup (o eliminazione dei backup) a intervalli regolari.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Scheduler, Cloud Functions, and Filestore.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
-
Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Scheduler, Cloud Functions, and Filestore.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
- Se nel progetto non è presente un'istanza Filestore, devi prima crearne una.
Creare account di servizio client per Cloud Scheduler e Cloud Functions
Creare un account di servizio client eseguito da Cloud Scheduler per richiamare una funzione Cloud Functions. In questo esempio, utilizza il comando
iam service-accounts create
per assegnare all'account il nomeschedulerunner
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"
Creare un account di servizio client eseguito da Cloud Functions per chiamare l'endpoint Filestore. Per questo esempio, assegniamo il nome all'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 l'account di servizio è stato creato eseguendo il comando
iam service-accounts list
:gcloud iam service-accounts list
Il comando restituisce un risultato 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
Configura le seguenti variabili di ambiente nel tuo ambiente locale:
ID e progetto Google Cloud:
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 gli account di servizio client per Cloud Scheduler e Cloud Functions:
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 FS_ZONE=zone export INSTANCE_NAME=instance-id export SHARE_NAME=datafile-share-name
Sostituisci quanto segue:
- zone con la zona in cui si trova l'istanza Filestore.
- instance-id con l'ID dell'istanza Filestore.
- file-share-name con il nome specificato per la condivisione file NFS gestita dall'istanza.
Configura le variabili di ambiente per il backup di Filestore:
export FS_BACKUP_LOCATION=region
Sostituisci region con la regione in cui vuoi archiviare il backup.
Crea una funzione che crea un backup
Nella console Google Cloud, vai alla pagina Cloud Functions.
Fai clic su Crea funzione e configura la funzione come segue:
- Nozioni di base:
- Nome funzione: in questo esempio, assegniamo alla funzione il nome
fsbackup
. - Regione: in questo esempio viene utilizzato il valore
us-central1
.
- Nome funzione: in questo esempio, assegniamo alla funzione il nome
- Trigger:
- Tipo di attivatore:
HTTP
. - Autenticazione:
Require authentication
.
- Tipo di attivatore:
- Impostazioni di runtime, build e connessione:
- Account di servizio di runtime:
Service Account for FS Backups-GCF
(backupagent@$PROJECT_ID.iam.gserviceaccount.com
). - Impostazioni di Ingress:
Allow all traffic
.
- Account di servizio di runtime:
- Codice sorgente:
Inline editor
. - Runtime:
Python 3.7
. - Punto di ingresso:
create_backup
. In
requirements.txt
, aggiungi le seguenti dipendenze:google-auth==1.19.2 requests==2.24.0
Copia il seguente esempio di codice Python nell'editor incorporato
main.py
:Crea backup
Questo esempio di codice crea un backup denominato
mybackup-
alla fine dell'ora di creazione.PROJECT_ID = 'project-id' SOURCE_INSTANCE_ZONE = 'filestore-zone' SOURCE_INSTANCE_NAME = 'filestore-name' 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/v1beta1/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_ZONE, 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'])
Sostituisci quanto segue:
- project-id con l'ID progetto Google Cloud dell'istanza Filestore di origine.
- filestore-zone con la zona dell'istanza Filestore di origine.
- filestore-name con il nome dell'istanza Filestore di origine.
- file-share-name con il nome della condivisione file.
- backup-region con la regione per archiviare il backup.
Elimina backup
Questo esempio di codice elimina i backup precedenti a un periodo predefinito.
Configura questa funzione nello stesso modo della funzione Crea backup, ad eccezione di quanto segue:
- Nome della funzione:
deletefsbackups
. - Punto di ingresso:
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) now = time.time() retention_seconds = BACKUP_RETENTION_TIME_HRS * 60 * 60 def delete_backup(request): list = [] trigger_run_url = "https://file.googleapis.com/v1beta1/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.") else: list.extend(data['backups']) while 'nextPageToken' in data.keys(): nextPageToken = data['nextPageToken'] trigger_run_url_next = "https://file.googleapis.com/v1beta1/projects/{}/locations/{}/backups?pageToken={}".format(PROJECT_ID, BACKUP_REGION, nextPageToken) r = authed_session.get(trigger_run_url_next) data = r.json() list.extend(data['backups']) for i in 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"))) if now - backup_time > retention_seconds: print("Deleting " + i['name'] + " in the background.") r = authed_session.delete("https://file.googleapis.com/v1beta1/{}".format(i['name'])) data = r.json() print(data) if r.status_code == requests.codes.ok: print(str(r.status_code) + ": Deleting " + i['name'] + " in the background.") else: raise RuntimeError(data['error'])
Sostituisci quanto segue:
- project-id con l'ID progetto Google Cloud del backup.
- region con la regione in cui si trovano i backup.
- hours con il numero di ore per la conservazione dei backup. Ad esempio, se vuoi conservare i backup per 10 giorni, inserisci
240
.
- Nozioni di base:
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
roles/cloudscheduler.serviceAgent
. Ciò consente all'agente di servizio di impersonare l'account di servizio client al fine di 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 all'account di servizio client di Cloud Functions 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 all'account di servizio client di Cloud Scheduler il ruolo di
roles/cloudfunctions.invoker
per la funzionefsbackup
. Esegui il seguente comandofunctions add-iam-policy-binding
:gcloud functions add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/cloudfunctions.invoker
Ora, solo l'account di servizio client di Cloud Scheduler può richiamare
fsbackup
.
Crea un job Cloud Scheduler che attivi la funzione fsbackup
in base a una pianificazione specificata
Nel nostro esempio di questo tutorial, se vuoi pianificare un backup ogni giorno feriale alle 22:00, utilizza il comando
scheduler jobs create http
:gcloud beta 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
Il flag
--schedule
consente di specificare la frequenza di esecuzione del job utilizzando la formattazione unix-cron. Per maggiori dettagli, consulta Configurazione di pianificazioni cron job.Avvia il job Cloud Scheduler creato nel passaggio precedente. Nel nostro esempio, utilizza il comando
scheduler jobs runs
:gcloud scheduler jobs run fsbackupschedule
Il job
fsbackupschedule
richiama la funzione "fsbackups" immediatamente dopo l'esecuzione del comando, per poi richiamarla di nuovo ogni giorno feriale alle 22:00 finché il job non viene messo in pausa.Controlla i log della funzione
fsbackups
per verificare se la funzione viene eseguita correttamente e restituisce unstatus 200
.Controlla se il backup è stato creato utilizzando il comando
backups list
:gcloud beta filestore backups list
Il comando restituisce qualcosa di simile a quanto segue:
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 pone il 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 sta per esaurirsi.
Esegui la pulizia
Dopo aver completato il tutorial, puoi eseguire la pulizia delle risorse che hai creato in modo che non utilizzino più la quota e non incorrano addebiti. Le sezioni seguenti descrivono come eliminare o disattivare queste risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
- Scopri di più sugli snapshot Filestore.
- Scopri di più sui backup di Filestore.
- Scopri come pianificare gli snapshot di Filestore Enterprise.