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 tersebut secara berkala.

Biaya

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

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud 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. To initialize the gcloud CLI, run the following command:

    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. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Jika tidak memiliki instance Filestore di project, Anda harus membuat instance terlebih dahulu.

Membuat akun layanan klien untuk fungsi Cloud Scheduler dan Cloud Run

  1. Jika Anda belum melakukannya, dari konsol Google Cloud, 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 beri nama akun backupagent dan tetapkan 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 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:

  • ID project dan project Google Cloud:

    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 instance Filestore sumber.
    • file-share-name dengan nama yang Anda tentukan untuk berbagi file NFS yang ditayangkan dari instance.
  • Siapkan variabel lingkungan untuk pencadangan Filestore Anda:

    export BACKUP_REGION=backup-region
    

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

Membuat fungsi yang membuat cadangan

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

    Buka halaman fungsi Cloud Run

  2. Klik Create Function dan konfigurasikan fungsi sebagai berikut:

    • Dasar-Dasar:
      • Lingkungan: Untuk contoh ini, pilih 2nd gen, yang merupakan default.
      • Function Name: Untuk contoh ini, kita beri nama fungsi fsbackup.
      • Region: Untuk contoh ini, pilih us-central1.
    • Pemicu:
      • Jenis pemicu: Pilih HTTPS dari menu.
      • Autentikasi: Pilih Require authentication.
    • Runtime, build, connections, and security settings:
      • Runtime > Runtime service account > Service account: Pilih Service Account for FS Backups-GCF (backupagent@$PROJECT_ID.iam.gserviceaccount.com) dari menu.
      • Koneksi > Setelan ingress: Pilih Allow all traffic.
  3. Klik Berikutnya dan lanjutkan konfigurasi sebagai berikut:

    • Runtime: Pilih Python 3.8, atau versi yang lebih baru yang sepenuhnya didukung oleh fungsi Cloud Run dari menu.
    • Kode sumber: Inline editor.
    • Entry point: Masukkan create_backup.
    • Tambahkan dependensi berikut ke file requirements.txt Anda:

      google-auth==2.29.0
      requests==2.31.0
      

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

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

      Membuat cadangan

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

      Ganti kode berikut:

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

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

        Function is ready to test.
        
      2. Klik Deploy 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.

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

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

      • Nama fungsi: deletefsbackup.
      • Titik entri: 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."
      

      Ganti kode berikut:

      • project-id dengan project ID Google Cloud dari pencadangan.
      • region dengan region tempat cadangan berada. Pencadangan, tugas penjadwal, dan fungsi harus berada di lokasi yang sama.
      • hours dengan jumlah jam untuk mempertahankan cadangan. Misalnya, jika Anda ingin mempertahankan 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 untuk meniru akun layanan klien guna 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. Berikan peran roles/file.editor ke akun layanan klien fungsi Cloud Run 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/cloudfunctions.invoker ke akun layanan klien Cloud Scheduler untuk fungsi yang ingin Anda gunakan. Jalankan perintah functions add-iam-policy-binding berikut:

    Membuat cadangan

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

    Perintah akan muncul yang menunjukkan bahwa peran roles/run.invoker harus diberikan di layanan Cloud Run yang mendasarinya dan bahwa Anda dapat menjalankan perintah gcloud functions add-invoker-policy-binding untuk menerapkannya. Saat diminta untuk memberikan respons, masukkan Y.

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

    Menghapus cadangan

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

    Perintah akan muncul yang menunjukkan bahwa peran roles/run.invoker harus diberikan di layanan Cloud Run yang mendasarinya dan bahwa Anda dapat menjalankan perintah gcloud functions add-invoker-policy-binding untuk menerapkannya. Saat diminta untuk memberikan respons, masukkan Y.

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

Membuat tugas Cloud Scheduler yang memicu fungsi sesuai jadwal yang ditentukan

Membuat cadangan

  1. Dalam contoh untuk tutorial ini, jika 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://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
    

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

    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 segera menjalankannya:

    gcloud scheduler jobs run fsbackupschedule
    

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

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

    Untuk melihat log 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 pencadangan 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 tutorial ini, jika 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 berjalan menggunakan format unix-cron. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal tugas cron.

    Operasi delete cadangan yang terkait dengan instance sumber yang sama harus dilakukan satu per satu. Untuk mengetahui informasi selengkapnya, lihat Pencadangan.

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

    gcloud scheduler jobs run deletefsbackupschedule
    

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

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

    Untuk melihat log 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 pencadangan 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 penjadwalan pencadangan membuat Anda berisiko kehabisan kuota pencadangan, sebaiknya siapkan pemberitahuan kuota pencadangan rendah. Dengan demikian, 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 selanjutnya