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 secara berkala.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Filestore, Cloud Run functions, Cloud Logging, Pub/Sub, Cloud Run, and Cloud Scheduler APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Jika tidak memiliki instance Filestore di project, Anda harus membuatnya terlebih dahulu.
Buat akun layanan klien untuk fungsi Cloud Scheduler dan Cloud Run
Jika Anda belum melakukannya, dari Google Cloud konsol, klik Activate Cloud Shell.
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 akunschedulerunner
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"
Buat akun layanan klien yang dijalankan fungsi Cloud Run untuk memanggil endpoint Filestore. Untuk contoh ini, kita akan memberi nama akun
backupagent
dan menetapkan 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 akan 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:
Google Cloud project ID dan project:
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 Filestore sumber.
- file-share-name dengan nama yang Anda tentukan untuk berbagi file NFS yang ditampilkan dari instance.
Siapkan variabel lingkungan untuk cadangan Filestore Anda:
export BACKUP_REGION=backup-region
Ganti backup-region dengan region tempat Anda ingin menyimpan cadangan.
Membuat fungsi yang membuat cadangan
Di Google Cloud konsol, buka halaman fungsi Cloud Run.
Klik Write a function dan konfigurasi fungsi sebagai berikut:
- Konfigurasi:
- Nama Layanan: Untuk contoh ini, kita akan memberi nama fungsi
fsbackup
. - Region: Untuk contoh ini, pilih
us-central1
. - Runtime: Pilih Runtime Python 3 yang didukung yang sepenuhnya didukung oleh fungsi Cloud Run dari menu.
- Nama Layanan: Untuk contoh ini, kita akan memberi nama fungsi
- Pemicu:
- Pemicu tidak perlu disetel untuk contoh ini.
- Autentikasi: Pilih
Require authentication
. - Ingress: Pilih
All
. - Container(s), Volumes, Networking, Security
- Buka tab Keamanan, lalu pilih
Service Account for FS Backups-GCF
(backupagent@$PROJECT_ID.iam.gserviceaccount.com
) dari menu.
- Buka tab Keamanan, lalu pilih
- Konfigurasi:
Klik Buat dan lanjutkan konfigurasi sebagai berikut:
- Titik entri fungsi: Masukkan
create_backup
. Tambahkan dependensi berikut ke file
requirements.txt
Anda:functions-framework==3.* google-auth==2.29.0 requests==2.31.0
Bergantung pada kasus penggunaan, Anda mungkin perlu menentukan dependensi lain bersama dengan nomor versinya yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Paket yang sudah diinstal.
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_LOCATION = 'fs-location' SOURCE_INSTANCE_NAME = 'instance-id' SOURCE_FILE_SHARE_NAME = 'file-share-name' BACKUP_REGION = 'backup-region' import functions_framework 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") @functions_framework.http 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 Google Cloud project ID instance Filestore sumber.
- fs-location dengan zona atau region instance Filestore sumber.
- instance-id dengan nama instance Filestore sumber.
- file-share-name dengan nama berbagi file.
- backup-region dengan region untuk menyimpan cadangan.
Klik Uji.
Sesi tab baru akan terbuka di Cloud Shell. Di dalamnya, pesan berikut akan ditampilkan jika berhasil:
Backup creation has begun!
Klik Save and redeploy dan tunggu hingga deployment selesai.
Beralih kembali ke tab Cloud Shell sebelumnya.
Menghapus cadangan
Contoh kode ini menghapus cadangan yang lebih lama dari periode yang telah ditentukan sebelumnya.
Anda hanya dapat menghapus satu cadangan per instance sumber dalam satu waktu. Untuk mengetahui informasi selengkapnya, lihat Pencadangan.
Konfigurasi fungsi ini dengan cara yang sama seperti fungsi yang Anda gunakan untuk membuat cadangan, menggunakan perubahan berikut:
- Nama fungsi:
deletefsbackup
. - Entry point:
delete_backup
.
PROJECT_ID = 'project-id' BACKUP_REGION = 'region' BACKUP_RETENTION_TIME_HRS = hours import functions_framework 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 @functions_framework.http 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 Google Cloud project ID cadangan.
- region dengan region tempat cadangan berada. Pencadangan, tugas scheduler, dan fungsi harus berada di lokasi yang sama.
- hours dengan jumlah jam untuk menyimpan cadangan. Misalnya, jika Anda ingin menyimpan cadangan selama 10 hari, masukkan
240
.
- Titik entri fungsi: Masukkan
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 identitas 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
Beri akun layanan klien fungsi Cloud Run peran
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
Berikan peran
roles/run.invoker
ke akun layanan klien Cloud Scheduler untuk fungsi yang ingin Anda gunakan. Jalankan perintahrun services add-iam-policy-binding
berikut:Membuat cadangan
gcloud run services add-iam-policy-binding fsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invoker \ --region=us-central1
Sekarang, hanya akun layanan klien Cloud Scheduler yang dapat memanggil
fsbackup
.Menghapus cadangan
gcloud run services add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/run.invoker
Sekarang, hanya akun layanan klien Cloud Scheduler yang dapat memanggil
deletefsbackup
.
Buat tugas Cloud Scheduler yang memicu fungsi sesuai jadwal yang ditentukan
Membuat cadangan
Dalam contoh untuk tutorial ini, jika Anda 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://fsbackup-$PROJECT_NUMBER.us-central1.run.app \ --oidc-service-account-email=$SCHEDULER_CLIENT_SA \ --location=us-central1
Flag
--schedule
adalah tempat Anda menentukan frekuensi tugas dijalankan menggunakan format unix-cron. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal cron job.Anda dapat membuat maksimal enam cadangan per instance per jam.
Mulai tugas Cloud Scheduler yang dibuat pada langkah sebelumnya. Dalam contoh kita, gunakan perintah
scheduler jobs runs
untuk menjalankannya segera:gcloud scheduler jobs run fsbackupschedule
Tugas
fsbackupschedule
memanggil fungsifsbackup
segera setelah Anda menjalankan perintah, lalu memanggilnya lagi setiap hari kerja pukul 22.00 hingga tugas dijeda.Periksa log untuk fungsi
fsbackup
guna melihat apakah fungsi tersebut dieksekusi dengan benar dan menampilkanstatus 200
.Untuk melihat log Anda di konsol Google Cloud , gunakan Logs Explorer:
-
Di konsol Google Cloud , buka halaman 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.
-
Periksa status cadangan 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
Dalam contoh untuk tutorial ini, jika Anda 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 dijalankan menggunakan format unix-cron. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal cron job.Operasi
delete
pencadangan yang terkait dengan instance sumber yang sama harus terjadi satu per satu. Untuk mengetahui informasi selengkapnya, lihat Cadangan.Mulai tugas Cloud Scheduler yang dibuat pada langkah sebelumnya. Dalam contoh ini, kita menggunakan perintah
scheduler jobs runs
untuk menjalankannya dengan segera:gcloud scheduler jobs run deletefsbackupschedule
Tugas
deletefsbackupschedule
memanggil fungsideletefsbackup
segera setelah Anda menjalankan perintah, lalu memanggilnya lagi setiap hari kerja pukul 22.00 hingga tugas dijeda.Periksa log untuk fungsi
deletefsbackup
guna melihat apakah fungsi tersebut dieksekusi dengan benar dan menampilkanstatus 200
.Untuk melihat log Anda di konsol Google Cloud , gunakan Logs Explorer:
-
Di konsol Google Cloud , buka halaman 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.
-
Periksa status cadangan 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 pencadangan terjadwal membuat Anda berisiko kehabisan kuota pencadangan, sebaiknya siapkan pemberitahuan kuota pencadangan rendah. Dengan cara ini, 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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah berikutnya
- Pelajari snapshot Filestore.
- Pelajari lebih lanjut pencadangan Filestore.
- Pelajari cara Menjadwalkan snapshot Filestore Enterprise.