Menjadwalkan pencadangan


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

Tujuan

  • Buat akun layanan klien untuk Cloud Scheduler yang memiliki kredensial yang diperlukan untuk memanggil fungsi Cloud Functions.
  • Buat akun layanan klien untuk digunakan oleh Cloud Functions yang memiliki kredensial untuk memanggil endpoint Filestore.
  • Buat fungsi Cloud Functions yang membuat (atau menghapus) cadangan berbagi file.
  • Buat tugas Cloud Scheduler yang menjalankan fungsi pembuatan cadangan (atau hapus cadangan) secara berkala.

Biaya

Dalam dokumen ini, Anda 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. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Enable the APIs

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

    Enable the APIs

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

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

Membuat akun layanan klien untuk Cloud Scheduler dan Cloud Functions

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

  2. Buat akun layanan klien yang dijalankan Cloud Scheduler untuk memanggil fungsi Cloud Functions. Untuk contoh ini, gunakan perintah iam service-accounts create untuk memberi nama akun schedulerunner dan tetapkan 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 Cloud Functions untuk memanggil endpoint Filestore. Untuk contoh ini, kita memberi nama akun backupagent dan menyetel 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 akan menampilkan hasil 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:

  • Project ID 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 Cloud Scheduler dan 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
    
  • Instance Filestore Anda:

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

    Ganti kode berikut:

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

    export FS_BACKUP_LOCATION=region
    

    Ganti region dengan wilayah tempat Anda ingin menyimpan cadangan.

Membuat fungsi yang membuat cadangan

  1. Di konsol Google Cloud, buka halaman Cloud Functions.

    Buka halaman Cloud Functions

  2. Klik Create Function dan konfigurasi fungsi sebagai berikut:

    • Dasar-dasar:
      • Lingkungan: Untuk contoh ini, pilih 2nd gen, yang merupakan default.
      • Nama Fungsi: 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.
    • Setelan runtime, build, koneksi, dan keamanan:
      • Runtime > Runtime service account > Service account: Pilih Service Account for FS Backups-GCF (backupagent@$PROJECT_ID.iam.gserviceaccount.com) dari menu.
      • Connections > Ingress settings: Pilih Allow all traffic.
  3. Klik Next dan lanjutkan konfigurasi sebagai berikut:

    • Runtime: Pilih Python 3.8, atau versi yang lebih baru yang sepenuhnya didukung oleh Cloud Functions 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 beserta nomor versinya yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Paket bawaan.

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

      Ganti kode berikut:

      • project-id dengan project ID Google Cloud dari instance Filestore sumber.
      • filestore-zone dengan zona instance Filestore sumber.
      • filestore-name dengan nama instance Filestore sumber.
      • file-share-name dengan nama file yang dibagikan.
      • backup-region dengan region untuk menyimpan cadangan.
      1. Klik Test function.

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

        Function is ready to test.
        
      2. Klik Deploy dan tunggu hingga deployment selesai.

      3. Pindah kembali ke tab Cloud Shell sebelumnya.

      Hapus cadangan

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

      Konfigurasikan fungsi ini dengan cara yang sama seperti fungsi buat cadangan, kecuali berikut:

      • Nama fungsi: deletefsbackups.
      • 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()
          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!"
      

      Ganti kode berikut:

      • project-id dengan project ID Google Cloud cadangan.
      • region dengan wilayah tempat cadangan berada.
      • hours dengan jumlah jam untuk mempertahankan 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 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. Berikan peran roles/file.editor pada akun layanan klien Cloud Functions 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
    

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

    Hapus cadangan

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

    Kini, hanya akun layanan klien Cloud Scheduler yang dapat memanggil deletefsbackups.

Buat tugas Cloud Scheduler yang memicu fungsi fsbackup pada jadwal yang ditentukan

  1. Dalam contoh kami untuk tutorial ini, jika Anda ingin menjadwalkan pencadangan setiap hari kerja pada 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 dijalankan menggunakan pemformatan unix-cron. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal cron job.

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

    gcloud scheduler jobs run fsbackupschedule
    

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

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

  4. Periksa apakah cadangan dibuat menggunakan perintah backups list:

    gcloud filestore backups list
    

    Perintah tersebut 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 mendapatkan notifikasi saat kuota cadangan 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. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya