このドキュメントでは、スケーラブルな BigQuery バックアップ自動化をデプロイする方法について説明します。
このドキュメントは、組織でデータポリシーを定義して自動化するクラウド アーキテクト、エンジニア、データ ガバナンス担当者を対象としています。また、Terraform の使用経験も役に立ちます。
アーキテクチャ
次の図は、自動バックアップのアーキテクチャを示しています。
Cloud Scheduler が実行をトリガーします。ディスパッチャー サービスは、BigQuery API を使用して、スコープ内のテーブルを一覧表示します。ディスパッチャー サービスは、Pub/Sub メッセージを介して、テーブルごとに 1 つのリクエストを構成サービスに送信します。構成サービスは、テーブルのバックアップ ポリシーを決定し、テーブルごとに 1 つのリクエストを関連する Cloud Run サービスに送信します。Cloud Run サービスは、BigQuery API にリクエストを送信し、バックアップ オペレーションを実行します。Pub/Sub はタガーサービスをトリガーします。このサービスは結果をロギングし、Cloud Storage メタデータ レイヤのバックアップ状態を更新します。
アーキテクチャの詳細については、スケーラブルな BigQuery バックアップの自動化をご覧ください。
目標
- Cloud Run サービスを構築する。
- Terraform 変数を構成します。
- Terraform スクリプトと手動デプロイ スクリプトを実行します。
- ソリューションを実行します。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
- BigQuery
- Pub/Sub
- Cloud Logging
- Cloud Run
- Cloud Storage
- Cloud Scheduler
- Firestore in Datastore mode (Datastore)
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
ソリューションを再デプロイする場合は、このセクションをスキップできます(新しいコミットの後など)。
このセクションでは、1 回限りのリソースを作成します。
In the Google Cloud console, activate Cloud Shell.
デプロイのホスト プロジェクトとして使用する新しい Google Cloud プロジェクトを作成する場合は、
gcloud projects create
コマンドを使用します。gcloud projects create PROJECT_ID
PROJECT_ID は、作成するプロジェクトの ID に置き換えます。
Maven をインストールします。
- Maven をダウンロードします。
Cloud Shell で、Maven を
PATH
に追加します。export PATH=/DOWNLOADED_MAVEN_DIR/bin:$PATH
Cloud Shell で GitHub リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/bq-backup-manager.git
次の環境変数を設定してエクスポートします。
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: ユーザー アカウントのメールアドレス。
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
Terraform 状態バケットを準備します。
gcloud storage buckets create $BUCKET --project=$PROJECT_ID --location=$COMPUTE_REGION --uniform-bucket-level-access
Terraform サービス アカウントを準備します。
./scripts/prepare_terraform_service_account.sh
このソリューションで使用するイメージを公開するには、Docker リポジトリを準備します。
gcloud artifacts repositories create $DOCKER_REPO_NAME --repository-format=docker \ --location=$COMPUTE_REGION \ --description="Docker repository for backups"
Cloud Shell で、gcloud CLI 構成を有効にして認証します。
gcloud config configurations activate $CONFIG gcloud auth login gcloud auth application-default login
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
Cloud Shell で、このセクションの変数をオーバーライドできる新しい Terraform TFVARS ファイルを作成します。
export VARS=FILENAME .tfvars
FILENAME は、作成した変数ファイルの名前(
my-variables
など)に置き換えます。example-variables
ファイルを参照として使用できます。TFVARS ファイルで、プロジェクト変数を構成します。
project = "PROJECT_ID" compute_region = "COMPUTE_REGION" data_region = "DATA_REGION"
variables.tf ファイルで定義されているデフォルト値を使用するか、値を変更できます。
始める前にで作成して準備した Terraform サービス アカウントを構成します。
terraform_service_account = "bq-backup-mgr-terraform@PROJECT_ID.iam.gserviceaccount.com"
作成したアカウントの完全なメールアドレスを使用してください。
以前にビルドしてデプロイしたコンテナ イメージを使用するように 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 が後で作成する Cloud Run サービスで、これらの公開イメージを使用するように Terraform に指示します。
Terraform は、Cloud Run サービスを既存のイメージにリンクするだけです。コードベースからイメージをビルドしません。これは前の手順で完了しているためです。
schedulers
変数で、少なくとも 1 つのスケジューラを定義します。スケジューラは、テーブルレベルのバックアップ 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 * * * *
は 1 時間ごとの頻度です。 - FORCE_RUN: ブール値。スケジューラでテーブルの cron スケジュールを使用する場合は、値を
false
に設定します。true
に設定すると、cron 設定に関係なく、スコープ内のすべてのテーブルがバックアップされます。 - DRY_RUN: ブール値。
true
に設定すると、実際のバックアップ オペレーションは実行されません。ログ メッセージのみが生成されます。バックアップ費用を発生させずにソリューションをテストしてデバッグする場合は、true
を使用します。 - FOLDERS_INCLUDED: BigQuery データを含むフォルダの数値 ID のリスト(例:
1234, 456
)。設定すると、ソリューションは指定されたフォルダ内のテーブルをバックアップし、projects_include_list
、datasets_include_list
、tables_include_list
フィールドの設定を無視します。 - PROJECTS_INCLUDED: プロジェクト名のリスト(
"project1", "project2"
など)。設定すると、ソリューションは指定されたプロジェクトのテーブルをバックアップし、datasets_include_list
フィールドとtables_include_list
フィールドの設定を無視します。folders_include_list
フィールドを設定すると、この設定は無視されます。 - PROJECTS_EXCLUDED: プロジェクト名または正規表現のリスト(例:
"project1", "regex:^test_"
)。設定すると、ソリューションは指定されたプロジェクトのテーブルのバックアップを作成しません。この設定は、folders_include_list
フィールドと組み合わせて使用できます。 - DATASETS_INCLUDED: データセットのリスト(
"project1.dataset1", "project1.dataset2"
など)。設定すると、ソリューションは指定されたデータセット内のテーブルをバックアップし、tables_include_list
フィールドの設定を無視します。folders_include_list
フィールドまたはprojects_include_list
フィールドを設定した場合、この設定は無視されます。 - DATASETS_EXCLUDED: データセットのリストまたは正規表現(例:
"project1.dataset1", "regex:.*\\_landing$"
)。設定すると、ソリューションは指定されたデータセット内のテーブルのバックアップを作成しません。この設定は、folders_include_list
フィールドまたはprojects_include_list
フィールドと組み合わせて使用できます。 - TABLES_INCLUDED: テーブルのリスト(例:
"project1.dataset1.table 1", "project1.dataset2.table2"
)。設定すると、ソリューションは指定されたテーブルをバックアップします。folders_include_list
、projects_include_list
、datasets_include_list
フィールドを設定すると、この設定は無視されます。 - TABLES_EXCLUDED: テーブルのリストまたは正規表現(例:
"project1.dataset1.table 1", "regex:.*\_test"
)。設定すると、ソリューションは指定されたテーブルのバックアップを取得しません。この設定は、folders_include_list
、projects_include_list
、datasets_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)"]
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 互換の cron 式である必要があります。 - BACKUP_METHOD: メソッド。
BigQuery Snapshot
、GCS Snapshot
(Cloud Storage へのエクスポート メソッドを使用する場合)、またはBoth
として指定します。後述するように、選択したバックアップ方法ごとに必須フィールドを指定する必要があります。 - OFFSET_DAYS: テーブルのバックアップを開始する時点を決定する過去の日数。値は 0 ~ 7 の数値です。
- BACKUP_STORAGE_PROJECT: すべてのスナップショットとエクスポート オペレーションが保存されるプロジェクトの ID。これは、
bq_snapshot_storage_dataset
とgcs_snapshot_storage_location
が存在するのと同じプロジェクトです。小規模なデプロイではホスト プロジェクトを使用できますが、大規模なデプロイでは別のプロジェクトを使用する必要があります。 - BACKUP_OPERATIONS_PROJECT: オプションの設定。すべてのスナップショットとエクスポート オペレーションが実行されるプロジェクトの ID を指定します。このプロジェクトには、スナップショットとエクスポート ジョブの割り当てと上限が適用されます。これは
backup_storage_project
と同じ値にすることができます。設定しない場合、ソリューションはソーステーブルのプロジェクトを使用します。
- BACKUP_CRON: テーブルのバックアップ頻度を設定する cron 式(例: 6 時間ごとにバックアップする場合は
backup_method
としてBigQuery Snapshot
またはBoth
を指定した場合は、default_policy
変数の共通フィールドの後に次のフィールドを追加します。"bq_snapshot_expiration_days" : "SNAPSHOT_EXPIRATION", "bq_snapshot_storage_dataset" : "DATASET_NAME",
次のように置き換えます。
- SNAPSHOT_EXPIRATION: 各スナップショットを保持する日数(例:
15
)。 - DATASET_NAME: スナップショットを保存するデータセットの名前(例:
backups
)。データセットは、backup_storage_project
で指定されたプロジェクトにすでに存在している必要があります。
- SNAPSHOT_EXPIRATION: 各スナップショットを保持する日数(例:
backup_method
としてGCS Snapshot
(Cloud Storage へのエクスポート メソッドを使用するため)またはBoth
を指定した場合は、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 にエクスポートするために使用されるファイル形式と圧縮。使用可能な値は、
CSV
、CSV_GZIP
、JSON
、JSON_GZIP
、AVRO
、AVRO_DEFLATE
、AVRO_SNAPPY
、PARQUET
、PARQUET_SNAPPY
、PARQUET_GZIP
です。 - AVRO_TYPE: ブール値。
false
に設定すると、BigQuery の型は文字列としてエクスポートされます。true
に設定されている場合、型は対応する Avro 論理型としてエクスポートされます。gcs_snapshot_format
が Avro 型形式の場合、このフィールドは必須です。 - CSV_DELIMITER: エクスポートされた CSV ファイルに使用される区切り文字。値には ISO-8859-1 の任意の 1 バイト文字を使用できます。
\t
またはtab
を使用することで、タブを区切り文字に指定できます。gcs_snapshot_format
が CSV 形式の場合、このフィールドは必須です。 - CSV_EXPORT_HEADER: ブール値。
true
に設定すると、列ヘッダーが CSV ファイルにエクスポートされます。gcs_snapshot_format
が CSV 形式の場合、このフィールドは必須です。
詳細と Avro 型のマッピングについては、次の表をご覧ください。
BigQuery の型 Avro の論理型 TIMESTAMP
timestamp-micros
(AvroLONG
をアノテーション)DATE
date
(AvroINT
をアノテーション)TIME
timestamp-micro
(AvroLONG
をアノテーション)DATETIME
STRING
(カスタム名前付き論理型datetime
)- STORAGE_BUCKET: エクスポートされたデータを保存する Cloud Storage バケット(
特定のフォルダ、プロジェクト、データセット、テーブルのオーバーライド変数を追加します。
}, "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" }, } }
外部構成(テーブルレベルのバックアップ ポリシー)またはテーブル ソース プロジェクトで定義されたバックアップ プロジェクトなど、追加のバックアップ プロジェクトを指定する場合は、次の変数を構成します。
additional_backup_operation_projects = [ADDITIONAL_BACKUPS]
ADDITIONAL_BACKUPS は、プロジェクト名のカンマ区切りのリスト(
"project1", "project2"
など)に置き換えます。テーブルレベルの外部ポリシーを使用せずにフォールバック バックアップ ポリシーのみを使用する場合は、値を空のリストに設定できます。このフィールドを追加しない場合、省略可能な
backup_operation_project
フィールドで指定されたプロジェクトは、バックアップ プロジェクトとして自動的に含まれます。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 変数で定義されているプロジェクト。
- BACKUP_OPERATIONS_PROJECT: フォールバック ポリシーとテーブルレベルのポリシーの
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
Firestore の有効期間(TTL)ポリシーを追加します。
gcloud firestore fields ttls update expires_at \ --collection-group=project_folder_cache \ --enable-ttl \ --async \ --project=$PROJECT_ID
このソリューションでは、状況に応じて Datastore をキャッシュとして使用します。費用を節約し、ルックアップのパフォーマンスを向上させるため、TTL ポリシーを使用すると、Firestore は期限切れのエントリを自動的に削除できます。
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 でデフォルト名を変更した場合は、サービス アカウントのメールアドレスを更新します。
folders_include_list
フィールドを設定し、特定のフォルダを含めるように BigQuery スキャンのスコープを設定する場合は、フォルダレベルで必要な権限を付与します。./scripts/prepare_data_folders.sh FOLDERS_INCLUDED
アプリケーションが異なるプロジェクトで必要なタスクを実行できるようにするには、これらの各プロジェクトに必要な権限を付与します。
./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
の包含リストで指定されたプロジェクト。 - ホスト プロジェクトのテーブルをバックアップする場合は、ホスト プロジェクトを含めます。
- Terraform 変数
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
フィールド。
複数のフィールドで使用されているバックアップ オペレーション プロジェクト、またはソース プロジェクトと宛先プロジェクトの両方として使用されているバックアップ オペレーション プロジェクトを含めます。
- すべてのフォールバック ポリシーの
列レベルのアクセス制御を使用するテーブルの場合は、テーブルで使用されているすべてのポリシータグの分類(存在する場合)を特定し、ソリューションのサービス アカウントにテーブルデータへのアクセス権を付与します。
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
ポリシータグの分類ごとに、前の手順を繰り返します。
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 gcloud storage 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: テーブルの名前。
各実行の進行状況の統計情報を取得します(進行中の実行を含む)。
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`
Cloud Shell で、Terraform リソースを削除します。
terraform destroy -var-file="${VARS}"
このコマンドは、ほとんどのリソースを削除します。削除するすべてのリソースが削除されていることを確認します。
- BigQuery の詳細:
- Cloud アーキテクチャ センターで、リファレンス アーキテクチャ、図、ベスト プラクティスを確認する。
- サイト信頼性エンジニア | Chris DeForeest
- Eyal Ben Ivri | クラウド ソリューション アーキテクト
- Jason Davenport | デベロッパー アドボケイト
- Jaliya Ekanayake | エンジニアリング マネージャー
- Muhammad Zain | 戦略的クラウド エンジニア
インフラストラクチャをデプロイする
始める前にを少なくとも 1 回完了していることを確認します。
このセクションでは、最新のコードベースを Google Cloud 環境にデプロイまたは再デプロイする手順について説明します。
gcloud CLI 構成を有効にする
Cloud Run サービス イメージをビルドする
Terraform 変数を構成する
このデプロイでは、構成とデプロイ スクリプトに Terraform を使用します。
フォールバック ポリシーを定義する
実行ごとに、ソリューションはスコープ内の各テーブルのバックアップ ポリシーを決定する必要があります。ポリシーの種類の詳細については、バックアップ ポリシーをご覧ください。このセクションでは、フォールバック ポリシーを定義する方法について説明します。
フォールバック ポリシーは、default_policy
変数と、さまざまなレベル(フォルダ、プロジェクト、データセット、テーブル)の例外またはオーバーライドのセットで定義されます。このアプローチでは、各テーブルのエントリを必要とせずに、きめ細かい柔軟性が得られます。
使用するバックアップ方法(BigQuery スナップショット、Cloud Storage へのエクスポート、またはその両方)に応じて、追加のポリシー フィールド セットがあります。
フォールバック ポリシーの完全な例については、example-variables
ファイルをご覧ください。
追加のバックアップ オペレーション プロジェクトを構成する
Terraform サービス アカウントの権限を構成する
前の手順では、バックアップ オペレーションが実行されるバックアップ プロジェクトを構成しました。Terraform は、これらのバックアップ プロジェクトにリソースをデプロイする必要があります。
Terraform が使用するサービス アカウントには、指定されたバックアップ プロジェクトに必要な権限が付与されている必要があります。
デプロイ スクリプトを実行する
送信元と宛先へのアクセスを設定する
ソリューションを実行する
ソリューションをデプロイしたら、次のセクションでソリューションの実行と管理を行います。
テーブルレベルのバックアップ ポリシーを設定する
バックアップ オペレーションをトリガーする
前に構成した Cloud Scheduler ジョブは、cron 式に基づいて自動的に実行されます。
Google Cloud コンソールでジョブを手動で実行することもできます。詳細については、ジョブを実行するをご覧ください。
モニタリングと報告
ホスト プロジェクト(PROJECT_ID)を選択した状態で、BigQuery Studio で次のクエリを実行して、レポートと情報を取得できます。
制限事項
backup_operation_project
フィールドで指定された各プロジェクトの上限と割り当ての詳細については、上限をご覧ください。
クリーンアップ
このデプロイで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
新しいリソースを削除する
プロジェクトを削除する代わりに、この手順で作成したリソースを削除することもできます。
次のステップ
寄稿者
著者: Karim Wadie | 戦略的クラウド エンジニア
その他の寄稿者: