In dieser Anleitung wird beschrieben, wie Sie Back-ups für Filestore-Instanzen mit Cloud Scheduler und Cloud Run-Funktionen planen können.
Informationen zum Erstellen von Sicherungen mit einem Scheduler für verwaltete Dienste finden Sie unter Erweiterte Filestore-Sicherungen.
Ziele
- Erstellen Sie ein Client-Dienstkonto für Cloud Scheduler, das die Anmeldedaten enthält, die zum Aufrufen einer Cloud Run-Funktion erforderlich sind.
- Erstellen Sie ein Clientdienstkonto für Cloud Run-Funktionen, das die Anmeldedaten zum Aufrufen des Filestore-Endpunkts enthält.
- Erstellen Sie eine Cloud Run Functions-Funktion, die eine Sicherung einer Filestore-Instanz erstellt.
- Cloud Run-Funktion erstellen, die ein Backup 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.
Hinweis
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
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 - Wenn Sie in Ihrem Projekt noch keine Filestore-Instanz haben, 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 Dienstkonto, das von Cloud Scheduler ausgeführt wird, um eine Cloud Run-Funktion aufzurufen. In diesem Beispiel verwenden wir den Befehl
iam service-accounts create, um das Kontoschedulerunnerzu 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, unter dem Cloud Run-Funktionen ausgeführt werden, um den Filestore-Endpunkt aufzurufen. In diesem Beispiel nennen wir das Konto
backupagentund 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 Befehl
iam service-accounts listkönnen Sie prüfen, ob das Dienstkonto erstellt wurde:gcloud iam service-accounts listDer 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 Dienstkonten des Clients für Cloud Scheduler und Cloud Run 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.comIhre Filestore-Instanz:
export SOURCE_INSTANCE_LOCATION=fs-location export SOURCE_INSTANCE_NAME=instance-id export SHARE_NAME=file-share-nameErsetzen Sie Folgendes:
- Ersetzen Sie 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-regionErsetzen Sie backup-region durch die Region, in der Sie die Sicherung speichern möchten.
Funktion erstellen, die eine Sicherung erstellt
Wechseln Sie in der Google Cloud Console zur Seite „Cloud Run-Funktionen“.
Klicken Sie auf Funktion schreiben und konfigurieren Sie die Funktion so:
- Konfigurieren:
- Dienstname: In diesem Beispiel nennen wir die Funktion
fsbackup. - Region: Wählen Sie für dieses Beispiel
us-central1aus. - Laufzeit: Wählen Sie im Menü eine beliebige unterstützte Python 3-Laufzeit aus, die von Cloud Run Functions vollständig unterstützt wird.
- Dienstname: In diesem Beispiel nennen wir die Funktion
- Trigger:
- Für dieses Beispiel muss kein Trigger festgelegt werden.
- Authentifizierung: Wählen Sie
Require authenticationaus. - Ingress: Wählen Sie
Allaus. - Container, Volumes, Netzwerk, Sicherheit
- Rufen Sie den Tab Sicherheit auf und wählen Sie im Menü
Service Account for FS Backups-GCF(backupagent@$PROJECT_ID.iam.gserviceaccount.com) aus.
- Rufen Sie den Tab Sicherheit auf und wählen Sie im Menü
- Konfigurieren:
Klicken Sie auf Erstellen und fahren Sie mit der Konfiguration fort:
- Funktionseinstiegspunkt: Geben Sie
create_backupein. Fügen Sie der Datei
requirements.txtdie folgenden Abhängigkeiten hinzu:functions-framework==3.* google-auth==2.29.0 requests==2.31.0Je nach Anwendungsfall müssen Sie möglicherweise andere Abhängigkeiten zusammen 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
Mit diesem Codebeispiel wird eine Sicherung mit dem Namen
mybackup-erstellt, an den die Erstellungszeit angehängt wird.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() auth_request = google.auth.transport.requests.Request() credentials.refresh(auth_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!"Ersetzen Sie Folgendes:
- project-id durch die Google Cloud Projekt-ID der Quell-Filestore-Instanz.
- Ersetzen Sie 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 Testen.
In Cloud Shell wird eine neue Tabsitzung geöffnet. Bei Erfolg wird die folgende Meldung zurückgegeben:
Backup creation has begun!Klicken Sie auf Speichern und wieder 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 dieselbe Weise wie die Funktion, die Sie zum Erstellen einer Sicherung verwendet haben, mit den folgenden Änderungen:
- Funktionsname:
deletefsbackup. - Einstiegspunkt:
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() auth_request = google.auth.transport.requests.Request() credentials.refresh(auth_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."Ersetzen Sie Folgendes:
- project-id durch die Google Cloud Projekt-ID des Back-ups.
- region ist die Region, in der sich die Sicherung befindet. Das Backup, der Scheduler-Job und die Funktion sollten sich alle am selben Speicherort befinden.
- hours durch die Anzahl der Stunden, für die Sicherungen aufbewahrt werden sollen. Wenn Sie Backups beispielsweise 10 Tage lang aufbewahren möchten, geben Sie
240ein.
- Funktionseinstiegspunkt: Geben Sie
IAM-Rollen zu Clientdienstkonten zuweisen
Fügen Sie das Cloud Scheduler-Dienstkonto der IAM-Richtlinie des Cloud Scheduler-Clientdienstkontos mit der Rolle
roles/cloudscheduler.serviceAgenthinzu. Dadurch kann der Dienst-Agent die Identität des Dienstkontos des Kunden annehmen, um die Funktion zum Erstellen einer Sicherung aufzurufen. Führen Sie den Befehliam service-accounts add-iam-policy-bindingaus:gcloud iam service-accounts add-iam-policy-binding $SCHEDULER_CLIENT_SA \ --member=serviceAccount:$SCHEDULER_SA \ --role=roles/cloudscheduler.serviceAgentWeisen Sie dem Clientdienstkonto von Cloud Run-Funktionen die Rolle
roles/file.editorzu, damit es Aufrufe an den Filestore-Endpunkt senden kann. Führen Sie den Befehlprojects add-iam-policy-bindingaus:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$GCF_CLIENT_SA \ --role=roles/file.editorWeisen Sie dem Clientdienstkonto von Cloud Scheduler die Rolle
roles/run.invokerfür die Funktion zu, die Sie verwenden möchten. Führen Sie den folgendenrun services add-iam-policy-binding-Befehl aus:Sicherung erstellen
gcloud run services add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invoker \ --region=us-central1Jetzt kann nur noch das Dienstkonto von Cloud Scheduler
fsbackupaufrufen.Sicherung löschen
gcloud run services add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invokerJetzt kann nur noch das Dienstkonto von Cloud Scheduler
deletefsbackupaufrufen.
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 an jedem 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://fsbackup-$PROJECT_NUMBER.us-central1.run.app \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --location=us-central1Mit dem Flag
--schedulegeben Sie die Häufigkeit an, mit der der Job ausgeführt wird. Verwenden Sie dazu die Formatierung unix-cron. Weitere Informationen finden Sie unter Cronjob-Zeitpläne konfigurieren.Sie können maximal sechs Sicherungen pro Instanz und 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 fsbackupscheduleBeim
fsbackupschedule-Job wird die Funktionfsbackupsofort nach Ausführung des Befehls und dann jeden Wochentag um 22:00 Uhr aufgerufen, bis der Job pausiert wird.Prüfen Sie die Logs für die Funktion
fsbackup, um zu sehen, ob sie ordnungsgemäß ausgeführt wird undstatus 200zurückgibt.So rufen Sie Ihre Logs in der Google Cloud Console auf: Log-Explorer
-
Rufen Sie in der Google Cloud Console das und 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 listDer 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 zum Löschen einer Sicherung an jedem Wochentag um 22:00 Uhr planen möchten, 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/deletefsbackupMit dem Flag
--schedulegeben Sie die Häufigkeit an, mit der der Job ausgeführt wird. Verwenden Sie dazu die Formatierung unix-cron. Weitere Informationen finden Sie unter Cronjob-Zeitpläne konfigurieren.delete-Sicherungsvorgänge, 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 deletefsbackupscheduleDer
deletefsbackupschedule-Job ruft diedeletefsbackup-Funktion sofort auf, wenn Sie den Befehl ausführen, und dann jeden Wochentag um 22:00 Uhr, bis der Job pausiert wird.Prüfen Sie die Logs für die Funktion
deletefsbackup, um zu sehen, ob sie ordnungsgemäß ausgeführt wird undstatus 200zurückgibt.So rufen Sie Ihre Logs in der Google Cloud Console auf:
-
Rufen Sie in der Google Cloud Console das und 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 listDer 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 bei niedrigem Kontingent für Sicherungen
Wenn Sie durch die Implementierung von geplanten Sicherungen Gefahr laufen, Ihr Sicherungskontingent zu überschreiten, empfehlen wir, Benachrichtigungen bei niedrigem Sicherungskontingent einzurichten. So werden Sie benachrichtigt, wenn das Kontingent für Sicherungen fast aufgebraucht ist.
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:
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.