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 eksekusi. Layanan dispatcher, menggunakan BigQuery API, mencantumkan tabel dalam cakupan. Melalui pesan Pub/Sub, layanan dispatcher mengirimkan satu permintaan untuk setiap tabel ke layanan konfigurasi. Layanan konfigurasi 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 pemberi tag, yang mencatat hasil dan memperbarui status pencadangan di lapisan metadata Cloud Storage.
Untuk mengetahui detail tentang arsitektur, lihat artikel Otomatisasi pencadangan BigQuery yang skalabel.
Tujuan
- Membangun layanan Cloud Run.
- Konfigurasi variabel Terraform.
- Jalankan skrip deployment manual dan Terraform.
- Jalankan solusi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang 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 sekali pakai.
In the Google Cloud console, activate Cloud Shell.
Jika Anda ingin membuat project Google Cloud baru untuk digunakan sebagai project host untuk 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 Google Cloud project host tempat Anda ingin men-deploy solusi.
- COMPUTE_REGION: Google Cloud region 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 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:
gcloud storage buckets create $BUCKET --project=$PROJECT_ID --location=$COMPUTE_REGION --uniform-bucket-level-access
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"
Di Cloud Shell, aktifkan dan autentikasi konfigurasi gcloud CLI:
gcloud config configurations activate $CONFIG gcloud auth login gcloud auth application-default login
Di Cloud Shell, bangun 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
Di Cloud Shell, buat file TFVARS Terraform baru yang dapat Anda gunakan untuk 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 nilai.
Konfigurasi akun layanan Terraform, yang Anda buat dan siapkan sebelumnya di Sebelum memulai:
terraform_service_account = "bq-backup-mgr-terraform@PROJECT_ID."
Pastikan Anda menggunakan alamat email lengkap akun yang Anda buat.
Konfigurasi layanan Cloud Run untuk menggunakan image container yang Anda bangun 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 menginstruksikan 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. Tindakan ini tidak membangun image dari codebase, karena telah diselesaikan pada langkah sebelumnya.
Dalam variabel
schedulers
, tentukan setidaknya 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 harus dilakukan untuk tabel dalam cakupan, berdasarkan jadwal pencadangan masing-masing tabel. Ini dapat berupa string 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 disetel ke
true
, tidak ada operasi pencadangan yang sebenarnya dilakukan. Hanya pesan log yang dibuat. Gunakantrue
jika 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 disetel, 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 disetel, 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 disetel, solusi tidak mencadangkan tabel di project yang ditentukan. Anda dapat menggunakan setelan ini bersama dengan kolomfolders_include_list
. - DATASETS_INCLUDED: daftar set data (misalnya,
"project1.dataset1", "project1.dataset2"
). Jika disetel, 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 disetel, solusi tidak mencadangkan 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 disetel, 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 disetel, solusi tidak 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 salah satu ekspresi reguler yang diberikan, entri tersebut akan dikecualikan dari cakupan pencadangan.Berikut adalah beberapa kasus penggunaan umum:
- Mengecualikan semua nama set data yang berakhiran
_landing
:datasets_exclude_list = ["regex:.*\\_landing$"]
- Mengecualikan semua tabel yang diakhiri dengan
_test
,_tst
,_bkp
, atau_copy
:tables_exclude_list = ["regex:.*\_(test|tst|bkp|copy)"]
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 wajib untuk setiap metode pencadangan yang dipilih, seperti yang ditunjukkan nanti. - OFFSET_DAYS: jumlah hari di masa lalu yang menentukan titik waktu yang akan digunakan untuk mencadangkan tabel. Nilai dapat berupa angka antara 0 dan 7.
- BACKUP_STORAGE_PROJECT: ID project tempat semua
operasi snapshot dan ekspor disimpan. Project ini sama dengan project 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 ID project tempat semua operasi snapshot dan ekspor dijalankan.
Kuota dan batas
tugas snapshot dan ekspor
berlaku untuk project ini. Nilai ini bisa sama dengan
backup_storage_project
. Jika tidak disetel, 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 untuk menyimpan snapshot
(misalnya,
backups
). Set data harus sudah ada di 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
data yang diekspor akan disimpan, dalam format
gs://bucket/path/
. Contohnya,gs://bucket1/backups/
. - FILE_FORMAT: format file dan kompresi 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 disetel ke
false
, jenis BigQuery akan diekspor sebagai string. Jika disetel ketrue
, jenis diekspor sebagai jenis logika Avro yang sesuai. Kolom ini wajib diisi jikagcs_snapshot_format
adalah format jenis Avro apa pun. - CSV_DELIMITER: pembatas 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 disetel 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
(menganotasi AvroLONG
)DATE
date
(menganotasi AvroINT
)TIME
timestamp-micro
(menganotasi AvroLONG
)DATETIME
STRING
(jenis logika bernama kustomdatetime
)- STORAGE_BUCKET: bucket Cloud Storage tempat
data yang diekspor akan disimpan, 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: tentukan folder yang ingin Anda tetapkan kolom penggantiannya.
- PROJECT_NAME: tentukan project saat Anda menetapkan kolom penggantian untuk project, set data, atau tabel tertentu.
- DATASET_NAME: tentukan set data saat Anda menetapkan kolom penggantian untuk set data atau tabel tertentu.
- TABLE_NAME: tentukan 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" }, } }
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 Anda hanya menggunakan kebijakan pencadangan penggantian tanpa kebijakan eksternal tingkat tabel, Anda dapat menyetel nilai ke daftar kosong.Jika Anda tidak menambahkan kolom ini, semua project yang ditentukan di kolom
backup_operation_project
opsional akan otomatis disertakan sebagai project cadangan.Di Cloud Shell, berikan izin akun layanan untuk semua project tempat operasi pencadangan berjalan:
./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
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 penelusuran, kebijakan TTL memungkinkan Firestore menghapus entri yang sudah habis masa berlakunya secara otomatis.
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
Untuk mengizinkan aplikasi 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.
Sertakan 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 akun layanan solusi ke data tabel:
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 dari taksonomi tag kebijakan
Ulangi langkah sebelumnya untuk setiap taksonomi tag kebijakan.
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 gcloud storage 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
Mendapatkan statistik progres setiap proses (termasuk proses yang sedang berjalan):
SELECT * FROM `bq_backup_manager.v_run_summary_counts`
Mendapatkan semua error fatal (error yang tidak dapat dicoba lagi) untuk satu eksekusi:
SELECT * FROM `bq_backup_manager.v_errors_non_retryable` WHERE run_id = 'RUN_ID'
Ganti RUN_ID dengan ID proses.
Mendapatkan 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 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 pencadangan yang ditambahkan atau ditetapkan secara manual oleh sistem berdasarkan penggantian:
SELECT * FROM `bq_backup_manager.ext_backup_policies`
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.
- Pelajari BigQuery lebih lanjut:
- Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.
- Chris DeForeest | Site Reliability Engineer
- Eyal Ben Ivri | Cloud Solutions Architect
- Jason Davenport | Developer Advocate
- Jaliya Ekanayake | Engineering Manager
- Muhammad Zain | Strategic Cloud Engineer
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
Membangun image layanan Cloud Run
Mengonfigurasi variabel Terraform
Deployment ini menggunakan Terraform untuk konfigurasi dan skrip deployment.
Menentukan kebijakan penggantian
Pada setiap proses, 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 ditetapkan dengan variabel default_policy
dan serangkaian pengecualian atau penggantian di tingkat yang berbeda (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 putuskan untuk digunakan: snapshot BigQuery, ekspor ke Cloud Storage, atau keduanya.
Untuk contoh lengkap kebijakan penggantian, lihat file example-variables
.
Mengonfigurasi project operasi pencadangan tambahan
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 cadangan yang ditentukan ini.
Jalankan skrip deployment
Menyiapkan akses ke sumber dan tujuan
Menjalankan solusi
Setelah men-deploy solusi, gunakan bagian berikut untuk menjalankan dan mengelola solusi.
Menetapkan kebijakan pencadangan tingkat tabel
Memicu operasi pencadangan
Tugas Cloud Scheduler yang Anda konfigurasi sebelumnya akan berjalan secara otomatis berdasarkan ekspresi cron-nya.
Anda juga dapat menjalankan tugas secara manual di konsol Google Cloud . Untuk mengetahui informasi selengkapnya, lihat Menjalankan tugas.
Memantau dan melaporkan
Dengan project host (PROJECT_ID) yang dipilih, Anda dapat menjalankan kueri berikut di BigQuery Studio untuk mendapatkan laporan dan informasi.
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
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus resource baru
Selain menghapus project, Anda dapat menghapus resource yang dibuat selama prosedur ini.
Langkah berikutnya
Kontributor
Penulis: Karim Wadie | Strategic Cloud Engineer
Kontributor lainnya: