terraform/modules/data-catalog/main.tf (231 lines of code) (raw):

# # Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ### Create Tag Template resource "google_data_catalog_tag_template" "snapshot_tag_template" { tag_template_id = "bq_backup_manager_template" project = var.project region = var.region display_name = "BigQuery Backup Manager" fields { field_id = "config_source" display_name = "Configuration Source" order = 16 type { enum_type { allowed_values { display_name = "MANUAL" } allowed_values { display_name = "SYSTEM" } } } is_required = true } fields { field_id = "backup_cron" display_name = "Cron expression for backup frequency" order = 15 type { primitive_type = "STRING" } is_required = true } fields { field_id = "backup_time_travel_offset_days" display_name = "Number of days in the past where the backup is taken relative to NOW" order = 14 type { enum_type { allowed_values { display_name = "0" } allowed_values { display_name = "1" } allowed_values { display_name = "2" } allowed_values { display_name = "3" } allowed_values { display_name = "4" } allowed_values { display_name = "5" } allowed_values { display_name = "6" } allowed_values { display_name = "7" } } } is_required = true } fields { field_id = "backup_method" display_name = "How to backup this table" order = 13 type { enum_type { allowed_values { display_name = "BigQuery Snapshot" } allowed_values { display_name = "GCS Snapshot" } allowed_values { display_name = "Both" } } } is_required = true } fields { field_id = "backup_storage_project" display_name = "Project to store the backup on" order = 12 type { primitive_type = "STRING" } is_required = true } fields { field_id = "backup_operation_project" display_name = "Project to run the backup operations on. If not set default will be the source table project" order = 11 type { primitive_type = "STRING" } is_required = false } fields { field_id = "bq_snapshot_storage_dataset" display_name = "BigQuery - Dataset where the snapshot is stored" order = 10 type { primitive_type = "STRING" } is_required = false } fields { field_id = "bq_snapshot_expiration_days" display_name = "BigQuery - Snapshot retention period in days" order = 9 type { primitive_type = "DOUBLE" } is_required = false } fields { field_id = "gcs_snapshot_storage_location" display_name = "GCS - Parent path to store all table snapshots" order = 8 type { primitive_type = "STRING" } is_required = false } fields { field_id = "gcs_snapshot_format" display_name = "GCS - Export format and compression" order = 7 type { enum_type { allowed_values { display_name = "CSV" } allowed_values { display_name = "CSV_GZIP" } allowed_values { display_name = "JSON" } allowed_values { display_name = "JSON_GZIP" } allowed_values { display_name = "AVRO" } allowed_values { display_name = "AVRO_DEFLATE" } allowed_values { display_name = "AVRO_SNAPPY" } allowed_values { display_name = "PARQUET" } allowed_values { display_name = "PARQUET_SNAPPY" } allowed_values { display_name = "PARQUET_GZIP" } } } is_required = false } fields { field_id = "gcs_csv_delimiter" display_name = "GCS - CSV field delimiter" order = 6 type { primitive_type = "STRING" } is_required = false } fields { field_id = "gcs_csv_export_header" display_name = "GCS - CSV export header row" order = 5 type { primitive_type = "BOOL" } is_required = false } fields { field_id = "gcs_avro_use_logical_types" display_name = "GCS - Use Avro logical types" order = 4 type { primitive_type = "BOOL" } is_required = false } fields { field_id = "last_backup_at" display_name = "Read-Only - Timestamp of the latest backup taken" order = 3 type { primitive_type = "TIMESTAMP" } is_required = false } fields { field_id = "last_gcs_snapshot_storage_uri" display_name = "Read-Only - Last GCS snapshot location" order = 2 type { primitive_type = "STRING" } is_required = false } fields { field_id = "last_bq_snapshot_storage_uri" display_name = "Read-Only - Last BQ snapshot location" order = 1 type { primitive_type = "STRING" } is_required = false } // deleting the tag template will delete all configs attached to tables force_delete = true } resource "google_data_catalog_tag_template_iam_member" "tag_template_user" { count = length(var.tagTemplateUsers) tag_template = google_data_catalog_tag_template.snapshot_tag_template.name role = "roles/datacatalog.tagTemplateUser" member = "serviceAccount:${var.tagTemplateUsers[count.index]}" }