Menjadwalkan pencadangan


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

Tujuan

  • Membuat akun layanan klien untuk Cloud Scheduler yang memiliki kredensial yang diperlukan untuk memanggil fungsi fungsi Cloud Run.
  • Buat akun layanan klien untuk digunakan oleh fungsi Cloud Run yang memiliki kredensial untuk memanggil endpoint Filestore.
  • Membuat fungsi Cloud Run yang membuat (atau menghapus) cadangan dari berbagi file.
  • Membuat tugas Cloud Scheduler yang menjalankan pembuatan cadangan (atau penghapusan pencadangan) berfungsi 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. Aktifkan API Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler.

    Mengaktifkan API

  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. Aktifkan API Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler.

    Mengaktifkan API

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

    gcloud init
  12. Jika belum memiliki instance Filestore dalam 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 Aktifkan Cloud Shell.

  2. Buat akun layanan klien yang digunakan Cloud Scheduler untuk panggil fungsi Cloud Run. Untuk contoh ini, gunakan iam service-accounts create perintah untuk memberi nama akun schedulerunner dan mengatur nama tampilan menjadi "Akun Layanan untuk Penjadwal Cadangan FS":

    gcloud iam service-accounts create schedulerunner \
        --display-name="Service Account for FS Backups-Scheduler"
    
  3. Buat akun layanan klien yang dapat dipanggil oleh fungsi Cloud Run endpoint Filestore. Untuk contoh ini, kita menamai 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 sudah dibuat dengan menjalankan iam service-accounts list berikut:

    gcloud iam service-accounts list
    

    Perintah tersebut 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 klien akun layanan 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 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 Filestore berada.
    • instance-id dengan ID instance Filestore di instance Compute Engine.
    • 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 region tempat Anda ingin menyimpan cadangan.

Buat fungsi yang membuat cadangan

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

    Buka halaman Cloud Run Functions

  2. Klik Create Function dan konfigurasikan fungsi sebagai berikut:

    • Dasar-dasar:
      • Lingkungan: Untuk contoh ini, pilih 2nd gen, yang merupakan default.
      • Nama Fungsi: Untuk contoh ini, kita memberi 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 > Akun layanan runtime > 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 Next dan lanjutkan konfigurasi sebagai berikut:

    • Runtime: Pilih Python 3.8, atau versi yang lebih baru didukung sepenuhnya oleh fungsi Cloud Run dari menu.
    • Kode sumber: Inline editor.
    • Titik entri: 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 informasi selengkapnya, lihat Paket yang telah diinstal sebelumnya.

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

      Membuat cadangan

      1. Contoh kode ini membuat cadangan bernama mybackup- yang ditambahkan dengan waktu pembuatannya.
      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 ID project 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 Uji fungsi.

        Sesi tab baru akan terbuka di Cloud Shell. Di dalamnya, pesan akan 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 ditentukan sebelumnya.

      Konfigurasikan fungsi ini dengan cara yang sama seperti fungsi {i>create backup<i}, kecuali yang 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 ID project Google Cloud cadangan.
      • region dengan region tempat cadangan berada.
      • hours dengan jumlah jam untuk menyimpan cadangan. Misalnya, jika Anda ingin mempertahankan cadangan selama 10 hari, masukkan 240.

Menetapkan peran IAM ke akun layanan klien

  1. Menambahkan agen layanan Cloud Scheduler ke IAM kebijakan akun layanan klien Cloud Scheduler dengan peran dari roles/cloudscheduler.serviceAgent. Hal ini memungkinkan agen layanan untuk meniru akun layanan klien untuk menjalankan fungsi yang membuat cadangan. Menjalankan iam service-accounts add-iam-policy-binding berikut:

    gcloud iam service-accounts add-iam-policy-binding $SCHEDULER_CLIENT_SA \
        --member=serviceAccount:$SCHEDULER_SA \
        --role=roles/cloudscheduler.serviceAgent
    
  2. Berikan akun layanan klien fungsi Cloud Run 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. Beri akun layanan klien Cloud Scheduler peran roles/cloudfunctions.invoker untuk fungsi yang ingin Anda gunakan. Jalankan mengikuti functions add-iam-policy-binding berikut:

    Membuat cadangan

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

    Sekarang, 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
    

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

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

  1. Dalam contoh kita untuk tutorial ini, jika Anda ingin menjadwalkan pencadangan setiap hari kerja pukul 22.00, Anda akan menggunakan scheduler jobs create http berikut:

    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 unix-cron format font. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal cron job.

  2. Mulai tugas Cloud Scheduler yang dibuat di langkah sebelumnya. Di contoh, gunakan scheduler jobs runs untuk menjalankannya secara langsung:

    gcloud scheduler jobs run fsbackupschedule
    

    Tugas fsbackupschedule memanggil fungsi fsbackups segera satu kali Anda menjalankan perintah dan kemudian memanggilnya lagi setiap hari kerja pada pukul 22.00 hingga tugas dijeda.

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

  4. Memeriksa apakah cadangan dibuat menggunakan backups list berikut:

    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 cadangan

Jika penerapan penjadwalan pencadangan membuat Anda berisiko kehabisan dari kuota cadangan, sebaiknya Anda mengatur pemberitahuan kuota cadangan yang rendah. Dengan demikian, Anda akan menerima 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