部署可伸缩的 BigQuery 备份自动化功能

Last reviewed 2024-09-17 UTC

本文档介绍了如何部署可伸缩的 BigQuery 备份自动化功能

本文档面向希望在组织中定义和自动执行数据政策的云架构师、工程师和数据治理官。拥有 Terraform 经验会很有帮助。

架构

下图展示了自动备份架构:

自动化备份解决方案的架构。

Cloud Scheduler 会触发运行。调度程序服务使用 BigQuery API 列出范围内的表。调度程序服务通过 Pub/Sub 消息向配置器服务针对每个表提交一个请求。配置器服务会确定表的备份政策,然后针对每个表向相关 Cloud Run 服务提交一个请求。然后,Cloud Run 服务会向 BigQuery API 提交请求并运行备份操作。Pub/Sub 会触发标记器服务,该服务会记录结果并更新 Cloud Storage 元数据层中的备份状态。

如需详细了解该架构,请参阅可伸缩的 BigQuery 备份自动化

目标

  • 构建 Cloud Run 服务。
  • 配置 Terraform 变量。
  • 运行 Terraform 和手动部署脚本。
  • 运行解决方案。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

如果您要重新部署解决方案(例如,在有新的提交后),可以跳过此部分。

在本部分中,您将创建一次性资源。

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

    Activate Cloud Shell

  2. 如果您想创建一个新的 Google Cloud 项目作为部署的托管项目,请使用 gcloud projects create 命令:

       gcloud projects create PROJECT_ID
    

    PROJECT_ID 替换为您要创建的项目的 ID。

  3. 安装 Maven:

    1. 下载 Maven
    2. 在 Cloud Shell 中,将 Maven 添加到 PATH

      export PATH=/DOWNLOADED_MAVEN_DIR/bin:$PATH
      
  4. 在 Cloud Shell 中,克隆 GitHub 代码库:

    git clone https://github.com/GoogleCloudPlatform/bq-backup-manager.git
    
  5. 设置并导出以下环境变量:

    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
    

    替换以下内容:

    • PROJECT_ID:您要将解决方案部署到的 Google Cloud 托管项目的 ID。
    • COMPUTE_REGION:您要部署 Cloud Run 和 Identity and Access Management (IAM) 等计算资源的 Google Cloud 区域
    • DATA_REGION:您要将数据资源(例如存储分区和数据集)部署到的 Google Cloud 区域。
    • ACCOUNT_EMAIL:用户账号电子邮件地址。
  6. 启用 API:

    ./scripts/enable_gcp_apis.sh
    

    该脚本会启用以下 API:

    • 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
    • Serverless VPC Access API
    • Cloud DNS API
  7. 准备 Terraform 状态存储桶:

    gsutil mb -p $PROJECT_ID -l $COMPUTE_REGION -b on $BUCKET
    
  8. 准备 Terraform 服务账号:

    ./scripts/prepare_terraform_service_account.sh
    
  9. 如需发布此解决方案使用的映像,请准备一个 Docker 仓库:

    gcloud artifacts repositories create $DOCKER_REPO_NAME
      --repository-format=docker \
      --location=$COMPUTE_REGION \
      --description="Docker repository for backups"
    

部署基础架构

确保您至少已完成一次准备工作

在本部分中,请按照相应步骤将最新的代码库部署或重新部署到 Google Cloud 环境。

激活 gcloud CLI 配置

  • 在 Cloud Shell 中,激活并对 gcloud CLI 配置进行身份验证:

    gcloud config configurations activate $CONFIG
    
    gcloud auth login
    gcloud auth application-default login
    

构建 Cloud Run 服务映像

  • 在 Cloud Shell 中,构建和部署要供 Cloud Run 服务使用的 Docker 映像:

    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
    

配置 Terraform 变量

