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:
- 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
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Jika belum memiliki instance Filestore dalam project, Anda harus membuat instance terlebih dahulu.
Membuat akun layanan klien untuk fungsi Cloud Scheduler dan Cloud Run
Jika Anda belum melakukannya, dari Konsol Google Cloud, klik Aktifkan Cloud Shell.
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 akunschedulerunner
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"
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. False Service Account for FS Backups-Scheduler schedulerunner@$PROJECT_ID. 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. export SCHEDULER_CLIENT_SA=schedulerunner@$PROJECT_ID. export GCF_CLIENT_SA=backupagent@$PROJECT_ID.
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
Di konsol Google Cloud, buka halaman fungsi Cloud Run.
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
.
- 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 > Akun layanan runtime > Service account: Pilih
Service Account for FS Backups-GCF
(backupagent@$PROJECT_ID.
) dari menu. - Koneksi > Setelan ingress: Pilih
Allow all traffic
.
- Runtime > Akun layanan runtime > Service account: Pilih
- Dasar-dasar:
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
- 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.
Klik Uji fungsi.
Sesi tab baru akan terbuka di Cloud Shell. Di dalamnya, pesan akan 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 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
.
- Contoh kode ini membuat cadangan bernama
- Runtime: Pilih
Menetapkan peran IAM ke akun layanan klien
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. Menjalankaniam 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
Berikan akun layanan klien fungsi Cloud Run
roles/file.editor
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
Beri akun layanan klien Cloud Scheduler peran
roles/cloudfunctions.invoker
untuk fungsi yang ingin Anda gunakan. Jalankan mengikutifunctions 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
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.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 fungsifsbackups
segera satu kali Anda menjalankan perintah dan kemudian memanggilnya lagi setiap hari kerja pada pukul 22.00 hingga tugas dijeda.Periksa log untuk fungsi
fsbackups
guna melihat apakah fungsi tersebut dieksekusi dengan benar dan menampilkanstatus 200
.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:
- 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.