terraform/modules/bigquery/main.tf (242 lines of code) (raw):

# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/bigquery_table # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/bigquery_dataset ######## Datasets ############################################################## resource "google_bigquery_dataset" "results_dataset" { project = var.project location = var.region dataset_id = var.dataset description = "To store DLP results from BQ PII Classifier solution" # contents have deletion_protection set according to user configuration delete_contents_on_destroy = true } # Logging BQ sink must be able to write data to logging table in the dataset resource "google_bigquery_dataset_iam_member" "logging_sink_access" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id role = "roles/bigquery.dataEditor" member = var.logging_sink_sa } ##### Tables ####################################################### resource "google_bigquery_table" "standard_dlp_results_table" { #count = var.is_auto_dlp_mode ? 0 : 1 project = var.project dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = var.standard_dlp_results_table_name # ingestion time partitioning time_partitioning { type = "DAY" } # use job_name as a cluster to limit the number of bytes scanned to lookup job results clustering = ["job_name"] schema = file("modules/bigquery/schema/standard_dlp_results.json") deletion_protection = var.terraform_data_deletion_protection } resource "google_bigquery_table" "logging_table" { project = var.project dataset_id = google_bigquery_dataset.results_dataset.dataset_id # don't change the name so that cloud logging can find it table_id = "run_googleapis_com_stdout" time_partitioning { type = "DAY" #expiration_ms = 604800000 # 7 days } schema = file("modules/bigquery/schema/run_googleapis_com_stdout.json") deletion_protection = var.terraform_data_deletion_protection } ### Monitoring Views ################################################## resource "google_bigquery_table" "logging_view_tag_history" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_log_tag_history" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_log_tag_history.tpl", { project = var.project dataset = var.dataset logging_table = google_bigquery_table.logging_table.table_id } ) } } resource "google_bigquery_table" "logging_view_label_history" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_log_label_history" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_log_label_history.tpl", { project = var.project dataset = var.dataset logging_table = google_bigquery_table.logging_table.table_id } ) } } resource "google_bigquery_table" "logging_view_steps" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_steps" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_steps.tpl", { project = var.project dataset = var.dataset logging_table = google_bigquery_table.logging_table.table_id } ) } } resource "google_bigquery_table" "view_service_calls" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_service_calls" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_service_calls.tpl", { project = var.project dataset = var.dataset logging_view_steps = google_bigquery_table.logging_view_steps.table_id } ) } } resource "google_bigquery_table" "logging_view_broken_steps" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_broken_steps" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_broken_steps.tpl", { project = var.project dataset = var.dataset v_service_calls = google_bigquery_table.view_service_calls.table_id logging_table = google_bigquery_table.logging_table.table_id inspection_templates_count = var.inspection_templates_count } ) } } resource "google_bigquery_table" "view_tagging_actions" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_tagging_actions" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_tagging_actions.tpl", { project = var.project dataset = var.dataset v_log_tag_history = google_bigquery_table.logging_view_tag_history.table_id v_config_infotypes_policytags_map = google_bigquery_table.config_view_infotypes_policytags_map.table_id } ) } } resource "google_bigquery_table" "view_run_summary" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_run_summary" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_run_summary.tpl", { project = var.project dataset = var.dataset v_service_calls = google_bigquery_table.view_service_calls.table_id v_errors_non_retryable = google_bigquery_table.view_errors_non_retryable.table_id inspection_templates_count = var.inspection_templates_count } ) } } resource "google_bigquery_table" "view_run_summary_counts" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_run_summary_counts" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_run_summary_counts.tpl", { project = var.project dataset = var.dataset v_run_summary = google_bigquery_table.view_run_summary.table_id logging_table = google_bigquery_table.logging_table.table_id } ) } } resource "google_bigquery_table" "view_errors_non_retryable" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_errors_non_retryable" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_errors_non_retryable.tpl", { project = var.project dataset = var.dataset logging_table = google_bigquery_table.logging_table.table_id } ) } } resource "google_bigquery_table" "view_errors_retryable" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_errors_retryable" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_errors_retryable.tpl", { project = var.project dataset = var.dataset logging_table = google_bigquery_table.logging_table.table_id } ) } } resource "google_bigquery_table" "view_tracking_id_map" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_tracking_id_to_table_map" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = templatefile("modules/bigquery/views/v_tracking_id_to_table_map.tpl", { project = var.project dataset = var.dataset logging_table = google_bigquery_table.logging_table.table_id } ) } } ######## CONFIG VIEWS ##################################################################### locals { infotypes_policytags_map_select_statements = [for entry in var.created_policy_tags: "SELECT '${entry["region"]}' AS region, '${entry["domain"]}' AS domain, '${entry["classification"]}' AS classification, '${entry["info_type"]}' AS info_type, '${entry["policy_tag_id"]}' AS policy_tag" ] project_domain_map_select_statements = [for entry in var.projects_domains_mapping: "SELECT '${entry["project"]}' AS project, '${entry["domain"]}' AS domain" ] dataset_domain_map_select_statements = length(var.dataset_domains_mapping) == 0 ? ["SELECT '' AS project, '' AS dataset, '' AS domain"] :[for entry in var.dataset_domains_mapping: "SELECT '${entry["project"]}' AS project, '${entry["dataset"]}' AS dataset, '${entry["domain"]}' AS domain" ] } resource "google_bigquery_table" "config_view_infotypes_policytags_map" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_config_infotypes_policytags_map" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = join(" UNION ALL \r\n", local.infotypes_policytags_map_select_statements) } } resource "google_bigquery_table" "config_view_project_domain_map" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_config_projects_domains_map" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = join(" UNION ALL \r\n", local.project_domain_map_select_statements) } } resource "google_bigquery_table" "config_view_dataset_domain_map" { dataset_id = google_bigquery_dataset.results_dataset.dataset_id table_id = "v_config_datasets_domains_map" deletion_protection = var.terraform_data_deletion_protection view { use_legacy_sql = false query = join(" UNION ALL \r\n", local.dataset_domain_map_select_statements) } }