Sicherungen planen


In dieser Anleitung erfahren Sie, wie Sie Sicherungen für Filestore-Instanzen mit Cloud Scheduler und Cloud Functions planen.

Lernziele

  • Erstellen Sie ein Clientdienstkonto für Cloud Scheduler, das die erforderlichen Anmeldedaten zum Aufrufen einer Cloud Functions-Funktion hat.
  • Erstellen Sie ein Clientdienstkonto zur Verwendung durch Cloud Functions, das die Anmeldedaten zum Aufrufen des Filestore-Endpunkts hat.
  • Erstellen Sie eine Cloud Functions-Funktion, die eine Sicherung einer Dateifreigabe erstellt (oder löscht).
  • Erstellen Sie einen Cloud Scheduler-Job, der die Funktion zum Erstellen von Sicherungen (oder zum Löschen von Sicherungen) in regelmäßigen Abständen ausführt.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Artifact Registry, Cloud Build, Filestore, Cloud Functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs aktivieren.

    Aktivieren Sie die APIs

  5. Installieren Sie die Google Cloud CLI.
  6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  9. Artifact Registry, Cloud Build, Filestore, Cloud Functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs aktivieren.

    Aktivieren Sie die APIs

  10. Installieren Sie die Google Cloud CLI.
  11. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Wenn in Ihrem Projekt keine Filestore-Instanz vorhanden ist, müssen Sie zuerst eine erstellen.

Clientdienstkonten für Cloud Scheduler und Cloud Functions erstellen

  1. Klicken Sie in der Google Cloud Console auf Cloud Shell aktivieren, falls noch nicht geschehen.

  2. Erstellen Sie ein Clientdienstkonto, das Cloud Scheduler zum Aufrufen einer Cloud Functions-Funktion ausführt. In diesem Beispiel geben Sie dem Konto mit dem Befehl iam service-accounts create den Namen schedulerunner und legen den Anzeigenamen auf "Service Account for FS Backups-Scheduler" fest:

    gcloud iam service-accounts create schedulerunner \
        --display-name="Service Account for FS Backups-Scheduler"
    
  3. Erstellen Sie ein Clientdienstkonto, das Cloud Functions 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 Befehl iam service-accounts list können Sie prüfen, ob das Dienstkonto erstellt wurde:

    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 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
    
  • Ihre Filestore-Instanz:

    export FS_LOCATION=fs-location
    export INSTANCE_NAME=instance-id
    export SHARE_NAME=datafile-share-name
    

    Ersetzen Sie Folgendes:

    • fs-location durch die Region oder Zone, in der sich die Filestore-Instanz befindet.
    • instance-id durch die Instanz-ID der Filestore-Instanz.
    • 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 FS_BACKUP_LOCATION=region
    

    Ersetzen Sie region durch die Region, in der Sie die Sicherung speichern möchten.

Funktion erstellen, die eine Sicherung erstellt

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Functions“ auf.

    Zur Seite „Cloud Functions“

  2. Klicken Sie auf Funktion erstellen und konfigurieren Sie die Funktion so:

    • Grundlagen:
      • Umgebung: Wählen Sie in diesem Beispiel 2nd gen aus. Das ist die Standardeinstellung.
      • Funktionsname: In diesem Beispiel nennen wir die Funktion fsbackup.
      • Region: Wählen Sie für dieses Beispiel us-central1 aus.
    • Trigger:
      • Triggertyp: Wählen Sie im Menü HTTPS aus.
      • Authentifizierung: Wählen Sie Require authentication aus.
    • Laufzeit, Build, Verbindungen und Sicherheitseinstellungen:
      • Laufzeit > Laufzeitdienstkonto > Dienstkonto: Wählen Sie im Menü Service Account for FS Backups-GCF (backupagent@$PROJECT_ID.iam.gserviceaccount.com) aus.
      • Connections > Ingress settings (Verbindungen > Einstellungen für eingehenden Traffic): Wählen Sie Allow all traffic aus.
  3. Klicken Sie auf Weiter und fahren Sie mit der Konfiguration wie folgt fort:

    • Laufzeit: Wählen Sie im Menü Python 3.8 oder eine neuere Version aus, die vollständig von Cloud 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 weitere 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:

      Sicherungen erstellen

      1. In diesem Codebeispiel wird eine Sicherung mit dem Namen mybackup- erstellt, gefolgt vom Erstellungszeitpunkt.
      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/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_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'])
          return "Backup creation has begun!"
      

      Ersetzen Sie Folgendes:

      • project-id durch die Google Cloud-Projekt-ID der Filestore-Quellinstanz.
      • filestore-zone durch die Zone der Filestore-Quellinstanz.
      • filestore-name 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.
      1. Klicken Sie auf Funktion testen.

        In Cloud Shell wird eine neue Tabsitzung geöffnet. Darin wird bei Erfolg die folgende Nachricht zurückgegeben:

        Function is ready to test.
        
      2. Klicken Sie auf Bereitstellen und warten Sie, bis die Bereitstellung abgeschlossen ist.

      3. Kehren Sie zum vorherigen Cloud Shell-Tab zurück.

      Sicherungen löschen

      In diesem Codebeispiel werden Sicherungen gelöscht, die älter als ein vordefinierter Zeitraum sind.

      Konfigurieren Sie diese Funktion auf die gleiche Weise wie die Funktion zum Erstellen von Sicherungen, mit Ausnahme von Folgendem:

      • Funktionsname: deletefsbackups.
      • 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()
          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.")
              return "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'])
          return "Backup deletion has begun!"
      

      Ersetzen Sie Folgendes:

      • project-id durch die Google Cloud-Projekt-ID der Sicherung.
      • region durch die Region, in der sich die Sicherungen 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.

IAM-Rollen zu Clientdienstkonten zuweisen

  1. Fügen Sie den Cloud Scheduler-Dienst-Agent der IAM-Richtlinie des Cloud Scheduler-Clientdienstkontos mit der Rolle roles/cloudscheduler.serviceAgent hinzu. Dadurch kann der Dienst-Agent die Identität des Clientdienstkontos übernehmen, um die Funktion aufzurufen, die eine Sicherung erstellt. Führen Sie den Befehl iam 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
    
  2. Weisen Sie dem Clientdienstkonto von Cloud Functions die Rolle roles/file.editor zu, damit es Aufrufe an den Filestore-Endpunkt senden kann. Führen Sie den Befehl projects add-iam-policy-binding aus:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$GCF_CLIENT_SA \
        --role=roles/file.editor
    
  3. Gewähren Sie dem Clientdienstkonto von Cloud Scheduler die Rolle roles/cloudfunctions.invoker für die Funktion, die Sie verwenden möchten. Führen Sie den folgenden functions add-iam-policy-binding-Befehl aus:

    Sicherungen erstellen

    gcloud functions add-iam-policy-binding fsbackup \
        --member serviceAccount:$SCHEDULER_CLIENT_SA \
        --role roles/cloudfunctions.invoker
    

    Jetzt kann nur das Clientdienstkonto von Cloud Scheduler fsbackup aufrufen.

    Sicherungen löschen

    gcloud functions add-iam-policy-binding deletefsbackups \
        --member serviceAccount:$SCHEDULER_CLIENT_SA \
        --role roles/cloudfunctions.invoker
    

    Jetzt kann nur das Clientdienstkonto von Cloud Scheduler deletefsbackups aufrufen.

Cloud Scheduler-Job erstellen, der die Funktion fsbackup nach einem bestimmten Zeitplan auslöst

  1. 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
    

    Mit dem Flag --schedule geben Sie die Häufigkeit an, mit der der Job ausgeführt wird. Hierfür wird die unix-cron-Formatierung verwendet. Weitere Informationen finden Sie unter Cronjob-Zeitpläne konfigurieren.

  2. Starten Sie den Cloud Scheduler-Job, der im vorherigen Schritt erstellt wurde. Verwenden Sie in unserem Beispiel den Befehl scheduler jobs runs, um ihn sofort auszuführen:

    gcloud scheduler jobs run fsbackupschedule
    

    Der fsbackupschedule-Job ruft die Funktion fsbackups 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.

  3. Prüfen Sie die Logs für die Funktion fsbackups, um zu sehen, ob die Funktion ordnungsgemäß ausgeführt wird und einen status 200-Wert zurückgibt.

  4. Prüfen Sie mit dem Befehl backups list, ob die Sicherung erstellt wurde:

    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:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte