In dieser Anleitung wird gezeigt, wie Sie Sicherungen mit Cloud Scheduler und Cloud Run-Funktionen für Filestore-Instanzen planen.
Lernziele
- Erstellen Sie ein Clientdienstkonto für Cloud Scheduler, das die erforderlichen Anmeldedaten zum Aufrufen einer Cloud Run-Funktion hat.
- Erstellen Sie ein Clientdienstkonto für Cloud Run-Funktionen, das die Anmeldedaten zum Aufrufen des Filestore-Endpunkts hat.
- Cloud Run-Funktion erstellen, die eine Sicherung einer Filestore-Instanz erstellt
- Erstellen Sie eine Cloud Run-Funktion, die eine Sicherung einer Filestore-Instanz löscht.
- Erstellen Sie einen Cloud Scheduler-Job, der eine der beiden Funktionen in regelmäßigen Abständen ausführt.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von 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
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
- 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
- Wenn in Ihrem Projekt keine Filestore-Instanz vorhanden ist, müssen Sie zuerst eine erstellen.
Clientdienstkonten für Cloud Scheduler- und Cloud Run-Funktionen erstellen
Klicken Sie in der Google Cloud Console auf Cloud Shell aktivieren, falls noch nicht geschehen.
Erstellen Sie ein Clientdienstkonto, das Cloud Scheduler zum Aufrufen einer Cloud Run-Funktion ausführt. In diesem Beispiel verwenden wir den Befehl
iam service-accounts create
, um das Kontoschedulerunner
zu benennen und den Anzeigenamen auf „Service Account for FS Backups-Scheduler“ festzulegen:gcloud iam service-accounts create schedulerunner \ --display-name="Service Account for FS Backups-Scheduler"
Erstellen Sie ein Clientdienstkonto, das Cloud Run-Funktionen zum Aufrufen des Filestore-Endpunkts ausführt. In diesem Beispiel nennen wir das Konto
backupagent
und legen den Anzeigenamen auf "Service Account for FS Backups-GCF" fest:gcloud iam service-accounts create backupagent \ --display-name="Service Account for FS Backups-GCF"
Mit dem folgenden Befehl können Sie prüfen, ob das Dienstkonto erstellt wurde:
iam service-accounts list
gcloud iam service-accounts list
Der Befehl gibt in etwa Folgendes zurück:
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
Umgebungsvariablen einrichten
Richten Sie in Ihrer lokalen Umgebung die folgenden Umgebungsvariablen ein:
Google Cloud-Projekt-ID und -Projekt:
export PROJECT_ID=`gcloud config get-value core/project` export PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format="value(projectNumber)"`
Der Cloud Scheduler-Dienst-Agent und die Clientdienstkonten für Cloud Scheduler- und Cloud Run-Funktionen:
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
Ihre Filestore-Instanz:
export SOURCE_INSTANCE_LOCATION=fs-location export SOURCE_INSTANCE_NAME=instance-id export SHARE_NAME=file-share-name
Ersetzen Sie Folgendes:
- fs-location durch die Zone oder Region, in der sich die Filestore-Quellinstanz befindet.
- instance-id durch die Instanz-ID der Filestore-Quellinstanz.
- file-share-name durch den Namen, den Sie für die NFS-Dateifreigabe festlegen, der von der Instanz bereitgestellt wird.
Richten Sie Umgebungsvariablen für Ihre Filestore-Sicherung ein:
export BACKUP_REGION=backup-region
Ersetzen Sie backup-region durch die Region, in der Sie die Sicherung speichern möchten.
Funktion erstellen, die eine Sicherung erstellt
Rufen Sie in der Google Cloud Console die Seite „Cloud Run-Funktionen“ auf.
Klicken Sie auf Funktion erstellen und konfigurieren Sie die Funktion so:
- Grundlagen:
- Umgebung: Wählen Sie für dieses Beispiel
2nd gen
aus, die Standardeinstellung. - Funktionsname: In diesem Beispiel nennen wir die Funktion
fsbackup
. - Region: Wählen Sie in diesem Beispiel
us-central1
aus.
- Umgebung: Wählen Sie für dieses Beispiel
- Trigger:
- Triggertyp: Wählen Sie im Menü
HTTPS
aus. - Authentifizierung: Wählen Sie
Require authentication
aus.
- Triggertyp: Wählen Sie im Menü
- Laufzeit-, Build-, Verbindungs- und Sicherheitseinstellungen:
- Laufzeit > Runtime-Dienstkonto > Dienstkonto: Wählen Sie im Menü
Service Account for FS Backups-GCF
(backupagent@$PROJECT_ID.iam.gserviceaccount.com
) aus. - Verbindungen > Zugangseinstellungen: Wählen Sie
Allow all traffic
aus.
- Laufzeit > Runtime-Dienstkonto > Dienstkonto: Wählen Sie im Menü
- Grundlagen:
Klicken Sie auf Weiter und fahren Sie mit der Konfiguration so fort:
- Laufzeit: Wählen Sie im Menü
Python 3.8
oder eine spätere Version aus, die vollständig von Cloud Run Functions unterstützt wird. - Quellcode:
Inline editor
. - Einstiegspunkt: Geben Sie
create_backup
ein. Fügen Sie der Datei
requirements.txt
die folgenden Abhängigkeiten hinzu:google-auth==2.29.0 requests==2.31.0
Je nach Anwendungsfall müssen Sie möglicherweise andere Abhängigkeiten mit den entsprechenden Versionsnummern angeben. Weitere Informationen finden Sie unter Vorinstallierte Pakete.
Kopieren Sie das folgende Python-Codebeispiel mit dem Inline-Editor in die Datei
main.py
:Sicherung erstellen
- In diesem Codebeispiel wird eine Sicherung mit dem Namen
mybackup-
erstellt, gefolgt von der Erstellungszeit.
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!"
Ersetzen Sie Folgendes:
- project-id durch die Google Cloud-Projekt-ID der Filestore-Quellinstanz.
- fs-location durch die Zone oder Region der Filestore-Quellinstanz.
- instance-id durch den Namen der Filestore-Quellinstanz.
- file-share-name durch den Namen der Dateifreigabe.
- backup-region durch die Region, in der die Sicherung gespeichert wird.
Klicken Sie auf Funktion testen.
In Cloud Shell wird eine neue Tabsitzung geöffnet. Bei Erfolg wird die folgende Meldung zurückgegeben:
Function is ready to test.
Klicken Sie auf Bereitstellen und warten Sie, bis die Bereitstellung abgeschlossen ist.
Wechseln Sie zurück zum vorherigen Cloud Shell-Tab.
Sicherung löschen
In diesem Codebeispiel werden Sicherungen gelöscht, die älter als ein vordefinierter Zeitraum sind.
Sie können jeweils nur eine Sicherung pro Quellinstanz löschen. Weitere Informationen finden Sie unter Sicherungen.
Konfigurieren Sie diese Funktion auf die gleiche Weise wie die Funktion, mit der Sie eine Sicherung erstellt haben, mit den folgenden Änderungen:
- Funktionsname:
deletefsbackup
. - Einstiegspunkt:
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."
Ersetzen Sie Folgendes:
- project-id durch die Google Cloud-Projekt-ID der Sicherung.
- region durch die Region, in der sich die Sicherung befindet. Sicherung, Planungsauftrag und Funktion sollten sich am selben Speicherort befinden.
- hours durch die Anzahl der Stunden, für die Sicherungen aufbewahrt werden sollen. Wenn Sie beispielsweise Sicherungen 10 Tage lang aufbewahren möchten, geben Sie
240
ein.
- In diesem Codebeispiel wird eine Sicherung mit dem Namen
- Laufzeit: Wählen Sie im Menü
IAM-Rollen zu Clientdienstkonten zuweisen
Fügen Sie dem Cloud Scheduler-Dienst-Agent die IAM-Richtlinie des Cloud Scheduler-Clientdienstkontos mit der Rolle
roles/cloudscheduler.serviceAgent
hinzu. So kann der Kundenservicemitarbeiter die Identität des Clientdienstkontos übernehmen, um die Funktion aufzurufen, die eine Sicherung erstellt. Führen Sie den Befehliam service-accounts add-iam-policy-binding
aus:gcloud iam service-accounts add-iam-policy-binding $SCHEDULER_CLIENT_SA \ --member=serviceAccount:$SCHEDULER_SA \ --role=roles/cloudscheduler.serviceAgent
Weisen Sie dem Clientdienstkonto von Cloud Run-Funktionen die Rolle
roles/file.editor
zu, damit es Aufrufe an den Filestore-Endpunkt senden kann. Führen Sie den Befehlprojects add-iam-policy-binding
aus:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$GCF_CLIENT_SA \ --role=roles/file.editor
Weisen Sie dem Clientdienstkonto von Cloud Scheduler die Rolle
roles/cloudfunctions.invoker
für die gewünschte Funktion zu. Führen Sie den folgenden Befehlfunctions add-iam-policy-binding
aus:Sicherung erstellen
gcloud functions add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/cloudfunctions.invoker
Es wird eine Aufforderung angezeigt, dass die Rolle
roles/run.invoker
dem zugrunde liegenden Cloud Run-Dienst gewährt werden muss und dass Sie den Befehlgcloud functions add-invoker-policy-binding
ausführen können, um sie anzuwenden. Geben SieY
ein, wenn Sie aufgefordert werden, eine Antwort einzugeben.Jetzt kann nur das Clientdienstkonto von Cloud Scheduler
fsbackup
aufrufen.Sicherung löschen
gcloud functions add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/cloudfunctions.invoker
Es wird eine Aufforderung angezeigt, dass die Rolle
roles/run.invoker
dem zugrunde liegenden Cloud Run-Dienst gewährt werden muss und dass Sie den Befehlgcloud functions add-invoker-policy-binding
ausführen können, um sie anzuwenden. Geben SieY
ein, wenn Sie aufgefordert werden, eine Antwort einzugeben.Jetzt kann nur das Clientdienstkonto von Cloud Scheduler
deletefsbackup
aufrufen.
Cloud Scheduler-Job erstellen, der die Funktion nach einem bestimmten Zeitplan auslöst
Sicherung erstellen
Wenn Sie in unserem Beispiel für diese Anleitung eine Sicherung jeden Wochentag um 22:00 Uhr planen möchten, verwenden Sie den Befehl
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
Im Flag
--schedule
geben Sie die Häufigkeit an, mit der der Job ausgeführt wird. Verwenden Sie dazu die unix-cron-Formatierung. Weitere Informationen finden Sie unter Cronjob-Zeitpläne konfigurieren.Sie können pro Instanz maximal sechs Sicherungen pro Stunde erstellen.
Starten Sie den Cloud Scheduler-Job, der im vorherigen Schritt erstellt wurde. In unserem Beispiel verwenden wir den Befehl
scheduler jobs runs
, um ihn sofort auszuführen:gcloud scheduler jobs run fsbackupschedule
Der Job
fsbackupschedule
ruft die Funktionfsbackup
sofort auf, nachdem Sie den Befehl ausgeführt haben, und ruft sie dann jeden Wochentag um 22:00 Uhr noch einmal auf, bis der Job pausiert wird.Prüfen Sie die Logs für die Funktion
fsbackup
, um zu sehen, ob sie ordnungsgemäß ausgeführt wird und einenstatus 200
-Wert zurückgibt.Verwenden Sie den Log-Explorer, um sich Ihre Logs in der Google Cloud Console anzusehen:
-
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Logging ist.
Die neuesten Logs werden im Bereich Abfrageergebnisse angezeigt.
-
Prüfen Sie den Status Ihrer vorhandenen Sicherungen mit dem Befehl
backups list
:gcloud filestore backups list
Der Befehl gibt in etwa Folgendes zurück:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
Sicherung löschen
Wenn Sie in unserem Beispiel für diese Anleitung einen Vorgang planen möchten, um jeden Wochentag um 22:00 Uhr eine Sicherung zu löschen, verwenden Sie den Befehl
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
Im Flag
--schedule
geben Sie die Häufigkeit an, mit der der Job ausgeführt wird. Verwenden Sie dazu die unix-cron-Formatierung. Weitere Informationen finden Sie unter Cronjob-Zeitpläne konfigurieren.Sicherungsvorgänge vom Typ
delete
, die mit derselben Quellinstanz verknüpft sind, müssen einzeln ausgeführt werden. Weitere Informationen finden Sie unter Sicherungen.Starten Sie den Cloud Scheduler-Job, der im vorherigen Schritt erstellt wurde. In unserem Beispiel verwenden wir den Befehl
scheduler jobs runs
, um ihn sofort auszuführen:gcloud scheduler jobs run deletefsbackupschedule
Der Job
deletefsbackupschedule
ruft die Funktiondeletefsbackup
sofort auf, nachdem Sie den Befehl ausgeführt haben, und ruft sie dann jeden Wochentag um 22:00 Uhr noch einmal auf, bis der Job pausiert wird.Prüfen Sie die Logs für die Funktion
deletefsbackup
, um zu sehen, ob sie ordnungsgemäß ausgeführt wird und einenstatus 200
-Wert zurückgibt.Verwenden Sie den Log-Explorer, um sich Ihre Logs in der Google Cloud Console anzusehen:
-
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Logging ist.
Die neuesten Logs werden im Bereich Abfrageergebnisse angezeigt.
-
Prüfen Sie den Status Ihrer vorhandenen Sicherungen mit dem Befehl
backups list
:gcloud filestore backups list
Der Befehl gibt in etwa Folgendes zurück:
NAME LOCATION SRC_INSTANCE SRC_FILE_SHARE STATE mybackup-20201123-184500 us-central1 us-central1-c/instances/nfs-server vol1 READY
Benachrichtigungen zu niedrigen Kontingenten für Sicherungen
Wenn bei Ihrer Implementierung von geplanten Sicherungen das Risiko besteht, das Kontingent von Sicherungen zu überschreiten, empfehlen wir die Einrichtung von Benachrichtigungen zu niedrigen Sicherungskontingenten. So werden Sie benachrichtigt, wenn das Sicherungskontingent knapp wird.
Bereinigen
Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.
So löschen Sie das Projekt:
- 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.