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 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:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru 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 sekali pakai.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

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

  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 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.
  6. 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
  7. Siapkan bucket status Terraform:

    gcloud storage buckets create $BUCKET --project=$PROJECT_ID --location=$COMPUTE_REGION --uniform-bucket-level-access
    
  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"
    
  10. 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
      

    Membangun image layanan Cloud Run

    • 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
      

    Mengonfigurasi variabel Terraform

    Deployment ini menggunakan Terraform untuk konfigurasi dan skrip deployment.

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

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

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

    5. 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 ke true, 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. Gunakan true 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 kolom projects_include_list, datasets_include_list, dan tables_include_list.
      • PROJECTS_INCLUDED: daftar nama project (misalnya, "project1", "project2"). Jika disetel, 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 disetel, solusi tidak mencadangkan tabel di 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 disetel, 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 disetel, solusi tidak mencadangkan 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 disetel, 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 disetel, solusi tidak 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 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)"]

    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.

    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 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 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 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.
    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 untuk menyimpan snapshot (misalnya, backups). Set data harus sudah ada di 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 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, dan PARQUET_GZIP.
      • AVRO_TYPE: nilai boolean. Jika disetel ke false, jenis BigQuery akan diekspor sebagai string. Jika disetel ke true, jenis diekspor sebagai jenis logika Avro yang sesuai. Kolom ini wajib diisi jika gcs_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 atau tab untuk menentukan pemisah tab. Kolom ini diperlukan jika gcs_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 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 (menganotasi Avro LONG)
      DATE date (menganotasi Avro INT)
      TIME timestamp-micro (menganotasi 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: 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 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 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 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.

    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.

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

    Jalankan 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 penelusuran, kebijakan TTL memungkinkan Firestore menghapus entri yang sudah habis masa berlakunya secara otomatis.

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

      • 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 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
    5. Ulangi langkah sebelumnya untuk setiap taksonomi tag kebijakan.

    Menjalankan solusi

    Setelah men-deploy solusi, gunakan bagian berikut untuk menjalankan dan mengelola solusi.

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

    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.

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

    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.

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

    Kontributor

    Penulis: Karim Wadie | Strategic Cloud Engineer

    Kontributor lainnya: