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 tersebut secara berkala.
Biaya
Dalam dokumen ini, Anda akan 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.
-
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.
-
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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Jika tidak memiliki instance Filestore di 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 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 beri nama 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 dibuat dengan menjalankan perintah
iam service-accounts list
:gcloud iam service-accounts list
Perintah ini 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:
ID project 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 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 instance Filestore sumber.
- file-share-name dengan nama yang Anda tentukan untuk berbagi file NFS yang ditayangkan dari instance.
Siapkan variabel lingkungan untuk pencadangan Filestore Anda:
export BACKUP_REGION=backup-region
Ganti backup-region dengan region tempat Anda ingin menyimpan cadangan.
Membuat 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. - Function Name: 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
- Runtime, build, connections, and security settings:
- Runtime > Runtime service account > Service account: Pilih
Service Account for FS Backups-GCF
(backupagent@$PROJECT_ID.iam.gserviceaccount.com
) dari menu. - Koneksi > Setelan ingress: Pilih
Allow all traffic
.
- Runtime > Runtime service account > Service account: Pilih
- Dasar-Dasar:
Klik Berikutnya dan lanjutkan konfigurasi sebagai berikut:
- Runtime: Pilih
Python 3.8
, atau versi yang lebih baru yang sepenuhnya didukung oleh fungsi Cloud Run 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 bersama dengan nomor versi yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Paket yang telah diinstal sebelumnya.
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 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_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 project ID Google Cloud dari instance Filestore sumber.
- fs-location dengan zona atau region instance Filestore sumber.
- instance-id dengan nama instance Filestore sumber.
- file-share-name dengan nama file share.
- backup-region dengan region untuk menyimpan cadangan.
Klik Uji fungsi.
Sesi tab baru akan terbuka di Cloud Shell. Di dalamnya, pesan berikut akan ditampilkan jika berhasil:
Function is ready to test.
Klik Deploy 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.
Anda hanya dapat menghapus satu cadangan per instance sumber pada satu waktu. Untuk mengetahui informasi selengkapnya, lihat Pencadangan.
Konfigurasikan fungsi ini dengan cara yang sama seperti fungsi yang Anda gunakan untuk membuat cadangan, menggunakan modifikasi berikut:
- Nama fungsi:
deletefsbackup
. - 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() 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 project ID Google Cloud dari pencadangan.
- region dengan region tempat cadangan berada. Pencadangan, tugas penjadwal, dan fungsi harus berada di lokasi yang sama.
- hours dengan jumlah jam untuk mempertahankan 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
Tambahkan agen layanan Cloud Scheduler ke kebijakan IAM akun layanan klien Cloud Scheduler dengan peran
roles/cloudscheduler.serviceAgent
. Hal ini memungkinkan agen layanan untuk meniru akun layanan klien guna 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
ke akun layanan klien fungsi Cloud Run 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
Perintah akan muncul yang menunjukkan bahwa peran
roles/run.invoker
harus diberikan di layanan Cloud Run yang mendasarinya dan bahwa Anda dapat menjalankan perintahgcloud functions add-invoker-policy-binding
untuk menerapkannya. Saat diminta untuk memberikan respons, masukkanY
.Sekarang, hanya akun layanan klien Cloud Scheduler yang dapat memanggil
fsbackup
.Menghapus cadangan
gcloud functions add-iam-policy-binding deletefsbackup \ --member serviceAccount:$SCHEDULER_CLIENT_SA \ --role roles/cloudfunctions.invoker
Perintah akan muncul yang menunjukkan bahwa peran
roles/run.invoker
harus diberikan di layanan Cloud Run yang mendasarinya dan bahwa Anda dapat menjalankan perintahgcloud functions add-invoker-policy-binding
untuk menerapkannya. Saat diminta untuk memberikan respons, masukkanY
.Sekarang, hanya akun layanan klien Cloud Scheduler yang dapat memanggil
deletefsbackup
.
Membuat tugas Cloud Scheduler yang memicu fungsi sesuai jadwal yang ditentukan
Membuat cadangan
Dalam contoh untuk tutorial ini, jika 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://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 berjalan menggunakan format unix-cron. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal tugas cron.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 segera menjalankannya:gcloud scheduler jobs run fsbackupschedule
Tugas
fsbackupschedule
akan langsung memanggil fungsifsbackup
setelah Anda mengeksekusi perintah, lalu memanggilnya lagi setiap hari kerja pukul 22.00 hingga tugas dijeda.Periksa log untuk fungsi
fsbackup
guna melihat apakah fungsi tersebut dijalankan dengan benar dan menampilkanstatus 200
.Untuk melihat log 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 pencadangan 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 tutorial ini, jika 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 berjalan menggunakan format unix-cron. Untuk mengetahui detailnya, lihat Mengonfigurasi jadwal tugas cron.Operasi
delete
cadangan yang terkait dengan instance sumber yang sama harus dilakukan satu per satu. Untuk mengetahui informasi selengkapnya, lihat Pencadangan.Mulai tugas Cloud Scheduler yang dibuat pada langkah sebelumnya. Dalam contoh, kita menggunakan perintah
scheduler jobs runs
untuk segera menjalankannya:gcloud scheduler jobs run deletefsbackupschedule
Tugas
deletefsbackupschedule
akan langsung memanggil fungsideletefsbackup
setelah Anda mengeksekusi perintah, lalu memanggilnya lagi setiap hari kerja pukul 22.00 hingga tugas dijeda.Periksa log untuk fungsi
deletefsbackup
guna melihat apakah fungsi tersebut dijalankan dengan benar dan menampilkanstatus 200
.Untuk melihat log 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 pencadangan 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 penjadwalan pencadangan membuat Anda berisiko kehabisan kuota pencadangan, sebaiknya siapkan pemberitahuan kuota pencadangan rendah. Dengan demikian, 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 selanjutnya
- Pelajari snapshot Filestore.
- Pelajari lebih lanjut pencadangan Filestore.
- Pelajari cara Menjadwalkan snapshot Filestore Enterprise.