Dokumen ini menjelaskan cara men-deploy Otomatisasi pencadangan BigQuery yang skalabel.
Dokumen ini ditujukan untuk arsitek, engineer, dan petugas tata kelola data cloud yang ingin menentukan dan mengotomatiskan kebijakan data di organisasi mereka. Anda akan terbantu jika Anda memiliki pengalaman dengan Terraform.
Arsitektur
Diagram berikut menunjukkan arsitektur pencadangan otomatis:
Cloud Scheduler memicu operasi. Layanan dispatcher, menggunakan BigQuery API, mencantumkan tabel dalam cakupan. Melalui pesan Pub/Sub, layanan dispatcher mengirimkan satu permintaan untuk setiap tabel ke layanan konfigurator. Layanan konfigurator menentukan kebijakan pencadangan untuk tabel, lalu mengirimkan satu permintaan untuk setiap tabel ke layanan Cloud Run yang relevan. Layanan Cloud Run kemudian mengirimkan permintaan ke BigQuery API dan menjalankan operasi pencadangan. Pub/Sub memicu layanan tag, yang mencatat hasil ke dalam log dan memperbarui status pencadangan di lapisan metadata Cloud Storage.
Untuk mengetahui detail tentang arsitekturnya, lihat artikel Otomatisasi pencadangan BigQuery yang skalabel.
Tujuan
- Mem-build layanan Cloud Run.
- Konfigurasikan variabel Terraform.
- Jalankan skrip Terraform dan deployment manual.
- Jalankan solusi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
- BigQuery
- Pub/Sub
- Cloud Logging
- Cloud Run
- Cloud Storage
- Cloud Scheduler
- Firestore in Datastore mode (Datastore)
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Jika men-deploy ulang solusi, Anda dapat melewati bagian ini (misalnya, setelah commit baru).
Di bagian ini, Anda akan membuat resource satu kali.
In the Google Cloud console, activate Cloud Shell.
Jika Anda ingin membuat project Google Cloud baru untuk digunakan sebagai project host deployment, gunakan perintah
gcloud projects create
:gcloud projects create PROJECT_ID
Ganti PROJECT_ID dengan ID project yang ingin Anda buat.
Instal Maven:
- Download Maven.
Di Cloud Shell, tambahkan Maven ke
PATH
:export PATH=/DOWNLOADED_MAVEN_DIR/bin:$PATH
Di Cloud Shell, buat clone repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/bq-backup-manager.git
Tetapkan dan ekspor variabel lingkungan berikut:
export PROJECT_ID=PROJECT_ID export TF_SA=bq-backup-mgr-terraform export COMPUTE_REGION=COMPUTE_REGION export DATA_REGION=DATA_REGION export BUCKET_NAME=${PROJECT_ID}-bq-backup-mgr export BUCKET=gs://${BUCKET_NAME} export DOCKER_REPO_NAME=docker-repo export CONFIG=bq-backup-manager export ACCOUNT=ACCOUNT_EMAIL gcloud config configurations create $CONFIG gcloud config set project $PROJECT_ID gcloud config set account $ACCOUNT gcloud config set compute/region $COMPUTE_REGION gcloud auth login gcloud auth application-default login
Ganti kode berikut:
- PROJECT_ID: ID project host Google Cloud tempat Anda ingin men-deploy solusi.
- COMPUTE_REGION: Region Google Cloud tempat Anda ingin men-deploy resource komputasi seperti Cloud Run dan Identity and Access Management (IAM).
- DATA_REGION: region Google Cloud tempat Anda ingin men-deploy resource data (seperti bucket dan set data).
- ACCOUNT_EMAIL: alamat email akun pengguna.
Aktifkan API:
./scripts/enable_gcp_apis.sh
Skrip ini mengaktifkan API berikut:
- Cloud Resource Manager API
- IAM API
- Data Catalog API
- Artifact Registry API
- BigQuery API
- Pub/Sub API
- Cloud Storage API
- Cloud Run Admin API
- Cloud Build API
- Service Usage API
- App Engine Admin API
- API Akses VPC Serverless
- Cloud DNS API
Siapkan bucket status Terraform:
gsutil mb -p $PROJECT_ID -l $COMPUTE_REGION -b on $BUCKET
Siapkan akun layanan Terraform:
./scripts/prepare_terraform_service_account.sh
Untuk memublikasikan image yang digunakan solusi ini, siapkan repositori Docker:
gcloud artifacts repositories create $DOCKER_REPO_NAME --repository-format=docker \ --location=$COMPUTE_REGION \ --description="Docker repository for backups"
Men-deploy infrastruktur
Pastikan Anda telah menyelesaikan Sebelum memulai setidaknya sekali.
Di bagian ini, ikuti langkah-langkah untuk men-deploy atau men-deploy ulang codebase terbaru ke lingkungan Google Cloud.
Mengaktifkan konfigurasi gcloud CLI
Di Cloud Shell, aktifkan dan autentikasi konfigurasi gcloud CLI:
gcloud config configurations activate $CONFIG gcloud auth login gcloud auth application-default login
Mem-build image layanan Cloud Run
Di Cloud Shell, build dan deploy image docker untuk digunakan oleh layanan Cloud Run:
export DISPATCHER_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-dispatcher-service:latest export CONFIGURATOR_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-configurator-service:latest export SNAPSHOTER_BQ_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-snapshoter-bq-service:latest export SNAPSHOTER_GCS_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-snapshoter-gcs-service:latest export TAGGER_IMAGE=${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-tagger-service:latest ./scripts/deploy_services.sh
Mengonfigurasi variabel Terraform
Deployment ini menggunakan Terraform untuk konfigurasi dan skrip deployment.
Di Cloud Shell, buat file TFVARS Terraform baru tempat Anda dapat mengganti variabel di bagian ini:
export VARS=FILENAME .tfvars
Ganti FILENAME dengan nama file variabel yang Anda buat (misalnya,
my-variables
). Anda dapat menggunakan fileexample-variables
sebagai referensi.Di file TFVARS, konfigurasikan variabel project:
project = "PROJECT_ID" compute_region = "COMPUTE_REGION" data_region = "DATA_REGION"
Anda dapat menggunakan nilai default yang ditentukan dalam file variables.tf atau mengubah nilainya.
Konfigurasikan akun layanan Terraform, yang Anda buat dan siapkan sebelumnya di bagian Sebelum memulai:
terraform_service_account = "bq-backup-mgr-terraform@PROJECT_ID."
Pastikan Anda menggunakan alamat email lengkap akun yang Anda buat.
Konfigurasikan layanan Cloud Run untuk menggunakan image container yang Anda build dan deploy sebelumnya:
dispatcher_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-dispatcher-service:latest" configurator_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-configurator-service:latest" snapshoter_bq_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-snapshoter-bq-service:latest" snapshoter_gcs_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-snapshoter-gcs-service:latest" tagger_service_image = "${COMPUTE_REGION}-docker.pkg.dev/${PROJECT_ID}/${DOCKER_REPO_NAME}/bqsm-tagger-service:latest"
Skrip ini memerintahkan Terraform untuk menggunakan image yang dipublikasikan ini di layanan Cloud Run, yang akan dibuat Terraform nanti.
Terraform hanya menautkan layanan Cloud Run ke image yang ada. Langkah ini tidak mem-build image dari codebase, karena telah selesai di langkah sebelumnya.
Dalam variabel
schedulers
, tentukan minimal satu penjadwal. Penjadwal secara berkala mencantumkan dan memeriksa tabel untuk pencadangan yang diperlukan, berdasarkan jadwal cron pencadangan tingkat tabel.{ name = "SCHEDULER_NAME" cron = "SCHEDULER_CRON" payload = { is_force_run = FORCE_RUN is_dry_run = DRY_RUN folders_include_list = [FOLDERS_INCLUDED] projects_include_list = [PROJECTS_INCLUDED] projects_exclude_list = [PROJECTS_EXCLUDED] datasets_include_list = [DATASETS_INCLUDED] datasets_exclude_list = [DATASETS_EXCLUDED] tables_include_list = [TABLES_INCLUDED] tables_exclude_list = [TABLES_EXCLUDED] } }
Ganti kode berikut:
- SCHEDULER_NAME: nama tampilan Cloud Scheduler.
- SCHEDULER_CRON: frekuensi penjadwal memeriksa
apakah pencadangan sudah jatuh tempo untuk tabel dalam cakupan, berdasarkan jadwal
pencadangan masing-masing. Ini dapat berupa string apa pun yang kompatibel dengan unix-cron. Misalnya,
0 * * * *
adalah frekuensi per jam. - FORCE_RUN: nilai boolean. Tetapkan nilai ke
false
jika Anda ingin penjadwal menggunakan jadwal cron tabel. Jika ditetapkan ketrue
, semua tabel dalam cakupan akan dicadangkan, terlepas dari setelan cron-nya. - DRY_RUN: nilai boolean. Jika ditetapkan ke
true
, tidak ada operasi cadangan yang sebenarnya. Hanya pesan log yang dibuat. Gunakantrue
saat Anda ingin menguji dan men-debug solusi tanpa menimbulkan biaya pencadangan. - FOLDERS_INCLUDED: daftar ID
numerik untuk folder yang berisi data BigQuery
(misalnya,
1234, 456
). Jika ditetapkan, solusi akan mencadangkan tabel di folder yang ditentukan, dan mengabaikan setelan kolomprojects_include_list
,datasets_include_list
, dantables_include_list
. - PROJECTS_INCLUDED: daftar nama project (misalnya,
"project1", "project2"
). Jika ditetapkan, solusi akan mencadangkan tabel di project yang ditentukan, dan mengabaikan setelan kolomdatasets_include_list
dantables_include_list
. Setelan ini diabaikan jika Anda menetapkan kolomfolders_include_list
. - PROJECTS_EXCLUDED: daftar nama project atau ekspresi reguler
(misalnya,
"project1", "regex:^test_"
). Jika ditetapkan, solusi tidak akan membuat cadangan tabel dalam project yang ditentukan. Anda dapat menggunakan setelan ini bersama dengan kolomfolders_include_list
. - DATASETS_INCLUDED: daftar set data (misalnya,
"project1.dataset1", "project1.dataset2"
). Jika ditetapkan, solusi akan mencadangkan tabel dalam set data yang ditentukan, dan mengabaikan setelan kolomtables_include_list
. Setelan ini diabaikan jika Anda menetapkan kolomfolders_include_list
atauprojects_include_list
. - DATASETS_EXCLUDED: daftar set data atau ekspresi reguler (misalnya,
"project1.dataset1", "regex:.*\\_landing$"
). Jika ditetapkan, solusi tidak akan membuat cadangan tabel dalam set data yang ditentukan. Anda dapat menggunakan setelan ini bersama dengan kolomfolders_include_list
atauprojects_include_list
. - TABLES_INCLUDED: daftar tabel (misalnya,
"project1.dataset1.table 1", "project1.dataset2.table2"
). Jika ditetapkan, solusi akan mencadangkan tabel yang ditentukan. Setelan ini diabaikan jika Anda menetapkan kolomfolders_include_list
,projects_include_list
, ataudatasets_include_list
. - TABLES_EXCLUDED: daftar tabel atau ekspresi reguler (misalnya,
"project1.dataset1.table 1", "regex:.*\_test"
). Jika ditetapkan, solusi ini tidak akan mencadangkan tabel yang ditentukan. Anda dapat menggunakan setelan ini bersama dengan kolomfolders_include_list
,projects_include_list
, ataudatasets_include_list
.
Semua daftar pengecualian menerima ekspresi reguler dalam bentuk
regex:REGULAR_EXPRESSION
.Jika nama entri yang sepenuhnya memenuhi syarat (misalnya,
"project.dataset.table"
) cocok dengan ekspresi reguler yang diberikan, nama tersebut akan dikecualikan dari cakupan pencadangan.Berikut adalah beberapa kasus penggunaan umum:
- Kecualikan semua nama set data yang diakhiri dengan
_landing
:datasets_exclude_list = ["regex:.*\\_landing$"]
- Kecualikan semua tabel yang diakhiri dengan
_test
,_tst
,_bkp
, atau_copy
:tables_exclude_list = ["regex:.*\_(test|tst|bkp|copy)"]
Menentukan kebijakan penggantian
Pada setiap operasi, solusi perlu menentukan kebijakan pencadangan setiap tabel dalam cakupan. Untuk mengetahui informasi selengkapnya tentang jenis kebijakan, lihat Kebijakan pencadangan. Bagian ini menunjukkan cara menentukan kebijakan penggantian.
Kebijakan penggantian ditentukan dengan variabel default_policy
dan kumpulan pengecualian atau penggantian di berbagai tingkat (folder, project, set data, dan tabel). Pendekatan ini memberikan fleksibilitas terperinci tanpa memerlukan
entri untuk setiap tabel.
Ada kumpulan kolom kebijakan tambahan, bergantung pada metode pencadangan yang Anda pilih untuk digunakan: snapshot BigQuery, ekspor ke Cloud Storage, atau keduanya.
Dalam file TFVARS, untuk variabel
default_policy
, tetapkan kolom umum berikut untuk kebijakan default:fallback_policy = { "default_policy" : { "backup_cron" : "BACKUP_CRON" "backup_method" : "BACKUP_METHOD", "backup_time_travel_offset_days" : "OFFSET_DAYS", "backup_storage_project" : "BACKUP_STORAGE_PROJECT", "backup_operation_project" : "BACKUP_OPERATIONS_PROJECT",
Ganti kode berikut:
- BACKUP_CRON: ekspresi cron untuk menetapkan frekuensi
pencadangan tabel (misalnya, untuk pencadangan setiap 6 jam, tentukan
0 0 */6 * * *
). Ini harus berupa ekspresi cron yang kompatibel dengan Spring-Framework. - BACKUP_METHOD: metode, yang Anda tentukan sebagai
BigQuery Snapshot
,GCS Snapshot
(untuk menggunakan metode ekspor ke Cloud Storage), atauBoth
. Anda harus memberikan kolom yang diperlukan untuk setiap metode pencadangan yang dipilih, seperti yang ditunjukkan nanti. - OFFSET_DAYS: jumlah hari sebelumnya yang menentukan titik waktu untuk mencadangkan tabel. Nilai dapat berupa angka antara 0 dan 7.
- BACKUP_STORAGE_PROJECT: ID project tempat semua
operasi snapshot dan ekspor disimpan. Ini adalah project yang sama tempat
bq_snapshot_storage_dataset
dangcs_snapshot_storage_location
berada. Deployment kecil dapat menggunakan project host, tetapi deployment skala besar harus menggunakan project terpisah. - BACKUP_OPERATIONS_PROJECT: setelan opsional, tempat Anda menentukan project ID tempat semua operasi snapshot dan ekspor dijalankan.
Kuota dan batas tugas snapshot dan ekspor berlaku untuk project ini. Nilai ini dapat sama dengan
backup_storage_project
. Jika tidak ditetapkan, solusi akan menggunakan project tabel sumber.
- BACKUP_CRON: ekspresi cron untuk menetapkan frekuensi
pencadangan tabel (misalnya, untuk pencadangan setiap 6 jam, tentukan
Jika Anda menentukan
BigQuery Snapshot
atauBoth
sebagaibackup_method
, tambahkan kolom berikut setelah kolom umum, dalam variabeldefault_policy
:"bq_snapshot_expiration_days" : "SNAPSHOT_EXPIRATION", "bq_snapshot_storage_dataset" : "DATASET_NAME",
Ganti kode berikut:
- SNAPSHOT_EXPIRATION: jumlah hari untuk menyimpan setiap
snapshot (misalnya,
15
). - DATASET_NAME: nama set data tempat menyimpan snapshot
(misalnya,
backups
). Set data harus sudah ada dalam project yang ditentukan untukbackup_storage_project
.
- SNAPSHOT_EXPIRATION: jumlah hari untuk menyimpan setiap
snapshot (misalnya,
Jika Anda menentukan
GCS Snapshot
(untuk menggunakan metode ekspor ke Cloud Storage) atauBoth
sebagaibackup_method
, tambahkan kolom berikut ke variabeldefault_policy
:"gcs_snapshot_storage_location" : "STORAGE_BUCKET", "gcs_snapshot_format" : "FILE_FORMAT", "gcs_avro_use_logical_types" : AVRO_TYPE, "gcs_csv_delimiter" : "CSV_DELIMITER", "gcs_csv_export_header" : CSV_EXPORT_HEADER
Ganti kode berikut:
- STORAGE_BUCKET: bucket Cloud Storage tempat
menyimpan data yang diekspor, dalam format
gs://bucket/path/
. Contohnya,gs://bucket1/backups/
. - FILE_FORMAT: format dan kompresi file yang digunakan untuk mengekspor
tabel BigQuery ke Cloud Storage. Nilai yang tersedia
adalah
CSV
,CSV_GZIP
,JSON
,JSON_GZIP
,AVRO
,AVRO_DEFLATE
,AVRO_SNAPPY
,PARQUET
,PARQUET_SNAPPY
, danPARQUET_GZIP
. - AVRO_TYPE: nilai boolean. Jika ditetapkan ke
false
, jenis BigQuery akan diekspor sebagai string. Jika disetel ketrue
, jenis akan diekspor sebagai jenis logika Avro yang sesuai. Kolom ini wajib diisi jikagcs_snapshot_format
adalah format jenis Avro. - CSV_DELIMITER: pemisah yang digunakan untuk file CSV yang diekspor,
dan nilainya dapat berupa karakter byte tunggal ISO-8859-1. Anda dapat menggunakan
\t
atautab
untuk menentukan pemisah tab. Kolom ini diperlukan jikagcs_snapshot_format
adalah format jenis CSV. - CSV_EXPORT_HEADER: nilai boolean. Jika ditetapkan ke
true
, header kolom akan diekspor ke file CSV. Kolom ini diperlukan jikagcs_snapshot_format
adalah format jenis CSV apa pun.
Untuk mengetahui detail dan pemetaan jenis Avro, lihat tabel berikut:
Jenis BigQuery Jenis Logika Avro TIMESTAMP
timestamp-micros
(menambahkan anotasi pada AvroLONG
)DATE
date
(menambahkan anotasi pada AvroINT
)TIME
timestamp-micro
(menambahkan anotasi pada AvroLONG
)DATETIME
STRING
(jenis logika bernama kustomdatetime
)- STORAGE_BUCKET: bucket Cloud Storage tempat
menyimpan data yang diekspor, dalam format
Tambahkan variabel penggantian untuk folder, project, set data, dan tabel tertentu:
}, "folder_overrides" : { "FOLDER_NUMBER" : { }, }, "project_overrides" : { "PROJECT_NAME" : { } }, "dataset_overrides" : { "PROJECT_NAME.DATASET_NAME" : { } }, "table_overrides" : { "PROJECT_NAME.DATASET_NAME.TABLE_NAME" : { } } }
Ganti kode berikut:
- FOLDER_NUMBER: menentukan folder yang ingin Anda tetapkan kolom penggantian.
- PROJECT_NAME: menentukan project saat Anda menetapkan kolom penggantian untuk project, set data, atau tabel tertentu.
- DATASET_NAME: menentukan set data saat Anda menetapkan kolom penggantian untuk set data atau tabel tertentu.
- TABLE_NAME: menentukan tabel yang ingin Anda tetapkan kolom penggantiannya.
Untuk setiap entri penggantian, seperti project tertentu dalam variabel
project_overrides
, tambahkan kolom umum dan kolom yang diperlukan untuk metode pencadangan yang Anda tentukan sebelumnya didefault_policy
.Jika Anda tidak ingin menetapkan penggantian untuk tingkat tertentu, tetapkan variabel tersebut ke peta kosong (misalnya,
project_overrides : {}
).Dalam contoh berikut, kolom penggantian ditetapkan untuk tabel tertentu yang menggunakan metode snapshot BigQuery:
}, "project_overrides" : {}, "table_overrides" : { "example_project1.dataset1.table1" : { "backup_cron" : "0 0 */5 * * *", # every 5 hours each day "backup_method" : "BigQuery Snapshot", "backup_time_travel_offset_days" : "7", "backup_storage_project" : "project name", "backup_operation_project" : "project name", # bq settings "bq_snapshot_expiration_days" : "14", "bq_snapshot_storage_dataset" : "backups2" }, } }
Untuk mengetahui contoh lengkap kebijakan penggantian, lihat file example-variables
.
Mengonfigurasi project operasi pencadangan tambahan
Jika Anda ingin menentukan project pencadangan tambahan, seperti yang ditentukan dalam konfigurasi eksternal (kebijakan pencadangan tingkat tabel) atau project sumber tabel, konfigurasikan variabel berikut:
additional_backup_operation_projects = [ADDITIONAL_BACKUPS]
Ganti ADDITIONAL_BACKUPS dengan daftar nama project yang dipisahkan koma (misalnya,
"project1", "project2"
). Jika hanya menggunakan kebijakan cadangan penggantian tanpa kebijakan eksternal tingkat tabel, Anda dapat menetapkan nilai ke daftar kosong.Jika Anda tidak menambahkan kolom ini, setiap project yang ditentukan di kolom
backup_operation_project
opsional akan otomatis disertakan sebagai project cadangan.
Mengonfigurasi izin akun layanan Terraform
Pada langkah sebelumnya, Anda telah mengonfigurasi project cadangan tempat operasi pencadangan dijalankan. Terraform perlu men-deploy resource ke project cadangan tersebut.
Akun layanan yang digunakan Terraform harus memiliki izin yang diperlukan untuk project pencadangan yang ditentukan ini.
Di Cloud Shell, berikan izin akun layanan untuk semua project tempat operasi pencadangan dijalankan:
./scripts/prepare_backup_operation_projects_for_terraform.sh BACKUP_OPERATIONS_PROJECT DATA_PROJECTS ADDITIONAL_BACKUPS
Ganti kode berikut:
- BACKUP_OPERATIONS_PROJECT: project apa pun yang ditentukan dalam
kolom
backup_operation_project
di salah satu kebijakan penggantian dan kebijakan tingkat tabel. - DATA_PROJECTS: jika tidak ada kolom
backup_operation_project
yang ditentukan dalam kebijakan penggantian atau tingkat tabel, sertakan project untuk tabel sumber tersebut. - ADDITIONAL_BACKUPS: project apa pun yang ditentukan dalam variabel Terraform
additional_backup_operation_projects
.
- BACKUP_OPERATIONS_PROJECT: project apa pun yang ditentukan dalam
kolom
Menjalankan skrip deployment
Di Cloud Shell, jalankan skrip deployment Terraform:
cd terraform terraform init \ -backend-config="bucket=${BUCKET_NAME}" \ -backend-config="prefix=terraform-state" \ -backend-config="impersonate_service_account=$TF_SA@$PROJECT_ID." terraform plan -var-file=$VARS terraform apply -var-file=$VARS
Tambahkan kebijakan time to live (TTL) untuk Firestore:
gcloud firestore fields ttls update expires_at \ --collection-group=project_folder_cache \ --enable-ttl \ --async \ --project=$PROJECT_ID
Solusi ini menggunakan Datastore sebagai cache dalam beberapa situasi. Untuk menghemat biaya dan meningkatkan performa pencarian, kebijakan TTL memungkinkan Firestore otomatis menghapus entri yang sudah tidak berlaku.
Menyiapkan akses ke sumber dan tujuan
Di Cloud Shell, tetapkan variabel berikut untuk akun layanan yang digunakan oleh solusi:
export SA_DISPATCHER_EMAIL=dispatcher@${PROJECT_ID}. export SA_CONFIGURATOR_EMAIL=configurator@${PROJECT_ID}. export SA_SNAPSHOTER_BQ_EMAIL=snapshoter-bq@${PROJECT_ID}. export SA_SNAPSHOTER_GCS_EMAIL=snapshoter-gcs@${PROJECT_ID}. export SA_TAGGER_EMAIL=tagger@${PROJECT_ID}.
Jika Anda telah mengubah nama default di Terraform, perbarui email akun layanan.
Jika Anda telah menetapkan kolom
folders_include_list
, dan ingin menetapkan cakupan pemindaian BigQuery untuk menyertakan folder tertentu, berikan izin yang diperlukan di tingkat folder:./scripts/prepare_data_folders.sh FOLDERS_INCLUDED
Agar aplikasi dapat menjalankan tugas yang diperlukan di project yang berbeda, berikan izin yang diperlukan di setiap project ini:
./scripts/prepare_data_projects.sh DATA_PROJECTS ./scripts/prepare_backup_storage_projects.sh BACKUP_STORAGE_PROJECT ./scripts/prepare_backup_operation_projects.sh BACKUP_OPERATIONS_PROJECT
Ganti kode berikut:
DATA_PROJECTS: project data (atau project sumber) yang berisi tabel sumber yang ingin Anda cadangkan (misalnya,
project1 project2
). Sertakan project berikut:- Project yang ditentukan dalam daftar penyertaan di variabel Terraform
schedulers
. - Jika Anda ingin mencadangkan tabel di project host, sertakan project host.
- Project yang ditentukan dalam daftar penyertaan di variabel Terraform
BACKUP_STORAGE_PROJECT: project penyimpanan cadangan (atau project tujuan) tempat solusi menyimpan cadangan (misalnya,
project1 project2
). Anda harus menyertakan project yang ditentukan dalam kolom berikut:- Kolom
backup_storage_project
di semua kebijakan penggantian. - Kolom
backup_storage_project
di semua kebijakan tingkat tabel.
Menyertakan project penyimpanan cadangan yang digunakan di beberapa kolom atau yang digunakan sebagai project sumber dan tujuan
- Kolom
BACKUP_OPERATIONS_PROJECT: project operasi data tempat solusi menjalankan operasi pencadangan (misalnya,
project1 project2
). Anda harus menyertakan project yang ditentukan di kolom berikut:- Kolom
backup_operation_project
di semua kebijakan penggantian. - Semua daftar penyertaan dalam cakupan pemindaian BigQuery (jika Anda tidak menetapkan kolom
backup_operation_project
). - Kolom
backup_operation_project
di semua kebijakan tingkat tabel.
Sertakan project operasi pencadangan yang digunakan di beberapa kolom atau yang digunakan sebagai project sumber dan tujuan.
- Kolom
Untuk tabel yang menggunakan kontrol akses tingkat kolom, identifikasi semua taksonomi tag kebijakan yang digunakan oleh tabel Anda (jika ada), dan berikan akses ke data tabel kepada akun layanan solusi:
TAXONOMY="projects/TAXONOMY_PROJECT/locations/TAXONOMY_LOCATION/taxonomies/TAXONOMY_ID" gcloud data-catalog taxonomies add-iam-policy-binding \ $TAXONOMY \ --member="serviceAccount:${SA_SNAPSHOTER_BQ_EMAIL}" \ --role='roles/datacatalog.categoryFineGrainedReader' gcloud data-catalog taxonomies add-iam-policy-binding \ $TAXONOMY \ --member="serviceAccount:${SA_SNAPSHOTER_GCS_EMAIL}" \ --role='roles/datacatalog.categoryFineGrainedReader'
Ganti kode berikut:
- TAXONOMY_PROJECT: project ID dalam taksonomi tag kebijakan
- TAXONOMY_LOCATION: lokasi yang ditentukan dalam taksonomi tag kebijakan
- TAXONOMY_ID: ID taksonomi taksonomi tag kebijakan
Ulangi langkah sebelumnya untuk setiap taksonomi tag kebijakan.
Menjalankan solusi
Setelah men-deploy solusi, gunakan bagian berikut untuk menjalankan dan mengelola solusi tersebut.
Menetapkan kebijakan pencadangan tingkat tabel
Di Cloud Shell, buat kebijakan tingkat tabel dengan kolom yang diperlukan, lalu simpan kebijakan di bucket Cloud Storage untuk kebijakan:
# Use the default backup policies bucket unless overwritten in the .tfvars export POLICIES_BUCKET=${PROJECT_ID}-bq-backup-manager-policies # set target table info export TABLE_PROJECT='TABLE_PROJECT' export TABLE_DATASET='TABLE_DATASET' export TABLE='TABLE_NAME' # Config Source must be 'MANUAL' when assigned this way export BACKUP_POLICY="{ 'config_source' : 'MANUAL', 'backup_cron' : 'BACKUP_CRON', 'backup_method' : 'BACKUP_METHOD', 'backup_time_travel_offset_days' : 'OFFSET_DAYS', 'backup_storage_project' : 'BACKUP_STORAGE_PROJECT', 'backup_operation_project' : 'BACKUP_OPERATION_PROJECT', 'gcs_snapshot_storage_location' : 'STORAGE_BUCKET', 'gcs_snapshot_format' : 'FILE_FORMAT', 'gcs_avro_use_logical_types' : 'AVRO_TYPE', 'bq_snapshot_storage_dataset' : 'DATASET_NAME', 'bq_snapshot_expiration_days' : 'SNAPSHOT_EXPIRATION' }" # File name MUST BE backup_policy.json echo $BACKUP_POLICY >> backup_policy.json gsutil cp backup_policy.json gs://${POLICIES_BUCKET}/policy/project=${TABLE_PROJECT}/dataset=${TABLE_DATASET}/table=${TABLE}/backup_policy.json
Ganti kode berikut:
- TABLE_PROJECT: project tempat tabel berada
- TABLE_DATASET: set data tabel
- TABLE_NAME: nama tabel
Memicu operasi pencadangan
Tugas Cloud Scheduler yang Anda konfigurasikan sebelumnya berjalan secara otomatis berdasarkan ekspresi cron-nya.
Anda juga dapat menjalankan tugas secara manual di konsol Google Cloud. Untuk informasi selengkapnya, lihat Menjalankan tugas.
Memantau dan melaporkan
Dengan memilih project host (PROJECT_ID), Anda dapat menjalankan kueri berikut di BigQuery Studio untuk mendapatkan laporan dan informasi.
Dapatkan statistik progres setiap operasi (termasuk operasi yang sedang berlangsung):
SELECT * FROM `bq_backup_manager.v_run_summary_counts`
Mendapatkan semua error fatal (error yang tidak dapat dicoba ulang) untuk satu operasi:
SELECT * FROM `bq_backup_manager.v_errors_non_retryable` WHERE run_id = 'RUN_ID'
Ganti RUN_ID dengan ID operasi.
Dapatkan semua operasi pada tabel dan informasi eksekusinya:
SELECT * FROM `bq_backup_manager.v_errors_non_retryable` WHERE tablespec = 'project.dataset.table'
Anda juga dapat menentukan versi
grouped
:SELECT * FROM `bq_backup_manager.v_audit_log_by_table_grouped`, UNNEST(runs) r WHERE r.run_has_retryable_error = FALSE
Untuk proses debug, Anda bisa mendapatkan informasi permintaan dan respons yang mendetail untuk setiap pemanggilan layanan:
SELECT jsonPayload.unified_target_table AS tablespec, jsonPayload.unified_run_id AS run_id, jsonPayload.unified_tracking_id AS tracking_id, CAST(jsonPayload.unified_is_successful AS BOOL) AS configurator_is_successful, jsonPayload.unified_error AS configurator_error, CAST(jsonPayload.unified_is_retryable_error AS BOOL) AS configurator_is_retryable_error, CAST(JSON_VALUE(jsonPayload.unified_input_json, '$.isForceRun') AS BOOL) AS is_force_run, CAST(JSON_VALUE(jsonPayload.unified_output_json, '$.isBackupTime') AS BOOL) AS is_backup_time, JSON_VALUE(jsonPayload.unified_output_json, '$.backupPolicy.method') AS backup_method, CAST(JSON_VALUE(jsonPayload.unified_input_json, '$.isDryRun') AS BOOL) AS is_dry_run, jsonPayload.unified_input_json AS request_json, jsonPayload.unified_output_json AS response_json FROM `bq_backup_manager.run_googleapis_com_stdout` WHERE jsonPayload.global_app_log = 'UNIFIED_LOG' -- 1= dispatcher, 2= configurator, 3=bq snapshoter, -3=gcs snapshoter and 4=tagger AND jsonPayload.unified_component = "2"
Dapatkan kebijakan cadangan yang ditambahkan atau ditetapkan secara manual oleh sistem berdasarkan penggantian:
SELECT * FROM `bq_backup_manager.ext_backup_policies`
Batasan
Untuk mengetahui informasi selengkapnya tentang batas dan kuota untuk setiap project yang ditentukan
di kolom backup_operation_project
, lihat
Batas.
Pembersihan
Agar tidak dikenai biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam deployment ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
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.
Menghapus resource baru
Sebagai alternatif untuk menghapus project, Anda dapat menghapus resource yang dibuat selama prosedur ini.
Di Cloud Shell, hapus resource Terraform:
terraform destroy -var-file="${VARS}"
Perintah ini menghapus hampir semua resource. Periksa untuk memastikan bahwa semua resource yang ingin Anda hapus telah dihapus.
Langkah selanjutnya
- Pelajari BigQuery lebih lanjut:
- Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.
Kontributor
Penulis: Karim Wadie | Cloud Engineer Strategis
Kontributor lainnya:
- Chris DeForeest | Site Reliability Engineer
- Eyal Ben Ivri | Cloud Solutions Architect
- Jason Davenport | Developer Advocate
- Jaliya Ekanayake | Engineering Manager
- Muhammad Zain | Cloud Engineer Strategis