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:
- Artifact Registry API
- Cloud Build API
- Filestore API
- Cloud Functions API
- Cloud Logging API
- Pub/Sub API
- Cloud Run Admin API
- Cloud Scheduler API
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
- Jika tidak memiliki instance Filestore dalam project, Anda harus membuat instance tersebut terlebih dahulu.
Membuat akun layanan klien untuk Cloud Scheduler dan Cloud Functions
Jika Anda belum melakukannya, dari Google Cloud Console, klik Activate Cloud Shell.
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 akunschedulerunner
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"
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
Di konsol Google Cloud, buka halaman Cloud Functions.
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
.
- Lingkungan: Untuk contoh ini, pilih
- Pemicu:
- Jenis pemicu: Pilih
HTTPS
dari menu. - Autentikasi: Pilih
Require authentication
.
- Jenis pemicu: Pilih
- 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
.
- Runtime > Runtime service account > Service account: Pilih
- Dasar-dasar:
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
- 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.
Klik Test function.
Sesi tab baru akan terbuka di Cloud Shell. Di dalamnya, pesan berikut ditampilkan jika berhasil:
Function is ready to test.
Klik Deploy dan tunggu hingga deployment selesai.
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
.
- Contoh kode ini membuat cadangan bernama
- Runtime: Pilih
Menetapkan peran IAM ke akun layanan klien
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 perintahiam 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
Berikan peran
roles/file.editor
pada akun layanan klien Cloud Functions agar dapat melakukan panggilan ke endpoint Filestore. Jalankan perintahprojects add-iam-policy-binding
:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$GCF_CLIENT_SA \ --role=roles/file.editor
Berikan peran
roles/cloudfunctions.invoker
ke akun layanan klien Cloud Scheduler untuk fungsi yang ingin Anda gunakan. Jalankan perintahfunctions 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
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.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 fungsifsbackups
segera setelah Anda menjalankan perintah, lalu memanggilnya lagi setiap hari kerja pada pukul 22.00 hingga tugas dijeda.Periksa log fungsi
fsbackups
untuk melihat apakah fungsi tersebut dijalankan dengan benar dan menampilkanstatus 200
.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:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Pelajari Snapshot Filestore.
- Pelajari Pencadangan filestore lebih lanjut.
- Pelajari cara Menjadwalkan snapshot Filestore Enterprise.