Men-deploy otomatisasi pencadangan BigQuery yang skalabel

Last reviewed 2024-09-17 UTC

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:

Arsitektur untuk solusi 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 menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

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.

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

  2. 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.

  3. Instal Maven:

    1. Download Maven.
    2. Di Cloud Shell, tambahkan Maven ke PATH:

      export PATH=/DOWNLOADED_MAVEN_DIR/bin:$PATH
      
  4. Di Cloud Shell, buat clone repositori GitHub:

    git clone https://github.com/GoogleCloudPlatform/bq-backup-manager.git
    
  5. 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.
  6. 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
  7. Siapkan bucket status Terraform:

    gsutil mb -p $PROJECT_ID -l $COMPUTE_REGION -b on $BUCKET
    
  8. Siapkan akun layanan Terraform:

    ./scripts/prepare_terraform_service_account.sh
    
  9. 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.

  1. 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 file example-variables sebagai referensi.

  2. 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.

  3. 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.

  4. 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.

  5. 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 ke true, 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. Gunakan true 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 kolom projects_include_list, datasets_include_list, dan tables_include_list.
    • PROJECTS_INCLUDED: daftar nama project (misalnya, "project1", "project2"). Jika ditetapkan, solusi akan mencadangkan tabel di project yang ditentukan, dan mengabaikan setelan kolom datasets_include_list dan tables_include_list. Setelan ini diabaikan jika Anda menetapkan kolom folders_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 kolom folders_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 kolom tables_include_list. Setelan ini diabaikan jika Anda menetapkan kolom folders_include_list atau projects_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 kolom folders_include_list atau projects_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 kolom folders_include_list, projects_include_list, atau datasets_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 kolom folders_include_list, projects_include_list, atau datasets_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.

  1. 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), atau Both. 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 dan gcs_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.
  2. Jika Anda menentukan BigQuery Snapshot atau Both sebagai backup_method, tambahkan kolom berikut setelah kolom umum, dalam variabel default_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 untuk backup_storage_project.
  3. Jika Anda menentukan GCS Snapshot (untuk menggunakan metode ekspor ke Cloud Storage) atau Both sebagai backup_method, tambahkan kolom berikut ke variabel default_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, dan PARQUET_GZIP.
    • AVRO_TYPE: nilai boolean. Jika ditetapkan ke false, jenis BigQuery akan diekspor sebagai string. Jika disetel ke true, jenis akan diekspor sebagai jenis logika Avro yang sesuai. Kolom ini wajib diisi jika gcs_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 atau tab untuk menentukan pemisah tab. Kolom ini diperlukan jika gcs_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 jika gcs_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 Avro LONG)
    DATE date (menambahkan anotasi pada Avro INT)
    TIME timestamp-micro (menambahkan anotasi pada Avro LONG)
    DATETIME STRING (jenis logika bernama kustom datetime)
  4. 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 di default_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.

Menjalankan skrip deployment

  1. 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
    
  2. 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

  1. 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.

  2. 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
    
  3. 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.
    • 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

    • 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.

  4. 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
  5. 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

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus 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

Kontributor

Penulis: Karim Wadie | Cloud Engineer Strategis

Kontributor lainnya: