data-mesh-banking-labs/setup/terraform/modules/register_assets/register_assets.tf (175 lines of code) (raw):
/**
* Copyright 2022 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
*
* http://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.
*/
####################################################################################
# Variables
####################################################################################
variable "project_id" {}
variable "project_number" {}
variable "location" {}
variable "lake_name" {}
variable "customers_bucket_name" {}
variable "merchants_bucket_name" {}
variable "transactions_bucket_name" {}
variable "transactions_ref_bucket_name" {}
variable "customers_curated_bucket_name" {}
variable "merchants_curated_bucket_name" {}
variable "transactions_curated_bucket_name" {}
variable "datastore_project_id" {}
resource "google_dataplex_asset" "register_gcs_assets1" {
for_each = {
"authorizations-ref-raw-data/Authorization Ref Raw Data/authorizations-raw-zone/consumer-banking--creditcards--transaction--domain" : var.transactions_ref_bucket_name,
"transactions-raw-data/Authorization Raw Data/authorizations-raw-zone/consumer-banking--creditcards--transaction--domain" : var.transactions_bucket_name,
"merchant-raw-data/Merchant Raw Data/merchant-raw-zone/consumer-banking--merchant--domain" : var.merchants_bucket_name,
}
name = element(split("/", each.key), 0)
display_name = element(split("/", each.key), 1)
location = var.location
lake = element(split("/", each.key), 3)
dataplex_zone = element(split("/", each.key), 2)
discovery_spec {
enabled = true
csv_options {
delimiter = "|"
header_rows = 1
}
}
resource_spec {
name = "projects/${var.datastore_project_id}/buckets/${each.value}"
type = "STORAGE_BUCKET"
}
project = var.project_id
}
#sometimes we get API rate limit errors for dataplex; add wait until this is resolved.
resource "time_sleep" "sleep_after_assets" {
create_duration = "60s"
depends_on = [google_dataplex_asset.register_gcs_assets1]
}
resource "google_dataplex_asset" "register_gcs_assets2" {
for_each = {
#"customer-raw-data/Customer Raw Data/customer-raw-zone/consumer-banking--customer--domain" : var.customers_bucket_name,
"transactions-curated-data/Transactions Curated Data/authorizations-data-product-zone/consumer-banking--creditcards--transaction--domain" : var.transactions_curated_bucket_name,
"merchant-curated-data/Merchant Curated Data/merchant-data-product-zone/consumer-banking--merchant--domain" : var.merchants_curated_bucket_name,
#"customer-curated-data/Customer Curated Data/customer-curated-zone/consumer-banking--customer--domain" : var.customers_curated_bucket_name
}
name = element(split("/", each.key), 0)
display_name = element(split("/", each.key), 1)
location = var.location
lake = element(split("/", each.key), 3)
dataplex_zone = element(split("/", each.key), 2)
discovery_spec {
enabled = true
csv_options {
delimiter = "|"
header_rows = 1
}
}
resource_spec {
name = "projects/${var.datastore_project_id}/buckets/${each.value}"
type = "STORAGE_BUCKET"
}
project = var.project_id
depends_on = [time_sleep.sleep_after_assets]
}
#sometimes we get API rate limit errors for dataplex; add wait until this is resolved.
resource "time_sleep" "sleep_after_gcs_assets2" {
create_duration = "60s"
depends_on = [google_dataplex_asset.register_gcs_assets2]
}
resource "google_dataplex_asset" "register_bq_assets1" {
for_each = {
#"customer-data-product/Customer Data Product/customer-data-product-zone/consumer-banking--customer--domain" : "customer_data_product",
#"customer-data-product-reference/Customer Reference Data Product/customer-data-product-zone/consumer-banking--customer--domain" : "customer_ref_data" ,
# "customer-refined-data/Customer Refined Data/customer-curated-zone/consumer-banking--customer--domain" : "customer_refined_data" ,
"merchant-refined-data/Merchant Refined Data/merchant-data-product-zone/consumer-banking--merchant--domain" : "merchants_refined_data",
"auth-refined-data/Authorization Refined Data/authorizations-data-product-zone/consumer-banking--creditcards--transaction--domain" : "pos_auth_refined_data"
}
name = element(split("/", each.key), 0)
display_name = element(split("/", each.key), 1)
location = var.location
lake = element(split("/", each.key), 3)
dataplex_zone = element(split("/", each.key), 2)
discovery_spec {
enabled = true
}
resource_spec {
name = "projects/${var.datastore_project_id}/datasets/${each.value}"
type = "BIGQUERY_DATASET"
}
project = var.project_id
depends_on = [time_sleep.sleep_after_gcs_assets2]
}
resource "google_dataplex_asset" "register_bq_assets2" {
for_each = {
"merchant-data-products/Merchant Data Product/merchant-data-product-zone/consumer-banking--merchant--domain" : "merchants_data_product",
"merchant-ref-product/Merchant Data Product Reference/merchant-data-product-zone/consumer-banking--merchant--domain" : "merchants_ref_data",
"authorizations-data-product/Auhorization Data Product/authorizations-data-product-zone/consumer-banking--creditcards--transaction--domain" : "auth_data_product",
"authorizations-ref-product/Authorization Data Product Reference/authorizations-data-product-zone/consumer-banking--creditcards--transaction--domain" : "auth_ref_data",
"cc-analytics-data-product/CCA Data Product/data-product-zone/consumer-banking--creditcards--analytics--domain" : "cc_analytics_data_product"
}
name = element(split("/", each.key), 0)
display_name = element(split("/", each.key), 1)
location = var.location
lake = element(split("/", each.key), 3)
dataplex_zone = element(split("/", each.key), 2)
discovery_spec {
enabled = true
}
resource_spec {
name = "projects/${var.datastore_project_id}/datasets/${each.value}"
type = "BIGQUERY_DATASET"
}
project = var.project_id
depends_on = [google_dataplex_asset.register_bq_assets1]
}
#sometimes we get API rate limit errors for dataplex; add wait until this is resolved.
resource "time_sleep" "sleep_after_bq_assets2" {
create_duration = "60s"
depends_on = [google_dataplex_asset.register_bq_assets2]
}
resource "google_dataplex_asset" "register_bq_assets3" {
for_each = {
"dlp-reports/DLP Reports/operations-data-product-zone/central-operations--domain" : "central_dlp_data" ,
"dq-reports/DQ Reports/operations-data-product-zone/central-operations--domain" : "central_dq_results" ,
"audit-data/Audit Data/operations-data-product-zone/central-operations--domain" : "central_audit_data" ,
"enterprise-reference-data/Enterprise Reference Data/operations-data-product-zone/central-operations--domain" : "enterprise_reference_data"
}
name = element(split("/", each.key), 0)
display_name = element(split("/", each.key), 1)
location = var.location
lake = element(split("/", each.key), 3)
dataplex_zone = element(split("/", each.key), 2)
discovery_spec {
enabled = true
}
resource_spec {
name = "projects/${var.project_id}/datasets/${each.value}"
type = "BIGQUERY_DATASET"
}
project = var.project_id
depends_on = [time_sleep.sleep_after_bq_assets2]
}
resource "google_dataplex_asset" "register_gcs_assets3" {
for_each = {
"common-utilities/COMMON UTILITIES/common-utilities/central-operations--domain" : format("%s_dataplex_process" ,var.project_id)
}
name = element(split("/", each.key), 0)
display_name = element(split("/", each.key), 1)
location = var.location
lake = element(split("/", each.key), 3)
dataplex_zone = element(split("/", each.key), 2)
discovery_spec {
enabled = true
csv_options {
delimiter = "|"
header_rows = 1
}
}
resource_spec {
name = "projects/${var.project_id}/buckets/${each.value}"
type = "STORAGE_BUCKET"
}
project = var.project_id
depends_on = [google_dataplex_asset.register_bq_assets3]
}