此部署使用 Terraform 进行配置和部署脚本。

  1. 在 Cloud Shell 中,创建一个新的 Terraform TFVARS 文件,您可以在其中替换本部分中的变量:

    export VARS=FILENAME
    .tfvars
    

    FILENAME 替换为您创建的变量文件的名称(例如 my-variables)。您可以使用 example-variables 文件作为参考。

  2. 在 TFVARS 文件中,配置项目变量:

    project = "PROJECT_ID"
    compute_region = "COMPUTE_REGION"
    data_region = "DATA_REGION"
    

    您可以使用 variables.tf 文件中定义的默认值,也可以更改这些值。

  3. 配置您在准备工作部分中创建和准备的 Terraform 服务账号:

    terraform_service_account =
    "bq-backup-mgr-terraform@PROJECT_ID.iam.gserviceaccount.com"
    

    请务必使用您创建的账号的完整电子邮件地址。

  4. 将 Cloud Run 服务配置为使用您之前构建和部署的容器映像:

    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"
    

    此脚本会指示 Terraform 在稍后由 Terraform 创建的 Cloud Run 服务中使用这些已发布的映像。

    Terraform 仅将 Cloud Run 服务关联到现有映像。它不会根据代码库构建映像,因为这已在上一步中完成。

  5. schedulers 变量中,至少定义一个调度程序。调度程序会根据表级备份 Cron 时间表,定期列出和检查需要备份的表。

    {
    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]
        }
    }
    

    替换以下内容:

    • SCHEDULER_NAME:Cloud Scheduler 的显示名称。
    • SCHEDULER_CRON:调度程序根据范围内表的各自备份时间表检查这些表是否需要备份的频率。这可以是任何与 unix-cron 兼容的字符串。例如,0 * * * * 是每小时一次的频率。
    • FORCE_RUN:一个布尔值。如果您希望调度程序使用表的 Cron 时间表,请将此值设置为 false。如果设置为 true,则无论范围内表的 Cron 设置如何,系统都会对其进行备份。
    • DRY_RUN:一个布尔值。设置为 true 时,系统不会执行任何实际备份操作。系统只会生成日志消息。如果您想在不产生备份费用的情况下测试和调试解决方案,请使用 true
    • FOLDERS_INCLUDED:包含 BigQuery 数据的文件夹(例如 1234, 456)的数字 ID 列表。设置后,解决方案会备份指定文件夹中的表,并忽略 projects_include_listdatasets_include_listtables_include_list 字段设置。
    • PROJECTS_INCLUDED:项目名称列表(例如 "project1", "project2")。设置后,解决方案会备份指定项目中的表,并忽略 datasets_include_listtables_include_list 字段设置。如果您设置了 folders_include_list 字段,系统会忽略此设置。
    • PROJECTS_EXCLUDED:项目名称或正则表达式的列表(例如 "project1", "regex:^test_")。设置后,解决方案不会备份指定项目中的表。您可以将此设置与 folders_include_list 字段结合使用。
    • DATASETS_INCLUDED:数据集列表(例如 "project1.dataset1", "project1.dataset2")。设置后,解决方案会备份指定数据集中的表,并忽略 tables_include_list 字段设置。如果您设置了 folders_include_listprojects_include_list 字段,则系统会忽略此设置。
    • DATASETS_EXCLUDED:数据集列表或正则表达式(例如 "project1.dataset1", "regex:.*\\_landing$")。设置后,解决方案不会备份指定数据集中的表。您可以将此设置与 folders_include_listprojects_include_list 字段结合使用。
    • TABLES_INCLUDED:表的列表(例如 "project1.dataset1.table 1", "project1.dataset2.table2")。设置后,解决方案会备份指定的表。如果您设置了 folders_include_listprojects_include_listdatasets_include_list 字段,系统会忽略此设置。
    • TABLES_EXCLUDED:表或正则表达式列表(例如 "project1.dataset1.table 1", "regex:.*\_test")。设置后,解决方案不会备份指定的表。您可以将此设置与 folders_include_listprojects_include_listdatasets_include_list 字段结合使用。

    所有排除列表都接受 regex:REGULAR_EXPRESSION 格式的正则表达式。

    如果完全限定条目名称(例如 "project.dataset.table")与任何所提供的正则表达式匹配,则会从备份范围中排除。

    以下是一些常见使用场景:

    • 排除所有以 _landing 结尾的数据集名称:datasets_exclude_list = ["regex:.*\\_landing$"]
    • 排除所有以 _test_tst_bkp_copy 结尾的表:tables_exclude_list = ["regex:.*\_(test|tst|bkp|copy)"]

定义回退政策

每次运行时,该解决方案都需要确定每个在范围内表的备份政策。如需详细了解政策类型,请参阅备份政策。本部分介绍了如何定义回退政策。

