Menjadwalkan pencadangan


Tutorial ini menunjukkan cara menjadwalkan pencadangan untuk instance Filestore menggunakan fungsi Cloud Scheduler dan Cloud Run.

Tujuan

  • Buat akun layanan klien untuk Cloud Scheduler yang memiliki kredensial yang diperlukan untuk memanggil fungsi Cloud Run.
  • Buat akun layanan klien untuk fungsi Cloud Run yang memiliki kredensial untuk memanggil endpoint Filestore.
  • Buat fungsi Cloud Run yang membuat cadangan instance Filestore.
  • Buat fungsi Cloud Run yang menghapus cadangan instance Filestore.
  • Buat tugas Cloud Scheduler yang menjalankan salah satu fungsi secara berkala.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. Jika tidak memiliki instance Filestore di project, Anda harus membuatnya terlebih dahulu.

Buat akun layanan klien untuk fungsi Cloud Scheduler dan Cloud Run

  1. Jika Anda belum melakukannya, dari Google Cloud konsol, klik Activate Cloud Shell.

  2. Buat akun layanan klien yang dijalankan Cloud Scheduler untuk memanggil fungsi Cloud Run. Untuk contoh ini, gunakan perintah iam service-accounts create untuk memberi nama akun schedulerunner dan menetapkan nama tampilan ke "Service Account for FS Backups-Scheduler":

    gcloud iam service-accounts create schedulerunner \
        --display-name="Service Account for FS Backups-Scheduler"
    
  3. Buat akun layanan klien yang dijalankan fungsi Cloud Run untuk memanggil endpoint Filestore. Untuk contoh ini, kita akan memberi nama akun backupagent dan menetapkan nama tampilan ke "Service Account for FS Backups-GCF":

    gcloud iam service-accounts create backupagent \
        --display-name="Service Account for FS Backups-GCF"
    

    Anda dapat memeriksa apakah akun layanan dibuat dengan menjalankan perintah iam service-accounts list:

    gcloud iam service-accounts list
    

    Perintah ini akan menampilkan sesuatu seperti ini:

    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
    

Menyiapkan variabel lingkungan

Siapkan variabel lingkungan berikut di lingkungan lokal Anda:

  • Google Cloud project ID dan project:

    export PROJECT_ID=`gcloud config get-value core/project`
    export PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format="value(projectNumber)"`
    
  • Agen layanan Cloud Scheduler dan akun layanan klien untuk fungsi Cloud Scheduler dan 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
    
  • Instance Filestore Anda:

    export SOURCE_INSTANCE_LOCATION=fs-location
    export SOURCE_INSTANCE_NAME=instance-id
    export SHARE_NAME=file-share-name
    

    Ganti kode berikut:

    • fs-location dengan zona atau region tempat instance Filestore sumber berada.
    • instance-id dengan ID instance Filestore sumber.
    • file-share-name dengan nama yang Anda tentukan untuk berbagi file NFS yang ditampilkan dari instance.
  • Siapkan variabel lingkungan untuk cadangan Filestore Anda:

    export BACKUP_REGION=backup-region
    

    Ganti backup-region dengan region tempat Anda ingin menyimpan cadangan.

Membuat fungsi yang membuat cadangan

  1. Di Google Cloud konsol, buka halaman fungsi Cloud Run.

    Buka halaman fungsi Cloud Run

  2. Klik Write a function dan konfigurasi fungsi sebagai berikut:

    • Konfigurasi:
    • Pemicu:
      • Pemicu tidak perlu disetel untuk contoh ini.
    • Autentikasi: Pilih Require authentication.
    • Ingress: Pilih All.
    • Container(s), Volumes, Networking, Security
      • Buka tab Keamanan, lalu pilih Service Account for FS Backups-GCF (backupagent@$PROJECT_ID.iam.gserviceaccount.com) dari menu.
  3. Klik Buat dan lanjutkan konfigurasi sebagai berikut:

    • Titik entri fungsi: Masukkan create_backup.
    • Tambahkan dependensi berikut ke file requirements.txt Anda:

      functions-framework==3.*
      google-auth==2.29.0
      requests==2.31.0
      

      Bergantung pada kasus penggunaan, Anda mungkin perlu menentukan dependensi lain bersama dengan nomor versinya yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Paket yang sudah diinstal.

    • Salin contoh kode Python berikut ke dalam file main.py menggunakan editor inline:

      Membuat cadangan

      Contoh kode ini membuat cadangan bernama mybackup- yang ditambahkan dengan waktu pembuatan.

      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!"
      

      Ganti kode berikut:

      • project-id dengan Google Cloud project ID instance Filestore sumber.
      • fs-location dengan zona atau region instance Filestore sumber.
      • instance-id dengan nama instance Filestore sumber.
      • file-share-name dengan nama berbagi file.
      • backup-region dengan region untuk menyimpan cadangan.
      1. Klik Uji.

        Sesi tab baru akan terbuka di Cloud Shell. Di dalamnya, pesan berikut akan ditampilkan jika berhasil:

        Backup creation has begun!
        
      2. Klik Save and redeploy dan tunggu hingga deployment selesai.

      3. Beralih kembali ke tab Cloud Shell sebelumnya.

      Menghapus cadangan

      Contoh kode ini menghapus cadangan yang lebih lama dari periode yang telah ditentukan sebelumnya.

      Anda hanya dapat menghapus satu cadangan per instance sumber dalam satu waktu. Untuk mengetahui informasi selengkapnya, lihat Pencadangan.

      Konfigurasi fungsi ini dengan cara yang sama seperti fungsi yang Anda gunakan untuk membuat cadangan, menggunakan perubahan berikut:

      • Nama fungsi: deletefsbackup.
      • Entry point: 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."
      

      Ganti kode berikut:

      • project-id dengan Google Cloud project ID cadangan.
      • region dengan region tempat cadangan berada. Pencadangan, tugas scheduler, dan fungsi harus berada di lokasi yang sama.
      • hours dengan jumlah jam untuk menyimpan cadangan. Misalnya, jika Anda ingin menyimpan cadangan selama 10 hari, masukkan 240.

Menetapkan peran IAM ke akun layanan klien

  1. Tambahkan agen layanan Cloud Scheduler ke kebijakan IAM akun layanan klien Cloud Scheduler dengan peran roles/cloudscheduler.serviceAgent. Hal ini memungkinkan agen layanan meniru identitas akun layanan klien untuk memanggil fungsi yang membuat cadangan. Jalankan perintah iam 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
    
  2. Beri akun layanan klien fungsi Cloud Run peran roles/file.editor agar dapat melakukan panggilan ke endpoint Filestore. Jalankan perintah projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$GCF_CLIENT_SA \
        --role=roles/file.editor
    
  3. Berikan peran roles/run.invoker ke akun layanan klien Cloud Scheduler untuk fungsi yang ingin Anda gunakan. Jalankan perintah run services add-iam-policy-binding berikut:

    Membuat cadangan

    gcloud run services add-iam-policy-binding fsbackup \
        --member serviceAccount:$SCHEDULER_CLIENT_SA \
        --role roles/run.invoker \
        --region=us-central1
    

    Sekarang, hanya akun layanan klien Cloud Scheduler yang dapat memanggil fsbackup.

    Menghapus cadangan

    gcloud run services add-iam-policy-binding deletefsbackup \
        --member serviceAccount:$SCHEDULER_CLIENT_SA \
        --role roles/run.invoker
    

    Sekarang, hanya akun layanan klien Cloud Scheduler yang dapat memanggil deletefsbackup.

Buat tugas Cloud Scheduler yang memicu fungsi sesuai jadwal yang ditentukan

Membuat cadangan

  1. Dalam contoh untuk tutorial ini, jika Anda ingin menjadwalkan pencadangan setiap hari kerja pukul 22.00, Anda akan menggunakan perintah 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
    

    Flag --schedule adalah tempat Anda menentukan frekuensi tugas dijalankan menggunakan format unix-cron. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal cron job.

    Anda dapat membuat maksimal enam cadangan per instance per jam.

  2. Mulai tugas Cloud Scheduler yang dibuat pada langkah sebelumnya. Dalam contoh kita, gunakan perintah scheduler jobs runs untuk menjalankannya segera:

    gcloud scheduler jobs run fsbackupschedule
    

    Tugas fsbackupschedule memanggil fungsi fsbackup segera setelah Anda menjalankan perintah, lalu memanggilnya lagi setiap hari kerja pukul 22.00 hingga tugas dijeda.

  3. Periksa log untuk fungsi fsbackup guna melihat apakah fungsi tersebut dieksekusi dengan benar dan menampilkan status 200.

    Untuk melihat log Anda di konsol Google Cloud , gunakan Logs Explorer:

    1. Di konsol Google Cloud , buka halaman Logs Explorer:

      Buka Logs Explorer

      Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.

      Log terbaru Anda ditampilkan di panel Query results.

  4. Periksa status cadangan yang ada menggunakan perintah backups list:

    gcloud filestore backups list
    

    Perintah ini menampilkan sesuatu yang mirip dengan:

    NAME                      LOCATION     SRC_INSTANCE                        SRC_FILE_SHARE  STATE
    mybackup-20201123-184500  us-central1  us-central1-c/instances/nfs-server  vol1            READY
    

Menghapus cadangan

  1. Dalam contoh untuk tutorial ini, jika Anda ingin menjadwalkan operasi untuk menghapus cadangan setiap hari kerja pukul 22.00, Anda akan menggunakan perintah 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
    

    Flag --schedule adalah tempat Anda menentukan frekuensi tugas dijalankan menggunakan format unix-cron. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal cron job.

    Operasi delete pencadangan yang terkait dengan instance sumber yang sama harus terjadi satu per satu. Untuk mengetahui informasi selengkapnya, lihat Cadangan.

  2. Mulai tugas Cloud Scheduler yang dibuat pada langkah sebelumnya. Dalam contoh ini, kita menggunakan perintah scheduler jobs runs untuk menjalankannya dengan segera:

    gcloud scheduler jobs run deletefsbackupschedule
    

    Tugas deletefsbackupschedule memanggil fungsi deletefsbackup segera setelah Anda menjalankan perintah, lalu memanggilnya lagi setiap hari kerja pukul 22.00 hingga tugas dijeda.

  3. Periksa log untuk fungsi deletefsbackup guna melihat apakah fungsi tersebut dieksekusi dengan benar dan menampilkan status 200.

    Untuk melihat log Anda di konsol Google Cloud , gunakan Logs Explorer:

    1. Di konsol Google Cloud , buka halaman Logs Explorer:

      Buka Logs Explorer

      Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.

      Log terbaru Anda ditampilkan di panel Query results.

  4. Periksa status cadangan yang ada menggunakan perintah backups list:

    gcloud filestore backups list
    

    Perintah ini menampilkan sesuatu yang mirip dengan:

    NAME                      LOCATION     SRC_INSTANCE                        SRC_FILE_SHARE  STATE
    mybackup-20201123-184500  us-central1  us-central1-c/instances/nfs-server  vol1            READY
    

Pemberitahuan kuota rendah untuk pencadangan

Jika penerapan pencadangan terjadwal membuat Anda berisiko kehabisan kuota pencadangan, sebaiknya siapkan pemberitahuan kuota pencadangan rendah. Dengan cara ini, Anda akan diberi tahu saat kuota pencadangan hampir habis.

Pembersihan

Setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang dibuat agar resource tersebut berhenti menggunakan kuota dan dikenai biaya. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Langkah berikutnya