回退政策是使用 default_policy 变量和一组不同级别(文件夹、项目、数据集和表)的例外情况或替换项定义的。这种方法可提供精细的灵活性,而无需为每个表创建条目。

还有一些其他政策字段,具体取决于您决定使用的备份方法:BigQuery 快照、导出到 Cloud Storage,或二者兼有。

  1. 在 TFVARS 文件中,为 default_policy 变量设置默认政策的以下常用字段:

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

    替换以下内容:

    • BACKUP_CRON:用于设置表备份频率的 Cron 表达式(例如,如需每 6 小时备份一次,请指定 0 0 */6 * * *)。此表达式必须与 Spring-Framework 兼容。
    • BACKUP_METHOD:方法,您可以将其指定为 BigQuery SnapshotGCS Snapshot(使用“导出到 Cloud Storage”方法)或 Both。您需要为所选的每种备份方法提供所需字段,如下所示。
    • OFFSET_DAYS:过去的天数,用于确定从哪个时间点开始备份表。值可以是 0 到 7 之间的数字。
    • BACKUP_STORAGE_PROJECT:存储所有快照和导出操作的项目的 ID。这与 bq_snapshot_storage_datasetgcs_snapshot_storage_location 所在的项目相同。小型部署可以使用宿主项目,但大规模部署应使用单独的项目。
    • BACKUP_OPERATIONS_PROJECT:可选设置,用于指定运行所有快照和导出操作的项目的 ID。此项目适用于快照和导出作业的配额和限制。此值可以与 backup_storage_project 相同。如果未设置,解决方案将使用来源表的项目。
  2. 如果您将 BigQuery SnapshotBoth 指定为 backup_method,请在 default_policy 变量中的常规字段后面添加以下字段:

      "bq_snapshot_expiration_days" : "SNAPSHOT_EXPIRATION",
      "bq_snapshot_storage_dataset" : "DATASET_NAME",
    

    替换以下内容:

    • SNAPSHOT_EXPIRATION:要保留每个快照的天数(例如 15)。
    • DATASET_NAME:要存储快照的数据集的名称(例如 backups)。该数据集必须已在为 backup_storage_project 指定的项目中存在。
  3. 如果您将 GCS Snapshot(使用导出到 Cloud Storage 方法)或 Both 指定为 backup_method,请将以下字段添加到 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
    

    替换以下内容:

    • STORAGE_BUCKET:用于存储导出数据的 Cloud Storage 存储桶,格式为 gs://bucket/path/。例如 gs://bucket1/backups/
    • FILE_FORMAT:用于将 BigQuery 表导出到 Cloud Storage 的文件格式和压缩方式。可用值为 CSVCSV_GZIPJSONJSON_GZIPAVROAVRO_DEFLATEAVRO_SNAPPYPARQUETPARQUET_SNAPPYPARQUET_GZIP
    • AVRO_TYPE:一个布尔值。如果设置为 false,BigQuery 类型会导出为字符串。如果设置为 true,则类型会导出为其对应的 Avro 逻辑类型。如果 gcs_snapshot_format 是任何 Avro 类型格式,则此字段为必填字段。
    • CSV_DELIMITER:用于导出的 CSV 文件的分隔符,值可以是任何 ISO-8859-1 单字节字符。您可以使用 \ttab 指定制表符分隔符。如果 gcs_snapshot_format 是任何 CSV 类型格式,则此字段为必填字段。
    • CSV_EXPORT_HEADER:一个布尔值。如果设置为 true,系统会将列标题导出到 CSV 文件。如果 gcs_snapshot_format 是任何 CSV 类型格式,则此字段为必填字段。

    如需了解详情和 Avro 类型映射,请参阅下表:

    BigQuery 类型 Avro 逻辑类型
    TIMESTAMP timestamp-micros(为 Avro LONG 添加注解)
    DATE date(为 Avro INT 添加注解)
    TIME timestamp-micro(为 Avro LONG 添加注解)
    DATETIME STRING(自定义命名逻辑类型 datetime
  4. 为特定文件夹、项目、数据集和表添加替换变量:

      },
      "folder_overrides" : {
       "FOLDER_NUMBER" : {
       },
      },
    
      "project_overrides" : {
       "PROJECT_NAME" : {
       }
      },
    
      "dataset_overrides" : {
       "PROJECT_NAME.DATASET_NAME" : {
       }
      },
    
      "table_overrides" : {
       "PROJECT_NAME.DATASET_NAME.TABLE_NAME" : {
       }
      }
    }
    

    替换以下内容:

    • FOLDER_NUMBER:指定要为哪个文件夹设置替换字段。
    • PROJECT_NAME:为特定项目、数据集或表设置替换字段时,请指定项目。
    • DATASET_NAME:为特定数据集或表设置替换字段时,请指定数据集。
    • TABLE_NAME:指定要为哪个表设置替换字段。

    对于每个替换项(例如 project_overrides 变量中的特定项目),请为您在 default_policy 中之前指定的备份方法添加常规字段和必填字段。

    如果您不想为特定级别设置替换项,请将该变量设置为空映射(例如 project_overrides : {})。

    在以下示例中,为使用 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"
        },
       }
    }
    

如需查看回退政策的完整示例,请参阅 example-variables 文件

配置其他备份操作项目

  • 如果您想指定其他备份项目(例如在外部配置 [表级备份政策] 或表源项目中定义的项目),请配置以下变量:

    additional_backup_operation_projects = [ADDITIONAL_BACKUPS]
    

    ADDITIONAL_BACKUPS 替换为项目名称的逗号分隔列表(例如 "project1", "project2")。如果您仅使用回退备份政策,而没有表级外部政策,则可以将该值设置为空列表。

    如果您未添加此字段,则可选 backup_operation_project 字段中指定的所有项目都会自动添加为备用项目。

配置 Terraform 服务账号权限

在前面的步骤中,您配置了运行备份操作的备份项目。Terraform 需要将资源部署到这些备份项目。

Terraform 使用的服务账号必须具有对这些指定备份项目的所需权限。

  • 在 Cloud Shell 中,为运行备份操作的所有项目授予服务账号权限:

    ./scripts/prepare_backup_operation_projects_for_terraform.sh BACKUP_OPERATIONS_PROJECT DATA_PROJECTS ADDITIONAL_BACKUPS
    

    替换以下内容:

    • BACKUP_OPERATIONS_PROJECT:任何回退政策和表级政策的 backup_operation_project 字段中定义的项目。
    • DATA_PROJECTS:如果回退或表级政策中未定义 backup_operation_project 字段,请添加这些来源表的项目。
    • ADDITIONAL_BACKUPS:在 additional_backup_operation_projects Terraform 变量中定义的任何项目。

运行部署脚本

  1. 在 Cloud Shell 中,运行 Terraform 部署脚本:

    cd terraform
    
    terraform init \
        -backend-config="bucket=${BUCKET_NAME}" \
        -backend-config="prefix=terraform-state" \
        -backend-config="impersonate_service_account=$TF_SA@$PROJECT_ID.iam.gserviceaccount.com"
    
    terraform plan -var-file=$VARS
    
    terraform apply -var-file=$VARS
    
  2. 为 Firestore 添加存留时间 (TTL) 政策:

    
    gcloud firestore fields ttls update expires_at \
        --collection-group=project_folder_cache \
        --enable-ttl \
        --async \
        --project=$PROJECT_ID
    

    在某些情况下,该解决方案会将 Datastore 用作缓存。为了节省费用并提高查找性能,TTL 政策允许 Firestore 自动删除已过期的条目。

设置对来源和目的地的访问权限

  1. 在 Cloud Shell 中,为解决方案使用的服务账号设置以下变量:

    export SA_DISPATCHER_EMAIL=dispatcher@${PROJECT_ID}.iam.gserviceaccount.com
    export SA_CONFIGURATOR_EMAIL=configurator@${PROJECT_ID}.iam.gserviceaccount.com
    export SA_SNAPSHOTER_BQ_EMAIL=snapshoter-bq@${PROJECT_ID}.iam.gserviceaccount.com
    export SA_SNAPSHOTER_GCS_EMAIL=snapshoter-gcs@${PROJECT_ID}.iam.gserviceaccount.com
    export SA_TAGGER_EMAIL=tagger@${PROJECT_ID}.iam.gserviceaccount.com
    

    如果您更改了 Terraform 中的默认名称,请更新服务账号电子邮件地址。

  2. 如果您已设置 folders_include_list 字段,并希望将 BigQuery 扫描范围设置为包含特定文件夹,请在文件夹级别授予所需权限:

    ./scripts/prepare_data_folders.sh FOLDERS_INCLUDED
    
  3. 如需让应用能够在不同的项目中执行必要的任务,请为这些项目授予所需的权限:

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

    替换以下内容:

    • DATA_PROJECTS:包含要备份的源表的数据项目(或源项目),例如 project1 project2。包括以下项目:

      • Terraform 变量 schedulers 中的包含列表中指定的项目。
      • 如果您想备份宿主项目中的表,请添加宿主项目。
    • BACKUP_STORAGE_PROJECT:解决方案存储备份的备份存储空间项目(或目标项目),例如 project1 project2。您需要添加在以下字段中指定的项目:

      • 所有回退政策中的 backup_storage_project 字段。
      • 所有表级政策中的 backup_storage_project 字段。

      包含在多个领域中使用的备份存储空间项目,或同时用作源项目和目标项目的备份存储空间项目

    • BACKUP_OPERATIONS_PROJECT:解决方案运行备份操作的数据操作项目(例如 project1 project2)。您需要添加以下字段中指定的项目:

      • 所有回退政策中的 backup_operation_project 字段。
      • BigQuery 扫描范围内的所有包含列表(如果您未设置 backup_operation_project 字段)。
      • 所有表级政策中的 backup_operation_project 字段。

      包括在多个字段中使用的备份操作项目,或同时用作源项目和目标项目的备份操作项目。

  4. 对于使用列级访问权限控制的表,请确定表所使用的所有政策标记分类法(如果有),并向解决方案的服务账号授予对表数据的访问权限:

    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'
    

    替换以下内容:

    • TAXONOMY_PROJECT:政策标记分类中的项目 ID
    • TAXONOMY_LOCATION:政策标记分类中指定的位置
    • TAXONOMY_ID:政策标记分类的类别 ID
  5. 对每个政策代码分类重复上述步骤。

运行解决方案

部署解决方案后,请参阅以下部分,运行和管理解决方案。

设置表级备份政策

  • 在 Cloud Shell 中,使用所需字段创建表级政策,然后将该政策存储在 Cloud Storage 存储桶中:

    # 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
    

    替换以下内容:

    • TABLE_PROJECT:表所在的项目
    • TABLE_DATASET:表的数据集
    • TABLE_NAME:表格的名称

触发备份操作

您之前配置的 Cloud Scheduler 作业会根据其 Cron 表达式自动运行。

您还可以在 Google Cloud 控制台中手动运行作业。如需了解详情,请参阅运行作业

监控和报告

选择主机项目 (PROJECT_ID) 后,您可以在 BigQuery Studio 中运行以下查询,以获取报告和信息。

  • 获取每次运行(包括正在进行的运行)的进度统计信息:

    SELECT * FROM `bq_backup_manager.v_run_summary_counts`
    
  • 获取单次运行的所有严重错误(不可重试的错误):

    SELECT * FROM `bq_backup_manager.v_errors_non_retryable`
    WHERE run_id = 'RUN_ID'
    

    RUN_ID 替换为运行作业的 ID。

  • 获取表上的所有运行作业及其执行信息:

    SELECT * FROM `bq_backup_manager.v_errors_non_retryable`
    WHERE tablespec = 'project.dataset.table'
    

    您还可以指定 grouped 版本:

    SELECT * FROM `bq_backup_manager.v_audit_log_by_table_grouped`, UNNEST(runs) r
    WHERE r.run_has_retryable_error = FALSE
    
  • 如需进行调试,您可以获取每个服务调用的详细请求和响应信息:

    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"
    
  • 获取手动添加或由系统根据回退设置分配的备份政策:

    SELECT * FROM `bq_backup_manager.ext_backup_policies`
    

限制

如需详细了解 backup_operation_project 字段中指定的每个项目的限制和配额,请参阅限制

清理

为避免因本部署中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

删除新资源

作为删除项目的替代方法,您还可以删除在此过程中创建的资源。

  • 在 Cloud Shell 中,删除 Terraform 资源:

    terraform destroy -var-file="${VARS}"
    

    该命令会删除几乎所有资源。检查以确保您要删除的所有资源均已移除。

后续步骤

贡献者

作者:Karim Wadie | 云战略工程师

其他贡献者: