From 488b6d4dc0d4f83d8dcb9f347caaa73b33794b93 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 11 Jan 2023 00:31:52 +0100 Subject: [PATCH 1/7] Remove plg project, composer 2 --- .../data-platform-foundations/03-composer.tf | 150 +++++++++--------- .../03-orchestration.tf | 8 +- .../05-datawarehouse.tf | 49 ------ .../data-platform-foundations/IAM.md | 70 ++++---- .../data-platform-foundations/README.md | 16 +- .../images/overview_diagram.png | Bin 51041 -> 147940 bytes .../data-platform-foundations/outputs.tf | 4 - .../data-platform-foundations/variables.tf | 46 +++++- fast/stages/03-data-platform/dev/README.md | 10 +- fast/stages/03-data-platform/dev/main.tf | 1 - fast/stages/03-data-platform/dev/variables.tf | 47 +++++- .../data_platform_foundations/test_plan.py | 4 +- 12 files changed, 207 insertions(+), 198 deletions(-) diff --git a/blueprints/data-solutions/data-platform-foundations/03-composer.tf b/blueprints/data-solutions/data-platform-foundations/03-composer.tf index 2622ffa207..33a2140840 100644 --- a/blueprints/data-solutions/data-platform-foundations/03-composer.tf +++ b/blueprints/data-solutions/data-platform-foundations/03-composer.tf @@ -14,6 +14,40 @@ # tfdoc:file:description Orchestration Cloud Composer definition. +locals { + env_variables = { + BQ_LOCATION = var.location + DATA_CAT_TAGS = try(jsonencode(module.common-datacatalog.tags), "{}") + DF_KMS_KEY = try(var.service_encryption_keys.dataflow, "") + DRP_PRJ = module.drop-project.project_id + DRP_BQ = module.drop-bq-0.dataset_id + DRP_GCS = module.drop-cs-0.url + DRP_PS = module.drop-ps-0.id + DWH_LAND_PRJ = module.dwh-lnd-project.project_id + DWH_LAND_BQ_DATASET = module.dwh-lnd-bq-0.dataset_id + DWH_LAND_GCS = module.dwh-lnd-cs-0.url + DWH_CURATED_PRJ = module.dwh-cur-project.project_id + DWH_CURATED_BQ_DATASET = module.dwh-cur-bq-0.dataset_id + DWH_CURATED_GCS = module.dwh-cur-cs-0.url + DWH_CONFIDENTIAL_PRJ = module.dwh-conf-project.project_id + DWH_CONFIDENTIAL_BQ_DATASET = module.dwh-conf-bq-0.dataset_id + DWH_CONFIDENTIAL_GCS = module.dwh-conf-cs-0.url + GCP_REGION = var.region + LOD_PRJ = module.load-project.project_id + LOD_GCS_STAGING = module.load-cs-df-0.url + LOD_NET_VPC = local.load_vpc + LOD_NET_SUBNET = local.load_subnet + LOD_SA_DF = module.load-sa-df-0.email + ORC_PRJ = module.orch-project.project_id + ORC_GCS = module.orch-cs-0.url + TRF_PRJ = module.transf-project.project_id + TRF_GCS_STAGING = module.transf-cs-df-0.url + TRF_NET_VPC = local.transf_vpc + TRF_NET_SUBNET = local.transf_subnet + TRF_SA_DF = module.transf-sa-df-0.email + TRF_SA_BQ = module.transf-sa-bq-0.email + } +} module "orch-sa-cmp-0" { source = "../../../modules/iam-service-account" project_id = module.orch-project.project_id @@ -27,21 +61,51 @@ module "orch-sa-cmp-0" { } resource "google_composer_environment" "orch-cmp-0" { - provider = google-beta - project = module.orch-project.project_id - name = "${var.prefix}-orc-cmp-0" - region = var.region + count = var.composer_config.disable_deployment == true ? 0 : 1 + project = module.orch-project.project_id + name = "${var.prefix}-orc-cmp-0" + region = var.region config { - node_count = var.composer_config.node_count + software_config { + airflow_config_overrides = try(var.composer_config.software_config.airflow_config_overrides, null) + pypi_packages = try(var.composer_config.software_config.pypi_packages, null) + env_variables = merge(try(var.composer_config.software_config.env_variables, null), local.env_variables) + image_version = try(var.composer_config.software_config.image_version, null) + } + dynamic "workloads_config" { + for_each = (try(var.composer_config.workloads_config, null) != null ? { 1 = 1 } : {}) + + content { + scheduler { + cpu = try(var.composer_config.workloads_config.scheduler.cpu, null) + memory_gb = try(var.composer_config.workloads_config.scheduler.memory_gb, null) + storage_gb = try(var.composer_config.workloads_config.scheduler.storage_gb, null) + count = try(var.composer_config.workloads_config.scheduler.count, null) + } + web_server { + cpu = try(var.composer_config.workloads_config.web_server.cpu, null) + memory_gb = try(var.composer_config.workloads_config.web_server.memory_gb, null) + storage_gb = try(var.composer_config.workloads_config.web_server.storage_gb, null) + } + worker { + cpu = try(var.composer_config.workloads_config.worker.cpu, null) + memory_gb = try(var.composer_config.workloads_config.worker.memory_gb, null) + storage_gb = try(var.composer_config.workloads_config.worker.storage_gb, null) + min_count = try(var.composer_config.workloads_config.worker.min_count, null) + max_count = try(var.composer_config.workloads_config.worker.max_count, null) + } + } + } + + environment_size = var.composer_config.environment_size + node_config { - zone = "${var.region}-b" - service_account = module.orch-sa-cmp-0.email network = local.orch_vpc subnetwork = local.orch_subnet - tags = ["composer-worker", "http-server", "https-server"] - enable_ip_masq_agent = true + service_account = module.orch-sa-cmp-0.email + enable_ip_masq_agent = "true" + tags = ["composer-worker"] ip_allocation_policy { - use_ip_aliases = "true" cluster_secondary_range_name = try( var.network_config.composer_secondary_ranges.pods, "pods" ) @@ -58,80 +122,20 @@ resource "google_composer_environment" "orch-cmp-0" { master_ipv4_cidr_block = try( var.network_config.composer_ip_ranges.gke_master, "10.20.11.0/28" ) - web_server_ipv4_cidr_block = try( - var.network_config.composer_ip_ranges.web_server, "10.20.11.16/28" - ) } - software_config { - image_version = var.composer_config.airflow_version - env_variables = merge( - var.composer_config.env_variables, { - BQ_LOCATION = var.location - DATA_CAT_TAGS = try(jsonencode(module.common-datacatalog.tags), "{}") - DF_KMS_KEY = try(var.service_encryption_keys.dataflow, "") - DRP_PRJ = module.drop-project.project_id - DRP_BQ = module.drop-bq-0.dataset_id - DRP_GCS = module.drop-cs-0.url - DRP_PS = module.drop-ps-0.id - DWH_LAND_PRJ = module.dwh-lnd-project.project_id - DWH_LAND_BQ_DATASET = module.dwh-lnd-bq-0.dataset_id - DWH_LAND_GCS = module.dwh-lnd-cs-0.url - DWH_CURATED_PRJ = module.dwh-cur-project.project_id - DWH_CURATED_BQ_DATASET = module.dwh-cur-bq-0.dataset_id - DWH_CURATED_GCS = module.dwh-cur-cs-0.url - DWH_CONFIDENTIAL_PRJ = module.dwh-conf-project.project_id - DWH_CONFIDENTIAL_BQ_DATASET = module.dwh-conf-bq-0.dataset_id - DWH_CONFIDENTIAL_GCS = module.dwh-conf-cs-0.url - DWH_PLG_PRJ = module.dwh-plg-project.project_id - DWH_PLG_BQ_DATASET = module.dwh-plg-bq-0.dataset_id - DWH_PLG_GCS = module.dwh-plg-cs-0.url - GCP_REGION = var.region - LOD_PRJ = module.load-project.project_id - LOD_GCS_STAGING = module.load-cs-df-0.url - LOD_NET_VPC = local.load_vpc - LOD_NET_SUBNET = local.load_subnet - LOD_SA_DF = module.load-sa-df-0.email - ORC_PRJ = module.orch-project.project_id - ORC_GCS = module.orch-cs-0.url - TRF_PRJ = module.transf-project.project_id - TRF_GCS_STAGING = module.transf-cs-df-0.url - TRF_NET_VPC = local.transf_vpc - TRF_NET_SUBNET = local.transf_subnet - TRF_SA_DF = module.transf-sa-df-0.email - TRF_SA_BQ = module.transf-sa-bq-0.email - } - ) - } - dynamic "encryption_config" { for_each = ( - try(local.service_encryption_keys.composer != null, false) + try(var.service_encryption_keys[var.region], null) != null ? { 1 = 1 } : {} ) content { - kms_key_name = try(local.service_encryption_keys.composer, null) + kms_key_name = try(var.service_encryption_keys[var.region], null) } } - - # dynamic "web_server_network_access_control" { - # for_each = toset( - # var.network_config.web_server_network_access_control == null - # ? [] - # : [var.network_config.web_server_network_access_control] - # ) - # content { - # dynamic "allowed_ip_range" { - # for_each = toset(web_server_network_access_control.key) - # content { - # value = allowed_ip_range.key - # } - # } - # } - # } - } depends_on = [ google_project_iam_member.shared_vpc, + module.orch-project ] } diff --git a/blueprints/data-solutions/data-platform-foundations/03-orchestration.tf b/blueprints/data-solutions/data-platform-foundations/03-orchestration.tf index 2974c12270..8e2d07250f 100644 --- a/blueprints/data-solutions/data-platform-foundations/03-orchestration.tf +++ b/blueprints/data-solutions/data-platform-foundations/03-orchestration.tf @@ -54,6 +54,9 @@ module "orch-project" { "roles/bigquery.jobUser" = [ module.orch-sa-cmp-0.iam_email, ] + "roles/composer.ServiceAgentV2Ext" = [ + "serviceAccount:${module.orch-project.service_accounts.robots.composer}" + ] "roles/composer.worker" = [ module.orch-sa-cmp-0.iam_email ] @@ -67,11 +70,6 @@ module "orch-project" { "roles/storage.objectViewer" = [module.load-sa-df-0.iam_email] } oslogin = false - org_policies = { - "constraints/compute.requireOsLogin" = { - enforce = false - } - } services = concat(var.project_services, [ "artifactregistry.googleapis.com", "bigquery.googleapis.com", diff --git a/blueprints/data-solutions/data-platform-foundations/05-datawarehouse.tf b/blueprints/data-solutions/data-platform-foundations/05-datawarehouse.tf index 879a0e0b16..0db5ce4404 100644 --- a/blueprints/data-solutions/data-platform-foundations/05-datawarehouse.tf +++ b/blueprints/data-solutions/data-platform-foundations/05-datawarehouse.tf @@ -30,21 +30,6 @@ locals { "roles/storage.objectViewer", ] } - dwh_plg_group_iam = { - (local.groups.data-engineers) = [ - "roles/bigquery.dataEditor", - "roles/storage.admin", - ], - (local.groups.data-analysts) = [ - "roles/bigquery.dataEditor", - "roles/bigquery.jobUser", - "roles/bigquery.metadataViewer", - "roles/bigquery.user", - "roles/datacatalog.viewer", - "roles/datacatalog.tagTemplateViewer", - "roles/storage.objectAdmin", - ] - } dwh_lnd_iam = { "roles/bigquery.dataOwner" = [ module.load-sa-df-0.iam_email, @@ -140,21 +125,6 @@ module "dwh-conf-project" { } } -module "dwh-plg-project" { - source = "../../../modules/project" - parent = var.folder_id - billing_account = var.billing_account_id - prefix = var.prefix - name = "dwh-plg${local.project_suffix}" - group_iam = local.dwh_plg_group_iam - iam = {} - services = local.dwh_services - service_encryption_key_ids = { - bq = [try(local.service_encryption_keys.bq, null)] - storage = [try(local.service_encryption_keys.storage, null)] - } -} - # Bigquery module "dwh-lnd-bq-0" { @@ -181,14 +151,6 @@ module "dwh-conf-bq-0" { encryption_key = try(local.service_encryption_keys.bq, null) } -module "dwh-plg-bq-0" { - source = "../../../modules/bigquery-dataset" - project_id = module.dwh-plg-project.project_id - id = "${replace(var.prefix, "-", "_")}_dwh_plg_bq_0" - location = var.location - encryption_key = try(local.service_encryption_keys.bq, null) -} - # Cloud storage module "dwh-lnd-cs-0" { @@ -223,14 +185,3 @@ module "dwh-conf-cs-0" { encryption_key = try(local.service_encryption_keys.storage, null) force_destroy = var.data_force_destroy } - -module "dwh-plg-cs-0" { - source = "../../../modules/gcs" - project_id = module.dwh-plg-project.project_id - prefix = var.prefix - name = "dwh-plg-cs-0" - location = var.location - storage_class = "MULTI_REGIONAL" - encryption_key = try(local.service_encryption_keys.storage, null) - force_destroy = var.data_force_destroy -} diff --git a/blueprints/data-solutions/data-platform-foundations/IAM.md b/blueprints/data-solutions/data-platform-foundations/IAM.md index 54d35939b4..60b033003b 100644 --- a/blueprints/data-solutions/data-platform-foundations/IAM.md +++ b/blueprints/data-solutions/data-platform-foundations/IAM.md @@ -2,62 +2,62 @@ Legend: + additive, conditional. -## Project cmn +## Project lc-2301-cmn | members | roles | |---|---| |gcp-data-analysts
group|[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer) | |gcp-data-engineers
group|[roles/dlp.estimatesAdmin](https://cloud.google.com/iam/docs/understanding-roles#dlp.estimatesAdmin)
[roles/dlp.reader](https://cloud.google.com/iam/docs/understanding-roles#dlp.reader)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | |gcp-data-security
group|[roles/datacatalog.admin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.admin)
[roles/dlp.admin](https://cloud.google.com/iam/docs/understanding-roles#dlp.admin) | -|load-df-0
serviceAccount|[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | -|trf-bq-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer) | -|trf-df-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | +|lc-2301-load-df-0
serviceAccount|[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | +|lc-2301-trf-bq-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer) | +|lc-2301-trf-df-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | -## Project drp +## Project lc-2301-drp | members | roles | |---|---| |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/pubsub.editor](https://cloud.google.com/iam/docs/understanding-roles#pubsub.editor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | -|drp-bq-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | -|drp-cs-0
serviceAccount|[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | -|drp-ps-0
serviceAccount|[roles/pubsub.publisher](https://cloud.google.com/iam/docs/understanding-roles#pubsub.publisher) | -|load-df-0
serviceAccount|[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|orc-cmp-0
serviceAccount|[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|lc-2301-drp-bq-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | +|lc-2301-drp-cs-0
serviceAccount|[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | +|lc-2301-drp-ps-0
serviceAccount|[roles/pubsub.publisher](https://cloud.google.com/iam/docs/understanding-roles#pubsub.publisher) | +|lc-2301-load-df-0
serviceAccount|[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|lc-2301-orc-cmp-0
serviceAccount|[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -## Project dwh-conf +## Project lc-2301-dwh-conf | members | roles | |---|---| |gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | -|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | -|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|lc-2301-load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | +|lc-2301-trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | +|lc-2301-trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -## Project dwh-cur +## Project lc-2301-dwh-cur | members | roles | |---|---| |gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | -|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | -|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|lc-2301-load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | +|lc-2301-trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | +|lc-2301-trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -## Project dwh-lnd +## Project lc-2301-dwh-lnd | members | roles | |---|---| |gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|load-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | -|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | -|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner) | +|lc-2301-load-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | +|lc-2301-trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | +|lc-2301-trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner) | -## Project dwh-plg +## Project lc-2301-dwh-plg | members | roles | |---|---| @@ -65,34 +65,34 @@ Legend: + additive, conditional. |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -## Project lod +## Project lc-2301-lod | members | roles | |---|---| |gcp-data-engineers
group|[roles/compute.viewer](https://cloud.google.com/iam/docs/understanding-roles#compute.viewer)
[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin)
[roles/dataflow.developer](https://cloud.google.com/iam/docs/understanding-roles#dataflow.developer)
[roles/viewer](https://cloud.google.com/iam/docs/understanding-roles#viewer) | |SERVICE_IDENTITY_dataflow-service-producer-prod
serviceAccount|[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|load-df-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin)
[roles/dataflow.worker](https://cloud.google.com/iam/docs/understanding-roles#dataflow.worker)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|orc-cmp-0
serviceAccount|[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | +|lc-2301-load-df-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin)
[roles/dataflow.worker](https://cloud.google.com/iam/docs/understanding-roles#dataflow.worker)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|lc-2301-orc-cmp-0
serviceAccount|[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | -## Project orc +## Project lc-2301-orc | members | roles | |---|---| |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/cloudbuild.builds.editor](https://cloud.google.com/iam/docs/understanding-roles#cloudbuild.builds.editor)
[roles/composer.admin](https://cloud.google.com/iam/docs/understanding-roles#composer.admin)
[roles/composer.environmentAndStorageObjectAdmin](https://cloud.google.com/iam/docs/understanding-roles#composer.environmentAndStorageObjectAdmin)
[roles/iam.serviceAccountUser](https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountUser)
[roles/iap.httpsResourceAccessor](https://cloud.google.com/iam/docs/understanding-roles#iap.httpsResourceAccessor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|SERVICE_IDENTITY_cloudcomposer-accounts
serviceAccount|[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|SERVICE_IDENTITY_cloudcomposer-accounts
serviceAccount|[roles/composer.ServiceAgentV2Ext](https://cloud.google.com/iam/docs/understanding-roles#composer.ServiceAgentV2Ext)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|load-df-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -|orc-cmp-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/composer.worker](https://cloud.google.com/iam/docs/understanding-roles#composer.worker)
[roles/iam.serviceAccountUser](https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountUser)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|trf-df-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | +|lc-2301-load-df-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|lc-2301-orc-cmp-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/composer.worker](https://cloud.google.com/iam/docs/understanding-roles#composer.worker)
[roles/iam.serviceAccountUser](https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountUser)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|lc-2301-trf-df-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | -## Project trf +## Project lc-2301-trf | members | roles | |---|---| |gcp-data-engineers
group|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | |SERVICE_IDENTITY_dataflow-service-producer-prod
serviceAccount|[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|orc-cmp-0
serviceAccount|[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | -|trf-bq-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | -|trf-df-0
serviceAccount|[roles/dataflow.worker](https://cloud.google.com/iam/docs/understanding-roles#dataflow.worker)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|lc-2301-orc-cmp-0
serviceAccount|[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | +|lc-2301-trf-bq-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | +|lc-2301-trf-df-0
serviceAccount|[roles/dataflow.worker](https://cloud.google.com/iam/docs/understanding-roles#dataflow.worker)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | diff --git a/blueprints/data-solutions/data-platform-foundations/README.md b/blueprints/data-solutions/data-platform-foundations/README.md index 8da143b29b..b2cd82b45e 100644 --- a/blueprints/data-solutions/data-platform-foundations/README.md +++ b/blueprints/data-solutions/data-platform-foundations/README.md @@ -21,7 +21,7 @@ The approach adapts to different high-level requirements: - least privilege principle - rely on service account impersonation -The code in this blueprint doesn't address Organization-level configurations (Organization policy, VPC-SC, centralized logs). We expect those elements to be managed by automation stages external to this script like those in [FAST](../../../fast). +The code in this blueprint doesn't address Organization-level configurations (Organization policy, VPC-SC, centralized logs). We expect those elements to be managed by automation stages external to this script like those in [FAST](../../../fast) and this blueprint deployed on top of them as one of the [stage](../../../fast/stages/03-data-platform/dev/README.md). ### Project structure @@ -39,14 +39,13 @@ This separation into projects allows adhering to the least-privilege principle b The script will create the following projects: - **Drop off** Used to store temporary data. Data is pushed to Cloud Storage, BigQuery, or Cloud PubSub. Resources are configured with a customizable lifecycle policy. -- **Load** Used to load data from the drop off zone to the data warehouse. The load is made with minimal to zero transformation logic (mainly `cast`). Anonymization or tokenization of Personally Identifiable Information (PII) can be implemented here or in the transformation stage, depending on your requirements. The use of [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates) is recommended. +- **Load** Used to load data from the drop off zone to the data warehouse. The load is made with minimal to zero transformation logic (mainly `cast`). Anonymization or tokenization of Personally Identifiable Information (PII) can be implemented here or in the transformation stage, depending on your requirements. The use of [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates) is recommended. When you need to handle workloads from different teams, if strong role separation is needed between them, we suggests to customize the scirpt and have separate `Load` projects. - **Data Warehouse** Several projects distributed across 3 separate layers, to host progressively processed and refined data: - **Landing - Raw data** Structured Data, stored in relevant formats: structured data stored in BigQuery, unstructured data stored on Cloud Storage with additional metadata stored in BigQuery (for example pictures stored in Cloud Storage and analysis of the images for Cloud Vision API stored in BigQuery). - **Curated - Cleansed, aggregated and curated data** - **Confidential - Curated and unencrypted layer** - - **Playground** Temporary tables that Data Analyst may use to perform R&D on data available in other Data Warehouse layers. - **Orchestration** Used to host Cloud Composer, which orchestrates all tasks that move data across layers. -- **Transformation** Used to move data between Data Warehouse layers. We strongly suggest relying on BigQuery Engine to perform the transformations. If BigQuery doesn't have the features needed to perform your transformations, you can use Cloud Dataflow with [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates). This stage can also optionally anonymize or tokenize PII. +- **Transformation** Used to move data between Data Warehouse layers. We strongly suggest relying on BigQuery Engine to perform the transformations. If BigQuery doesn't have the features needed to perform your transformations, you can use Cloud Dataflow with [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates). This stage can also optionally anonymize or tokenize PII. When you need to handle workloads from different teams, if strong role separation is needed between them, we suggests to customize the scirpt and have separate `Tranformation` projects. - **Exposure** Used to host resources that share processed data with external systems. Depending on the access pattern, data can be presented via Cloud SQL, BigQuery, or Bigtable. For BigQuery data, we strongly suggest relying on [Authorized views](https://cloud.google.com/bigquery/docs/authorized-views). ### Roles @@ -80,10 +79,10 @@ We use three groups to control access to resources: The table below shows a high level overview of roles for each group on each project, using `READ`, `WRITE` and `ADMIN` access patterns for simplicity. For detailed roles please refer to the code. -|Group|Drop off|Load|Transformation|DHW Landing|DWH Curated|DWH Confidential|DWH Playground|Orchestration|Common| +|Group|Drop off|Load|Transformation|DHW Landing|DWH Curated|DWH Confidential|Orchestration|Common| |-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| -|Data Engineers|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`| -|Data Analysts|-|-|-|-|-|`READ`|`READ`/`WRITE`|-|-| +|Data Engineers|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`| +|Data Analysts|-|-|-|-|-|`READ`|-|-| |Data Security|-|-|-|-|-|-|-|-|`ADMIN`| You can configure groups via the `groups` variable. @@ -109,14 +108,13 @@ In both VPC scenarios, you also need these ranges for Composer: - one /24 for Cloud SQL - one /28 for the GKE control plane -- one /28 for the web server ### Resource naming conventions Resources follow the naming convention described below. - `prefix-layer` for projects -- `prefix-layer-prduct` for resources +- `prefix-layer-product` for resources - `prefix-layer[2]-gcp-product[2]-counter` for services and service accounts ### Encryption diff --git a/blueprints/data-solutions/data-platform-foundations/images/overview_diagram.png b/blueprints/data-solutions/data-platform-foundations/images/overview_diagram.png index 642c81c2fc966b002167c32f6a155fc5e3145f7f..073ec870cca67453fdbcb1e939b1bc2573eed8ab 100644 GIT binary patch literal 147940 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 literal 51041 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

kZV=gyGoF|DsqpA$}NJ~>JT3l=@|8$W|=`voiI z4aT2Zwnf*y^X$(}hAIk?Vq>s5@Bm;|983W&Oz480hDE}!Pl&4v)z){g03a3C>kK%6 zIC$gZA~ch-V3TS`mwQ9Nym9`I3$2A+l{?>*pBzo_?Ey`*X!b}7$!Y3Tgl5WQV=@Au zZcNGt=P!OXQa$R>k#wS)cWC%xq&1{@9x-NwxSdnQqCXKBg7U!UNR&iftf=7DjnX%n=KmCi$}%8-oqsWJx}#7^dR)QZ>B zi15X&*AJoRX(QI6ir~J@1@^(7$Mcp&S6A#|^{JlM8K_nJwB5nFDs3%rUJWBd&Tpnn z9^|1z2O&6) zQk9-mxib*ZKUcRaoR%5e>#3w^SnF^jtPDTbAEk{dUE^epPoog{39Gg{?uR~V4Nc0Di(-t}cP zf(#^F0PF1F3}xxG*&s<#FROACvYWY|8lx+$#`u0ulS^CeQ+P3VKaqvl&d(=wKcj0e z=vo3+6U~7*XkV{`lRmzapWE?p@KaidK|&yXghkui6V z9tt8*UQ`INrjZ=FZb<6=Ox({tYx)6)XTb4&hE5`{~>^IIZ6j%?Dbdpl~b4 z)}8#?TQ(Z&i&JN~G}~fTP5}BuR=C!^AI8QhgK=&M?YLTQ_( zWOCn2(Mn}$v+?(pqkd9d>yz_mJinBQ3>p&@nwGh3fwGwdK*Q>LpDz0&bUp&<_Smp7ENniGb{XYEt zcWNUCm8crPuz1v(SQH%2!QT7Q_#;jfbT%7!Dkeh--2ne~tfLwpej9cKE{%wsD>eF6 z)Vrz5TvIejf2h9}1^-E1$5%a|l`oUS=ryKBDZgKDv6=yyirMaMe8wXn{%s#x56ve~ z{xBQ>af(-jx2Z}f=k5|ovJ7|O0FMS)2@h%zwP-5hhP^W;U%@Q~^rDlYz>&)YFd>U_ zO>N-K`s15F888)GZ!8=Ak|`S-kia>}(9O(@0t4~`#>T-r#u6Z3`>7Y9xE7bEWdMK* zqWV5bgWFMdC=TwGYc1gbN||81e)fC3gc=;3DuOW!fw`Dt>TK&`(5m2weRU!0yud%n zi~$-n^neM%HvJ-=-2US|UuRorYXv9#;zORNr3KsL-NuVrF+ZEw_lepGv2)yMd3jNu z@og}o!2-V-A3qfdrIEZ?uo_1^d_A1xb3p}~uC>)B|I>Xp2d&F(zpSHzBte;)n6mj# z=a%qNVM?AK1cY{Duc)j3knp^i6VVw3c~7iJ@TAR$tO!7p7@7;-RTg~JvU%o?IOaG72B`PjvG?QQ1qVRUsGpP0yTVXF=;fetrYV*$ zT5=HJ6Yvw}{Vc8hQfY$gFS!B~;%LjMm}s{sZA|}*z+Er%!+B0%(JN3IJlRW^FiEOg zRO!0n{1RKxft|m94Nw`{AT5Oq`(nplTTN*O0qPWe9QpD1!teCqBf8okN_*#3g#p$j z85egrd=-ae_C)!B4eDbkl3L7K0a2CI@$<`nW8(}O-g*0{t7Aloi_`uV)_>u9`5r@9 zlTn({RC1z2uUn;j)`s7O0^?22eFJ6Jp(gv5-$s5i4iFb1WSKPb`d+yfr&MCX1_ z`WxQyJBJBU6j<5aXLl9^hOAuVp$f9oQ>8L9y=94_il#>zzjU?Ul`st!s{hgx5AGsS zzo3i$+J)pqOR*>St8lyLL)SSK6>E(A1zzWtWg>gx9R-&VF_Mw+~DYW4m zRPh87F;Z}>I7Vf)bkq$*{|tqzwQ?Y5k!;LiJXL@FjTu4B#@pQN*nMSO8Q!01SnREg zFFyM)7Swb*KdKjEOtQqGEFy7dA%)g>0d)Q2|>Os=bmO zFKX63{I(0zOZ*eG-f!vO@$(P??Q(y&C?4G4bA+4{)J9>(V@Th(C$50EweN=?)h<#< zHQ6*Io>hmX(15&`v9yn2b7A*f@A|LWo=2AvTGThYznH+{n#95tSMKWTX=v|8!;?66 zZE^R7BpCjNEEdUp3zpoU1Mmx&#jT`?^lNjX;wr`a&BY-DTlyVtf{&ZQ;I&oulTg={ z6K?kBeJB$0_uvDwq^Wl4;c7b4v1l^XB|NVaq@oJFH%Gn$SgPvBCc+op+3kM*)B}Q< z2K;bf<{9BEs=R8?CqvyhZcYR+*}zE-7-3JB&c~chj_WI@#jH0l7pp$!)vKs zoi#qR)4uXz<}dCGQaZSkz>M&Du25~843#NekE-Ee{!XRMtiG(op<@-J9*WM829tXI zdtsgq{H(U00<()pE;_TW0rX>04kYT;%6xlJ==aa@b~u~Au={_x^%;qV{;(nvq4;}F z?#E!T)i2CjaVJ@Bj3;O^pppVh0I;yNt^P%p@FsOHu5WtPuI$7cXNn&>$TjX%L=M<1 zog?_Bp8Rn=?0?x+``X6(NuQzh^w-~-7S%o0Pm3;~lRBtcaISR40;nFEP=;mbyKdCq zqZ}EDG&K*k@5=&)N7#QTMkuTv;_o2b93u0OX8E1g$mc6mHH$C3^bFjeB*RnC3v%D5 zl{o6phVHO=JNk?$MxDwJ2~__gj(Bj?9D7LtW2p)>gYmyc75Uipm002E1Inxd5lTF1 z2Rz1sOD{j`i0uTydq_t{!x>w-f`#r z(=Cq&oMmvulprOJOm+H$s*b z)Rqc6L}1u3fRFHcOxhT2!a*X7vVQpg#{7soe=Q4)MUoOHcu&_dNy1udy1Q8nN-9h5~_T@Nm$0uqkX~m#5H_ zW{sW_H`+9}_xk};2edeg;8=F1{r+F`Mh2^{T%4Ac&HaIcnW0c$RBk#|wHVpiYjC3W zYC6s{53+#3I=D;m!Wn&9#0jodRZ`ETWKB=~mf5 zD6rH*HZXNpoJ4WP1tn9TCnY!=1uu}%DDV$!<&hh2t*tQO%F9C5l=i*%qo$pp?(7LI zQ_Z=RzJ8+E9tEsH1NGxez#_X4cDSc$;I(z zrJ@g8(PW4#5&S2J{CPuf^a-3KD6yiW?B{~>$xvIaVP&cuoY01~Do*_e9wH~~EDiN$ z$@%4kjmSAm9pjz5+oehOmL=^uH??JttHx)eo; z7GI;sga=hfS1mLwSy5xa$5~XM&ZQMynFgsRA`sF@NlA$oC~i30o4%;-jTG`2i#O)~ zR;62Shr~f$wT7!eqc4rj9B9Eb(#qDWfEnxvY_v# zvWnj3_??-Aj6$~8f31t;M60a`yKEyu^?%&AVCyK;`sd+G1?Q(KqbGcZM zPt=ACh%I@(t6W9RB`S0ApHeCJ5vLyAwX|zk9Zyu9$B3FfQsUJy2wQ7BdY;+#rimrI znQGLYRZ9&Q2t?}uojdR_>)%DvCYfJ~D$loD<0xejf>sz$@fPA>GA3`&0|Llq2Q<$Ly4&V7d!`Kxf4YAK_Ou67sX zPu|Z`9{wa+-h`<)o-QFFSw$o$U4o2YnNd7uXB7lC6R8AH1tIO8e1(H?tc?wfnjS0|! z?)|i5quu|7co3j9jvQCruhEy>rxv;2l+mUrni|9^gM4U*4hAKsvoS{!0gGG+ObSic zP2DxIHa09U|441b-hWmPf^-Li!ZJSa$cJZWmcAuDUON5T(7ujJbzAux15a>3pDnpN zc-!bmMfAbPqf$SQ!?lUpTPhg); zQDDlLyNn%Yn_fkAQ1R{1rAT0>jyMuZxbm8?JC;4m)ux#oy_TRu$^`J~PWV&7Aoh=6 zoJD|o7a)yQk$|m)U*11Z#~ZyiiPe>>D^VzW_n8@otz^_qTh_UNeG{v%y1vT7 z9n}e9%_qWxO#q0J0Zmv7L_N5Wz-qAmBnB|R+Y846sS<2Z^i2vZS(kmV*Z1s z(5PSJ#WQeXQ?|}koAo<_j98|@47R-Sd+p#41Z^e(pN(Y)oAKZ4$KBRAQ>7V>c=CVW z;l5SAmT2@b8Dm1E;j029peo^s%&6e=m46&O!VY9o<);X(9aC`9bgBRBIC7!RkV~y~ zbkKB##taS}JfZsr*UlhP8m~fLz*Z^klCdiPBTb8xmSFq{0GL3r;ik;#mky#v(nzb*VqeS<>8Y+RrrhasWOCnt|$N*9!z;N4_i)6Wo6Dj5Qq5&v_CA&9YHFces^=&cql-%SuF2)=bQK|Q zwg_E~nl}IKz$0TpH^D)NVnOf4nWe94zTN06(7HOq2X{=)Xwc8l`03b5f#1|h~PWe(s1#<7d~zA zbB34>(KF|ql!OVV=VnFs3yF{cAeEK{$_A7`~2<%te-rDhh7~&t?e%SD8 zY1&6!U*>$#gZtV=yfH_yHcjWjBuy5t_B3kAg;iAK$VXH}6C{wZ0|}EBZFhoZXNOHd z)Vh!3-UmL=#bc^*8z0_^LV8Q@|A>i4FMIooSw&%eM!&aZfA8-P%euY)alOS(teGmH zp!mEt_NapWa^qjR|Azzec~}+n^$k7C?e3n*JowHoRtj5the%AKXHR30(faKjl51v{ zOdiFEd#j&HHz&sBMYIRr`@dR%%M!1dtv(#ea?|-)un7!Q>*HGf{J8Fa*8atR_w?uV z!Fl&vAjY@KDNt8elar;Rdd^3UE699x*(26>!PZ*C@OmyfSW-LIX~;a1H|KzkG4N9R z|3QNPD}Nl@elXWA@Mt&h`QgMn1l$qKHu14kWe=p@FZ**rpQf`fS0<&_NiEUbwnQoZSW`+qNykS zFeL(EWIZ2)o#Xc;fF}Y)ARogy@=OBNEWU^7X?&ZM*|o6Im)vuIb&7Mrf~ z=WnELVa9Kzaj5sTW%hNtjQv$j!O7FoYz1XE28rgU^MV~&P=T%t9V*K<8;8F z^odc4Euu<Vkdn{}?g86gLFxV+?`WZ7SiQUI`1oOdd}lm+ zm?h|41RPyDYDQZe9_A(<+^1KrSE=4*Knj?%npbHqsZ;dnqD>iBZzMqtQ`3hfcPdut zJ*l_pP^oQ^GVWaxt>?*_ppCY*zKDi~tQESk={1U$lCtJv=An=8**ELXnO>*DOuta2$EKjCV-x3WPqXOA{#br6CXv$TCk@=$U zmq9xxF%1b=A}NS@>L@j*0-zy;K{lDf2Ac^$Rk!Y~ zI(6p9RCP^H_uji#FMalUeC6*`e}p`@wN7ev*c(`X-MYdkR|Y+C3`vgR0$24qp*}{s7*o*1#~hji67uRQJu9OPV!DXm7t~$ z2!-&7uczauPk`*=FXI^#X^nbd$jdL6TY zL!Io|#xs8QyC5wN_th16;5PwDU(Ju`fAfUwURpbK2q8SNvQWi&w&}VJ&o!#-B+~BO zeQ@`A-BTspY-y`8Vase~V|8;KtlE5eDHo`|_%n)){~W;kZsYj||6`qJS-(cB^6fR- z0~!?U?yl>3J)~gPqCkZP<9)Pj&~?2$$x+3{%~3;WGcM8S1h5xk6xFu!CGd|)wh7kL z2;~#zQ3b-6s9pb|dJ8~(=n!u*6{qJ{7F&{Z7p&)!+S!oih=#dvnO>-mp;3`8Z(?ql z#smirI2pQSiJj~hgi1-LX*GYgq{k)aw5l{zj$i^cJHXz8J(2zmMp>HZ@c3zKrr*cIPO4lcCtrfB zW#!Psg41iH2_i%AjhmN2G?m5yM(^n6Xzt1On%?#Ms+^P(;e}I;{_Z4)QQ-h&YmxHJ zub*Z}P?~;@3}7YuLimO3=7g?(L1O5DG!SECZ@{=y>Z%!Q<%@P9ea&3<4!PfPUUa z`TcakP3m}Qk;GG77h>OLjhJYgNYQBNj{SA@K(FKKe$hGMdY#VqJY1%uc4KvniQ(;N z$F5uX_QwGKhComc}xVTHBPcX6BDBePnJmk#5r5FPc|5A@OiSnMnA-hWINy?1F4jHl?1*vKQ+%ZRahqdQ^p* zJFjayvL8SA5kp0tF1zfn%v&hN3uM3d4-$4&_xzkBV82}$j`nuE{3p z8(pR4z4MBmRz|q&kUZ8Mh;Vm{BrB8AZhy43rGE`{wp;zWf3V5x!HI={o2F7aPk4@5 z?Wd}{^oW%ll56Q05AV0|M5BgI7hgTHmv6Sz*`{7j6Rpj)h+XrY?Yz;lvn)tU!1*+K zaA%ydU8S5(i)%i9X=@-DaZI%#Sc612aaRk*?iquCs^x_DvYp^>t5VA=VRwU-u<`|u zXdoAoV!~?F->5ng=1{iog%Q;T6%9UJ5$40c?B{=!Wm=IVe zmyg;YIhHd;3gg;D$eVmL$Hjg%Q>*RdvRtnky#c7;!+tu%C)ECMvjRnUSU&}wU2*X4`J_f{uvTR583lA~RyNG4VAA1}KtN3$~1?!lhG z0;o|BP`!;?^R^D&EcpfCYlmayQI70ocVgbM?M)WwFQB`Sfo!Pgv|BL6ebdM#0n$`o z8Ly{(NwmhJl&F^l%;!JqycoIFmW#a1Ia2#z-K?4}<|8cjm*tx$Y?r1fl;FtuL^00u z5wkCZIt-(>s4pt~_l$x%RW@t~B*Jf^NGtuEN}G$Q27l?8|@-aSGe=L8|@JdMAJPNal-U zY0Ru!>`Q2op_jY7hU<7X@)VbKUG*>GpFaZ23$uQ$yZN|L6yA2_J8ARNVgYZ}(@s@2 zbRcKCv4VL@+0xjWlSHp|NR(MW_v^|BM{WjxYNgMQ$P|^TjpYnya;7J&_k(%4&ss?Y zR=mA-=SeSa(xzn+7fdwb5;xu|tFHk**OOz<;(G#A^AU(L?95BfoALeA#pZX-nrud8 zv|q#Xn8iFu$IAU>Nm~V_0CGlEF@92zoXgMFZVLE3E-5ZZ7SnnyoTYZ^ByQHdi3DiU zDI&d3T!{=_Hg6prX%kxv6U*=C1$P}M6Ynn>8<^(P_`3B$&sK~djxiQ0P*CZzL#nTId$eEzA0!Di=a zJJ-&etW9dyLxFdFbr7#iWeXvyhGtowqqB2}ptQPSlNxQB!_5P`FUrjHDt@IuVmFbKT}L*Gt|Nq)EwT->R5`n3$2~!TyNmRLGXUceW+F_O<>SH9B6*- zZWX-U6KJ534$*gH6oG}9jfD$n1VMum{mvwQkbhu07Q>p-b5S^o++r+eMVI@_yqfU4 zCn;$&jV8Pl5<3H_4+rGR>RJ*0IzZ^8n%A&`GaG(-+MonW}MQkvfe!u?$A&)!%Huum14M^8p8L;A7^;v2r`@g@ z#_H{CY2x{$BB`3IByM73)RZkvr&JdHhqD01K=CGyVZ%|S>~49kaxr}Z3$A};X8+M~ zqz0SDAnji2xXNt{u>G~fBlnd;$E$g#a$Kvcb|?7w`M--JgU&aKd6RY2hSuGYLqv;@ z@A|RTsx{;5n$X&0CyFlYb}tX-W`4l8Y+K1{an@e-wJCojsdtC?1LI*g@`z_~*E~w; zss!T^s!AFNFch2)h0)Ps(_&LcRV*ol_BZ6^5pFB1>QH++TE0xa-5@8ib-fLE@Ns*4 zo84@Bf=|$yQwJu2FQ1#eY6hO$g{vD~pVyAUai4cp8&6NC_A7^6rPlzyr}RS5{d9}P z`;`Ts2IqA(fB|bOw)Q?iyGDLHw5eV0XB7a-8lBgP)wBfQj_l5dfvZ``be~(*%}(AH z9E*cmu+M8^H64%R%Wh$H2Y6y;U)OUd#DqSY&AV!$(g$3uOSg#i=dz{Tz~}AmdverE zH6Qz1T|9O&+j|q=^NN)F6;1Eb?Mt@LYltoO4JMN+8hE9Wp*^B^1Bv`^8>UgXlNXl-D|$a}Yf@o&EWdc$B@}%tuYMVy`C*gY>bQzd zkrecIPn4I@Y*nA6j`d9do>m|L#oYAH38W2CL`sL0L<;A`p&SzoR|Lyu$Hjq@KR3PZa{^ubB|HI1z?O!Ex`md}eq1S|<4du1X{wpns$^hSo#j5) zJ-zK1-`DP65E)*rTW zleG+jU;N|Rw+LZ*^rj6fSF@|7o*vXI$1^8Jv7jY0{d| zgA?gtG(~(SfOl2D;W;y2YT0w>Pt3G}rRFJG45#1uMUb!-!=+9cJkk8@_&wZ1^Jyn= z$~_LPIi@r$g>E>g%(1{Q5Xxx=l}wxuv0{#3!Jl4c9P{{&HM*_*z(xulRGL2yV)SS#Z|YpC@DDl(WTn<*HLwjiDd4djagIPTf_hK_#4G6~*KHP>m|wq#`{ zF$YCX#Rb*2xxU3P0m?D2dK$Cle8^KeV!uyFXH40!Cyv+;bqX`?HZF_tEE-5u&SIEe z!Ou%RJ6q3{1_k<4VN>f@(T*lvn$`0VqkH4A4TWX?N*9wH)E0y(#g~3=2Ef*)@H}%&oh{I zdRbjgf9TZWP%jx7mA2tZl=}*yVG4ih`ghcRSb42yvWKRlAXB1C{od~=Z(N?oq+b6s zEDv_M>=bD>RN&?5Yg8v4p$o}&VH;Y-IX^!I6A>Z~6bO(})ooA=!ta#iN2eKVJ>JL! z+9PG+ZHu0Yp!CF|n1fGq_#6)+Dq1NH2P1jwqMwmS;a_emo@d3spObVkmU!AFub^+B zA@Z97xyF7EMQ%+@SfV4fb(bCsb?sN z=7r0s-Te!=q<(y4O_0X*(tN^}0rh^oDj#zcFqnFDY=s=Sd0Dr^24x)u#N<+9=<94R zmW=nv@$2C@FUF1hG!Z;P7`po0m9&!zCkBkmt~rpwN>%r>oHN;Pd7=h5QU2vPVM&~b z0iK!a*uCUEyyT(}pef88hyYtyMPZ%#U4N<_9oNT(8GNtS17mQ1gdA@BQuV1!?KuiO zZXgN@+BPrDAmnZ)e>adpD)5xJL6nK0ZgaRu&Isz96U$iNVJi79tqoLuv z$D;yx5P?7|Dg6gd5-5a3oMz&mvrq`%5|pY8g(eaN1t;RF@2R_P5;}3aEb~O6@=>OS zuNi{c>GA6>c6et93y_kJ;2=OE{9UPD_j*g8!<^ih$l;2Xk_{*CXkhvBp=eb#=t~gV z@s7e7vt=+pCOf>?i;#Kg6Ax(IUxcFd625t$zDc9h~IVh)nF)g170(r_hUd zwV{1O1!{sE2zHORs~MJ%LN+-I2#%D|b*{H_u8)7;_++?XZ8W|8NI5s1S9YDwAKUva z_bjwpt1%C;0a$>SetWJaH_YFSQbcUB3Rb6w-PVYA~P`k73#ms(G zW1pM{8c1Y+7Buw;-bg3CIm$EJ^azq6`J0cc3ik~s|5fieJg%0!+VC-C)_NmY)uoKk zX;x%?VRAA8MNpa?ik+Tai}$6KD<2yf}L zBlHX2ZxzHZ0amar732@@$LMBMHmjaHy_LJiiwddPIt1!hB%nvxi}p_sWMsR?*N!7z zCcU^5*DZ1E%%ffI{op!rUIi>^H4-!JzpwOyrYDqX+X`XW(zxHm^qtO_(4l#CQJEMJ z@yK3mc{&IaZ-ozAFbvJ@xeq=f_Cl*=e}4SoONl`%sw35sMDvI9*R$#9z1`409*9Ga*8J?>!(YH}u@Jz?#D0DOAXNbk{ZpQ{X!c^DxEOD?H3d|l4Lgb^$2 z#CLi(Ro=^=Fu={CihXeKIL+H%jSf5Wm#jj*8ZIJ^jV~9;b<8WacxB;pKp_>4ZWK~}zuuf6zbUeK;dt12Q|%T(cSkY_GK zZSV2t5fA9H)xw-JE@?)f8l zP<+u6jl#?Pft}yaI+^$GMGmvr$hRS=`uP(Y!Kqc0I-Pp#mq^9zDMj9$87YbELMc{>h zKTmyYP+5BOM&_?e`f~#7#^#LL4IspW1HAFOEhUaPL67MQ-vp7vVlvFdH ztWRKmGyO(PM-rGoGRV!jZBffks8QXpQ5?7mOM=mSlTBGI88l8vuNyq zI`6ww2pY?AE+Jx|ufDd{uENroq7P}`>en96C3uOFX8XqZ=J=){j`Go6m+<9^rlIYVU^GAeJ?-S>tK*b>BQK_ zWmW6z#lzuzn%n-!q2ja4%aN+?dx!430%fxdDG4eh5Ny46E>_uWLubfen)j8jdt(Xm zt8NWjW8K6Z`Mc(&gEeboTja`Br7SXKB>);i?|@rM+U@)sz?thVj;$iTJL#(fe;U$X z69x*ydXx8Az#zdl@7Mbd(Pz-Uo-NnC@y~RtgxS*MUvlN9Tnx;!n9}HyKtDI--e*6# zL`@bTUo7)-v#nF^qz1IHNVl+jE45h3%I!RfcfbdSp_sd+2|AN6PZ*9Cjr;D2GcRQ4 z`c|P-_gW%Rlj~Ta9~kOXVQR8XeI&jd;40Sfc`g{7im#daRhQgM1LJ3jaTrYg>SUTt( zdJT^&)5Ag&WE)4isf9&c*_0&caq(E9`%j44U4sxcYGaC(Y$vC|vR5H#3b(I^;lk33 zueUo>uigJFRz*pf`+Ow+hD7LMSHDBf{XqUW<-*>}0JyG)KLi`E6aSOWJeTt;{ss2(pZih6D-vsvXrc_s-Zt9vZ@A> zb!K5@4Yu%ZCkqGwH{F1{_u^0HuyK_W&!3|4*TzcJ%DkLwk#+!UABwpg&dKLBRHTq} zdDl{!15PQC7|4Hu-l2P=O6N|OZi7|t!q+9M3~ z4WpxJtXQ6r6PKg#&YY6&oWLCbXv=;7E+66nyR0f%o)NsGt9~PzVkLqEeaDUZgC%cX z*0{Se{{BFHQY*I4i3hXhF)f9vbKqPS!K zZW6d4iwsMyCj8NsP>rEVXC7q!cPl|U0Wr#S`y$FJW3a1^R6?Jn@`83L3QXy)qqt60 zIKI<2b?5u>P%m-k-vM{RC9122bdxy1v|t(nOCh_GP*rPR%#(`EXV6fXhvZTkz+!zl zuL2MDG8r_ZUD7w-;ji~-iN>iyI1l}h3K?os@iLkIQH*IUKTK%TDp_=0ohqI@Nu<6Jdfs3s1Ujy_FH58lOQ`P;$3*L`ju}M0% z4{ZO9r1Eq*7lOX8HIx37Bmfm};n%31M*{Cc>1|-CDrp2H2@p99`#M{u+jG!u;MDL* z{lZI5h>>pkiT2<8X~G}dPuw^~x{J}~k)g!;B!P}MzG$Y7o8REJM$+gMF|8erRQXK| znWM}H{>fa58b)&n2jPe?6Wwrw|1kt!#T^m&hA#FB-_6O(8ZF=H#^LIwPT4KZZKo0IGG^T;@cd?lVB z>t|&jnrgD9zJ|A@SF{3ByD*N-p!0eiy`jGHvP1NCdv}wZWD_;U@O2C?RrdV~*{Ah( z>g0f7y|LwGXoqxBm0Nqt*N@VxNOw8)CliAKRCCO78av-)7xU?xWtc7l41J+0iEMqH z?rQPt2J=9y4*B`2Qe7yZrT}qY=WeNd7`Ez=Ob2>hx4lgFH0~aMPfj1jR$b#u#0C;$ z?m*f0zJ5AQdY{@p_iI@r1|&`p0ctD5#C>C(??+|)4V*?}iR)Ctz2&!Yj8Qg4Z9rNo zi*xUHdDwKhnq9y@Mv1iFrZPoE&TAomE+^e!%Ga1K2j@WWM&1UB%@ONqAX*%=@P@yy2pVtN?QCfBqazv%zd@fPi8dBd z@#B2^&>T7R@=-A%pxOjYY4Fms%wKXSC1_D@pFBaoVLJ&aErU2gEkiR%qS*>BX1i_4QYMr56zy}f|lL+Ua5>;|& zMV;}mOuMDk&eTrhe+sw~3qlZ6STW%(YNFJ!Os&$DCI2eMV70o-rCqL6PLPVcn!wBY zTOud3=N`N)k(Df2*L%;iVA%UUu;1nCt*ulG3Dh1e&pf{Q_)-qk;&s#05L~&nMs!`z z!52QZUv%leBf0JkP0KMp?uT4Jw|A;$^CU4OcR9SAQMg<%vAjNl>tgwH>~^!PK8W5E zP$o%MXS*)iTS_ZyPkg`B7DT4ij-Q1lY%uMG=Oy4|#hWtRAfv{_3JLAm)~TiI-PTcX z*;De<9S=LIWyJ6YbbLMQJe`HU@e1blcH~LIj1ap<={z3to z+#Gg4e_oDVCJsA}99$)pB?bg=S&vB-+qY0SpKZ)HoedWAmZci+v?z>ZHAZC_UXL}D zgYCiLlZ3O%XKfd6rvZ{gK5wZe7b>Ye=UKVu8y8(Z`j*c3L!BQEM5~soZf*v%iUU0# z)?Lo;Y3D`?5|lNuq1ZZGyYZmn_iag0_U2+t?V2MmoT z<>3B%2^z2@`m-}QgkfNxUa~!2#JeV&FkDu*uLN5h?^k}Ct%80oH!dDX29w5@x^?}9 z@IBLB|D%Ww`d!|nJ6|8O$=4L4O%48~-Bz0C>A0sbL?k9;0GdJ#pEPEED3RjEm_{Vs zx=H+o3mQrc)63?=0&KbSxwV3KVxVJMIehvbPhr|Qqa5OuSF-bbkJaTnXm9=Aj+DQp zX%(C^s6QET5Neu{p8>m~sg&=NtN?JA(yR~lJ$hg>aCf-qns9^1vtJ8p96VGXo|Aby zS-eTnU;_OGM5sW`{^c%I+49HDGCL;84iZ3T%g4Ftvf3-HQ759ypxlKi!kku#FxIrH zkvwuKY%LPnWGPIedFS9d`@Ft7Co{>z%a|UR^~|4Ms0---^!rL4-fJ5TuhRcu5iCi% z>K$^*PXb1bM;z-1Vn>T*g z^5XQP?}XthAndAxg8v>ebA=H|4`qpE4$ z@@|vpB;Ey=PISwKwk~TVUIb>#2g)fj4j>^R1%2?V0$?G8Wt2V-{mI7IwNWRHqWQep zJ_Z({Y|uged49618CD}S|B^iBND>c7Nb8NV)AbvxwOS;%q5q|RDgt+uY-EV7KV~mV z&bLXsL&nrXEObqt2N5Z>Xe3s_PYJ%ZHT};&jq6fdi=fgR z!Su;I%jOU37Zcc6STk!;LMk}4;7fCW=IWs7;r@I6B_j5N+i44IiiN~qJy5^tdJg}9o{O8b<)O!P%z5o2(|9xl+6ry2R;jxLyY+;G9RaF$uQ+H5!;QpO8wGxk}MPeeU z-%2?Pcvf;autx=4LR;gBDPud^=AQ|H2;1s=4!qLi zNk?JLX;|pOv1KD+bUlu-ntqRWV!+e=!KW4KkZr zst8}s{S^F9`#aGp_5Y&!uAL}ObOc*Loue%gJ`H(+SmVrRr5Qe^dPDB5KjU>1e4_Z* zH2K;U8$Xm$!VjJ@<@%-lxd(%fb&?`{n}}e+nIg3am|*?CfW(SG(0{yVzt@fm1bgfV zUN>AvRsICZ`7TBJ@h{qd{Tf#7gdd7;2$D}E?|S^~d18f_>(>0)v7CPc7+cj88_hA1 zyO5G3Gb3~7LgprZR?Emxb~Qh}_yub;Y9}b5HEloIxEofMXEZ zYrgo{!8IBbRMs4qSVV)|KoxygV#fe%)Fib)Iz)i{Xof8JgM|36d6MqvRTK#D920mw zr$o~~-XD<$Hh!fN@Vw4$2csl!*&f-(fD+Im{YMsZvKx+v%5hUGe>oHJtds{L_EIis z713Mv+&F5@t zG+4R1LP37r{9v6?)LCI`2i%94EJkHq5dV5mY2M>|ih@PfALlVe54P_1q80chnx6Ed_!H$H)T(GSAR5fA%-`=e6fY`oKQ4^$&GpvzjsnCE1d;~~P%rfEv3@&o z)qX!x&+){cto8ElMoO!j8B6VqOsD9(a$W*o6nbL4DPJUNQUZZq4k^sOLIh;|0%kEU zPPa!YDO25r8;baEu|NQVkXi2_2&iginHQM<6k%Gk zZyr@r2=j??XBjxGf>R6Tw^k`iUR}d5`tsDiNwgCrNJ}dGSDu)v(VCl$e*6kM01u4Wouk0k$<7ir^e|Jk>h0CXjkM^YMmXfS7j2pkafHBl zy#gkqcBujkZULzf4_vGQ;hE|ja>a#AGoL1khp2Y8#69ntsd>Hn|46P*3#c`#V~!{0?IfrzBjUb0H_A*pQ-6iOZ`Pc{oTBFhIzrBUF@Z1OFxLgTzW52i^2p-7uwdV@(DG_3MZ08|DH5B2X% zTp-t@!S`RfA@?reztqqF?=X7^J+;g?0G{`sF|-IlJJf2_-#r7T&SGY)1^ru-)O%m8 z&R=I^z$k!)`Ik)if34I1&0+THjWKaxT8Kka=^nZuRmbb7V@F2$zVXXjcbKf3m~rJk zeEViw~bZnU67!t#xVk7!iY*uYF7nq-)zQl?#%V?A;ZFHr< zLZ{2K32LGP>#~4sFcSY9{NnAy3_?4@O8)PF`{1Ro&&IqERL zI_N5)3Wl3EW>AG8e_gkf_BLzc#4*9w2Fyjyr-(Kc4psG(B>(cPpTx_enr*qixK!-C zS(X~5r@13}RLFJ5Cm{fBtar{r41W~3Kz0>rc|^g|gx-deuziw1wkQy6ph6EpPfH#y zXp0jIL|NAPa$2RGOss6hG$2VO04JE5;Lo)%b9QPqawM)>5wgbA^<|C;=VV!t!Dwbt zc2d_(*5~vljluIqSxsR`M4De>uxefsSGGV}qDIMNv5KZl;BdssuF626NI@c5=M9cQ zK!OSyMFOS;%sW&Fsof?+so9FE>ps^YU35$g4G5nTLHxI%8O<(<9_@3Dvc{R}?kcLX z5ZX3d`@uMcwflv2XY=~3z`$CnI%RpMZcK%IGE@FFQJxizfi`Bv^LMX>H=VQ(-LWXE zi9hi^)SQAe1&95W#9!{npVJ+}LrN2XB3aST8)iY|znweQ96S)je+Yhv5Pt+sXRY6P z!T}KXp7puQPkW~rz+z;5_MFK+EZyHXq3=8kcU+p!GgwS18+>{=7+`3PDlHLN>^!*R zcRXH;9=jI&?Ulpg^8qACuv)lPIL8hOTxn`La|KWg?q=uLu;m)SW<>nswVR54L?fGw z;Yls{M&yK9bOqZ#L?^tr+t)BqpvV~9vvr39i(Dyr1l{h-mZ(Hrp7?A6Gko`%(&U4x zb`ur*aEcYLdX1FHh%9K|wLalCmD9D?H9+iMc8y511WgM(OgvX}_xf9-I9!g_-Kl=S z+y%xp^m?vNDdt99B6a`S)$X`g)=@V_p-^W6O=8vMGc4J2&{pYR#mBs}80T%PF2hVTu# zy4gEbB3@4Z>_)OyH;a9-AC=hR{dKN^bct{3>-xOTLQZjqR5bZ3c*;7McsqdHo6(n|7NnMTT*0HzI4Ducs0uEw4;}h*)Xh z6UTO~Fslr|rslbkHp!Z6O`uDGe3d64_|10<)Q8C%`I2zhEf>R%PKsZrtK^=YK`>w4 zNi(@l`fqz5p~tb$S038;;rEKF=HN>A3XKLQ7A0|gD!7w8D~fbMMczJ)*>i4}$q({2AWhB$mY{&-rUN8^+hhZ1b}KQE4_{WU?JZZ%en8U!NchwzQ_#>^wECGB~;JmA)SHQKzmSo9sO9uIF4 z$*6Vm2o!;-+<1MskbnUFR@gD8VwFi<>AW!$EJ^sn>|PX?I@PWRx*YWQqTSY>+i32* zf^QamckX0Wm(cn*rKt%2>qn&W)+Ut^mAct0Kj3{fUL5IfIg#n0=4hhk&@CWc0C?*w z%yTm`zm0+i&<#2~ysoT4`ca;{Y4fY*$}+Ox9iGU6ziqi;kRU-@(Baa}XBR8I^eO{X z!BY+KJE&WJsC|LEAnx2i4E<;3uG2Ku#Re9ep|agGjbVIiP3p?D%pxhXO|Jxn{ZBoO44&T7S+q}ez+LSHNXUG=_kp;r5h6OpU@Lr{yw z2j6|f!6#%$emm-Rvh#>Z>*oX)?K(@Qv-_LVJ%$ zpdum>s9B{F)de3f*{1f?B&Ny7uG8%og(ROO72d;mnF-UXuf8jU?`C_d&YKWbvWvW* zf%3RL+d|j-2E$0HDn!oopt^R7xGtYCj50!3g2IOU4=V6!;m)0c$W3s;3Clg5hm!50 z3J=87aP?Og57;*$UGIGjIzG+uahkGo#HM*TGtlpo!e7ib^gNkd#yg){6|&383Z|FO z=0@w1H|z)`Z=kSA&nY%z2F4>21Z_oaO-k3l%ru~b%)xVE#hsdi9PW&fgln~Q20CSO zzqO9!hh4LLPRd>bG9D`l?^mNwKG?CP?U5_;E(7gjVm^P)9Z-L!K|kMsvI2ruXnFuZ zUJGpZh;S1p<@ctZ4I1`mS5F|`?SwiBpDIL|pcLxp%dd?huF)2ID!tejGnU9<7DH;P zsg`LQ3};l2v4S}IV>bcA6Z0I^Cc>zaK~#yQ&~pz|4$q#JhA*gsZMI6YO~MAw+zoc+ zcSKaCy(|<)MKD~B!@mzUszZZ}FkhqgZpjqy_P*!S#MH8XhXi%1QGg6ZCQ*7D3BYb6 z39&9+&If<{!PD+k=$p>OD|O$$JGp_IO@WPG--HjGwc$EFhvwIH{0T#;TdNaN9mma^ z4Nzd@5g9;-Z>E6dgW&fE!G@Ez^GZ8k=NZhqBXyj@4w&$IKksXmV#*bL6LuP>_Jtyz zKdrY?_KLm##LKF|6Y|GUU~TA%qE(&07~Bejd%NTIR;hkvpYXQA`}&J;Z#&~Ta`awI z;N_m=b&uo@zOB9`>@$yz&q?dEXV(gPF1+$IZr&`k9r+)k3w^Ix<#pdO48f0|FXPqI zrILgipMF&*!Ug%tKt90C}TDhlK8XIp+WuXio%(vi*2_kM*l!#nz$isjvf$|*~+Boj5IEQ7k zwmu1xlEvaP3-RRCO#Qs9s6hn++8eE zPEok4(25rJHIS#9a(KQ!vRzDb`$*u-_Io~*V`BYt2@1*-Ea(u9yGt58-F!2ikU|%p z3zhg?Gn`g+A(KlpN@akO?B#Uvp`_>JJc{wgJf>W7G?t*J&ACsF9z)u!&7M)POD(q= zv20!M>GDq-io4;u4;QmyE0QN0&x<_AIu1*D{}Zy12auDlcn2NGaIor3$WWyf8!Rf8 z?KkKlZqtK~mToMMk3%9K3!X^{+M+isYdUFGD^e1*Jh!ISk$#uCm21d3$rgC1R@nIL z+}B$j4$lpV0!A}}UuxQ`N_nqpFVfL`BSu|^a!lu9?IG3Nx+*QZ9CNl)EW{v5`vzUy zZf6y#^-jV_uSiAAEGx!h5x;W(f7FBZQ&}F~#^rV%{aIUdk*G}4><&4V@;d(cM$1SO zRp*(nGTnZ02Ms{m6QV7$4K)&uI%m9k9U|c?=aerV{jr zWH*f`nveSzS05KfGnG$ok*(LuRZud}~{hjbc zzslDSCm!uM3IRt+l{kCU%Qhb^Y^{?_mm`_?8&0zoPhKrmwGmh;)`y+$?LqG#i1Af7 zo0agwIC9kjgaSB++N^f;>t-836@37$gHng)zTb&oZQ=zoohvO{Li4C0j!xY^D zd1%7u#Fp39TXaN8t+etN%1pZ+dji$(Urfz+ z6DUy7{Wa&?QA6DXe-(S#E>+>RnM#FT}`L@7y*YKeE>Z7!_6S1EfL zeY-BkPLt!8)CX%Yzh^t8mlaS+Q^Ayd;fE{!lKWWz29pZy^Ov6NUf7=051;w9zFgVy z%X26Z3yu1r`3a&ImVix<3u@3WR=ED;N|%MfkVkgN^xkkS$FXjVJ}tWpT#RL5Yhg>e z>uD$d`0^!eOi4akD&)1ZuA^Bq($t$(gZ_l^%NMvGUQVepZ}RwK)St%NK+m>056Zj+ zaV-#)`H|cHhSsC^jR&9J+rnYrY*L0}cS}O53v-;KKY31YZWjlwM0P2=D734%-g3{y zqXj=6Tiz``@9!lH75C|j)AUI7jRjK*^3iqw^;@gt!W=!{Z>B2Nld8g$ z5x>m#w~b|ioHsT4$>yUC&sjufjrQH|K)Rs)6|K8+zH(*=Y3{;ns#yD$I%P6#J%qg# zq4JKwLJW{8;VwNtI(yjXexU?$+poEyCF^@Nv-g%%kFLBL@Bzv0$|Q8!!sVD=4&pvM zs_7c@J3QC(=qf8aQvT14!RAg`WDbgiO&;y)%tAu`A?ThY44Uhr=*$vwqVN=p!txeh zzV!bPx2uxW4-xbA5@ygNFtr_N{TZSDm@nizD@`-5>c(6R_6O_R$( zW1Vc}D+}jg-ka=Ui`0&Vsz^o!eCgV)Fr0ILGJ?6lKK?BGk-(&=m;+xE!gF*E$=C@#* zT#GAax8?oN$g)(OFy1E)*PRHS8FGefg{a;5Ow$$Uk`KG|-F_%$PkYX1vzz5uP0iwGD^MOC^Sl-h@#xF zTd#gV$bE0l1R(`3>))P9J^t}}eX|2=HQ^nGRyU84^?jOLSuFM+-ZQl~viMjIqsc{3RfyA{#1KcT%*>qf%Ado@hQlKb9~9 z0&rurx=Z6_PFyM~TM{LNek|GJ$Qc4Q^kpY@fkYkT!S{{ zHJ0$mxR9%Mg{UM$X&4q}f1n%JJ|GT!f zR-sf0kIA)0ZO%Q!R=S?tW{hqHUXQes1>wWyB#XYGZ~pP{WXC7p4!D4k0g)EF9SX%x z6g6&0cC};Ya~{xX;#qU!4%;&|C@1yO6afT6A=;$}f%rXR04fU5l>k6t2I~9N0{?&d zA$#z?yq4_YdAt=31o9>Q^=s@tebD~%@etP4pr~yBL N#D!&qssw-f|1Z499TNZm diff --git a/blueprints/data-solutions/data-platform-foundations/outputs.tf b/blueprints/data-solutions/data-platform-foundations/outputs.tf index b941776cb0..b91077d1eb 100644 --- a/blueprints/data-solutions/data-platform-foundations/outputs.tf +++ b/blueprints/data-solutions/data-platform-foundations/outputs.tf @@ -21,7 +21,6 @@ output "bigquery-datasets" { dwh-landing-bq-0 = module.dwh-lnd-bq-0.dataset_id, dwh-curated-bq-0 = module.dwh-cur-bq-0.dataset_id, dwh-confidential-bq-0 = module.dwh-conf-bq-0.dataset_id, - dwh-plg-bq-0 = module.dwh-plg-bq-0.dataset_id, } } @@ -44,7 +43,6 @@ output "gcs-buckets" { dwh-landing-cs-0 = module.dwh-lnd-cs-0.name, dwh-curated-cs-0 = module.dwh-cur-cs-0.name, dwh-confidential-cs-0 = module.dwh-conf-cs-0.name, - dwh-plg-cs-0 = module.dwh-plg-cs-0.name, drop-cs-0 = module.drop-cs-0.name, lod-cs-df = module.load-cs-df-0.name, orch-cs-0 = module.orch-cs-0.name, @@ -64,7 +62,6 @@ output "projects" { dwh-landing = module.dwh-lnd-project.number, dwh-curated = module.dwh-cur-project.number, dwh-confidential = module.dwh-conf-project.number, - dwh-plg = module.dwh-plg-project.number, exposure = module.exp-project.number, dropoff = module.drop-project.number, load = module.load-project.number, @@ -75,7 +72,6 @@ output "projects" { dwh-landing = module.dwh-lnd-project.project_id, dwh-curated = module.dwh-cur-project.project_id, dwh-confidential = module.dwh-conf-project.project_id, - dwh-plg = module.dwh-plg-project.project_id, exposure = module.exp-project.project_id, dropoff = module.drop-project.project_id, load = module.load-project.project_id, diff --git a/blueprints/data-solutions/data-platform-foundations/variables.tf b/blueprints/data-solutions/data-platform-foundations/variables.tf index 80e7b65cf4..f930de1f05 100644 --- a/blueprints/data-solutions/data-platform-foundations/variables.tf +++ b/blueprints/data-solutions/data-platform-foundations/variables.tf @@ -22,14 +22,47 @@ variable "billing_account_id" { variable "composer_config" { description = "Cloud Composer config." type = object({ - node_count = number - airflow_version = string - env_variables = map(string) + disable_deployment = optional(bool) + environment_size = string + software_config = object({ + airflow_config_overrides = optional(any) + pypi_packages = optional(any) + env_variables = optional(map(string)) + image_version = string + }) + workloads_config = object({ + scheduler = object( + { + cpu = number + memory_gb = number + storage_gb = number + count = number + } + ) + web_server = object( + { + cpu = number + memory_gb = number + storage_gb = number + } + ) + worker = object( + { + cpu = number + memory_gb = number + storage_gb = number + min_count = number + max_count = number + } + ) + }) }) default = { - node_count = 3 - airflow_version = "composer-1-airflow-2" - env_variables = {} + environment_size = "ENVIRONMENT_SIZE_SMALL" + software_config = { + image_version = "composer-2-airflow-2" + } + workloads_config = null } } @@ -84,7 +117,6 @@ variable "network_config" { composer_ip_ranges = object({ cloudsql = string gke_master = string - web_server = string }) composer_secondary_ranges = object({ pods = string diff --git a/fast/stages/03-data-platform/dev/README.md b/fast/stages/03-data-platform/dev/README.md index 12db8d2923..10638e2766 100644 --- a/fast/stages/03-data-platform/dev/README.md +++ b/fast/stages/03-data-platform/dev/README.md @@ -31,13 +31,13 @@ The Data Platform manages: As per our GCP best practices the Data Platform relies on user groups to assign roles to human identities. These are the specific groups used by the Data Platform and their access patterns, from the [module documentation](../../../../blueprints/data-solutions/data-platform-foundations/#groups): - *Data Engineers* They handle and run the Data Hub, with read access to all resources in order to troubleshoot possible issues with pipelines. This team can also impersonate any service account. -- *Data Analysts*. They perform analysis on datasets, with read access to the data warehouse Curated or Confidential projects depending on their privileges, and BigQuery READ/WRITE access to the playground project. +- *Data Analysts*. They perform analysis on datasets, with read access to the data warehouse Curated or Confidential projects depending on their privileges. - *Data Security*:. They handle security configurations related to the Data Hub. This team has admin access to the common project to configure Cloud DLP templates or Data Catalog policy tags. -|Group|Landing|Load|Transformation|Data Warehouse Landing|Data Warehouse Curated|Data Warehouse Confidential|Data Warehouse Playground|Orchestration|Common| -|-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| -|Data Engineers|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`| -|Data Analysts|-|-|-|-|-|`READ`|`READ`/`WRITE`|-|-| +|Group|Landing|Load|Transformation|Data Warehouse Landing|Data Warehouse Curated|Data Warehouse Confidential|Orchestration|Common| +|-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|Data Engineers|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`|`ADMIN`| +|Data Analysts|-|-|-|-|-|`READ`|-|-| |Data Security|-|-|-|-|-|-|-|-|`ADMIN`| ### Network diff --git a/fast/stages/03-data-platform/dev/main.tf b/fast/stages/03-data-platform/dev/main.tf index 24abb58d98..53d901d1be 100644 --- a/fast/stages/03-data-platform/dev/main.tf +++ b/fast/stages/03-data-platform/dev/main.tf @@ -37,7 +37,6 @@ module "data-platform" { composer_ip_ranges = { cloudsql = var.network_config_composer.cloudsql_range gke_master = var.network_config_composer.gke_master_range - web_server = var.network_config_composer.web_server_range } composer_secondary_ranges = { pods = var.network_config_composer.gke_pods_name diff --git a/fast/stages/03-data-platform/dev/variables.tf b/fast/stages/03-data-platform/dev/variables.tf index 9495316a91..29dd1e45a4 100644 --- a/fast/stages/03-data-platform/dev/variables.tf +++ b/fast/stages/03-data-platform/dev/variables.tf @@ -34,14 +34,47 @@ variable "billing_account" { variable "composer_config" { description = "Cloud Composer configuration options." type = object({ - node_count = number - airflow_version = string - env_variables = map(string) + disable_deployment = optional(bool) + environment_size = string + software_config = object({ + airflow_config_overrides = optional(any) + pypi_packages = optional(any) + env_variables = optional(map(string)) + image_version = string + }) + workloads_config = object({ + scheduler = object( + { + cpu = number + memory_gb = number + storage_gb = number + count = number + } + ) + web_server = object( + { + cpu = number + memory_gb = number + storage_gb = number + } + ) + worker = object( + { + cpu = number + memory_gb = number + storage_gb = number + min_count = number + max_count = number + } + ) + }) }) default = { - node_count = 3 - airflow_version = "composer-1.17.5-airflow-2.1.4" - env_variables = {} + environment_size = "ENVIRONMENT_SIZE_SMALL" + software_config = { + image_version = "composer-2-airflow-2" + } + workloads_config = null } } @@ -101,14 +134,12 @@ variable "network_config_composer" { gke_master_range = string gke_pods_name = string gke_services_name = string - web_server_range = string }) default = { cloudsql_range = "192.168.254.0/24" gke_master_range = "192.168.255.0/28" gke_pods_name = "pods" gke_services_name = "services" - web_server_range = "192.168.255.16/28" } } diff --git a/tests/blueprints/data_solutions/data_platform_foundations/test_plan.py b/tests/blueprints/data_solutions/data_platform_foundations/test_plan.py index 1b51472cdc..17563647c1 100644 --- a/tests/blueprints/data_solutions/data_platform_foundations/test_plan.py +++ b/tests/blueprints/data_solutions/data_platform_foundations/test_plan.py @@ -21,5 +21,5 @@ def test_resources(e2e_plan_runner): "Test that plan works and the numbers of resources is as expected." modules, resources = e2e_plan_runner(FIXTURES_DIR) - assert len(modules) == 41 - assert len(resources) == 315 + assert len(modules) == 38 + assert len(resources) == 285 From c172c7bb2e3c12c42232d7b9603b9424f5fb082b Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 11 Jan 2023 00:31:58 +0100 Subject: [PATCH 2/7] Remove plg project and update to composer 2 --- .../data-solutions/data-platform-foundations/outputs.tf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blueprints/data-solutions/data-platform-foundations/outputs.tf b/blueprints/data-solutions/data-platform-foundations/outputs.tf index b91077d1eb..2394fe09e1 100644 --- a/blueprints/data-solutions/data-platform-foundations/outputs.tf +++ b/blueprints/data-solutions/data-platform-foundations/outputs.tf @@ -25,12 +25,12 @@ output "bigquery-datasets" { } output "demo_commands" { - description = "Demo commands." + description = "Demo commands. Relevant only if Composer is deployed." value = { 01 = "gsutil -i ${module.drop-sa-cs-0.email} cp demo/data/*.csv gs://${module.drop-cs-0.name}" - 02 = "gsutil -i ${module.orch-sa-cmp-0.email} cp demo/data/*.j* gs://${module.orch-cs-0.name}" - 03 = "gsutil -i ${module.orch-sa-cmp-0.email} cp demo/*.py ${google_composer_environment.orch-cmp-0.config[0].dag_gcs_prefix}/" - 04 = "Open ${google_composer_environment.orch-cmp-0.config.0.airflow_uri} and run uploaded DAG." + 02 = try("gsutil -i ${module.orch-sa-cmp-0.email} cp demo/data/*.j* gs://${module.orch-cs-0.name}", "Composer not deployed.") + 03 = try("gsutil -i ${module.orch-sa-cmp-0.email} cp demo/*.py ${google_composer_environment.orch-cmp-0[0].config[0].dag_gcs_prefix}/", "Composer not deployed") + 04 = try("Open ${google_composer_environment.orch-cmp-0[0].config.0.airflow_uri} and run uploaded DAG.", "Composer not deployed") 05 = < Date: Wed, 11 Jan 2023 08:47:42 +0100 Subject: [PATCH 3/7] Fix documentation. --- .../data-platform-foundations/README.md | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/blueprints/data-solutions/data-platform-foundations/README.md b/blueprints/data-solutions/data-platform-foundations/README.md index b2cd82b45e..099f7ca98c 100644 --- a/blueprints/data-solutions/data-platform-foundations/README.md +++ b/blueprints/data-solutions/data-platform-foundations/README.md @@ -245,31 +245,31 @@ You can find examples in the `[demo](./demo)` folder. | name | description | type | required | default | |---|---|:---:|:---:|:---:| | [billing_account_id](variables.tf#L17) | Billing account id. | string | ✓ | | -| [folder_id](variables.tf#L53) | Folder to be used for the networking resources in folders/nnnn format. | string | ✓ | | -| [organization_domain](variables.tf#L98) | Organization domain. | string | ✓ | | -| [prefix](variables.tf#L103) | Prefix used for resource names. | string | ✓ | | -| [composer_config](variables.tf#L22) | Cloud Composer config. | object({…}) | | {…} | -| [data_catalog_tags](variables.tf#L36) | List of Data Catalog Policy tags to be created with optional IAM binging configuration in {tag => {ROLE => [MEMBERS]}} format. | map(map(list(string))) | | {…} | -| [data_force_destroy](variables.tf#L47) | Flag to set 'force_destroy' on data services like BiguQery or Cloud Storage. | bool | | false | -| [groups](variables.tf#L58) | User groups. | map(string) | | {…} | -| [location](variables.tf#L68) | Location used for multi-regional resources. | string | | "eu" | -| [network_config](variables.tf#L74) | Shared VPC network configurations to use. If null networks will be created in projects with preconfigured values. | object({…}) | | null | -| [project_services](variables.tf#L112) | List of core services enabled on all projects. | list(string) | | […] | -| [project_suffix](variables.tf#L123) | Suffix used only for project ids. | string | | null | -| [region](variables.tf#L129) | Region used for regional resources. | string | | "europe-west1" | -| [service_encryption_keys](variables.tf#L135) | Cloud KMS to use to encrypt different services. Key location should match service region. | object({…}) | | null | +| [folder_id](variables.tf#L86) | Folder to be used for the networking resources in folders/nnnn format. | string | ✓ | | +| [organization_domain](variables.tf#L130) | Organization domain. | string | ✓ | | +| [prefix](variables.tf#L135) | Prefix used for resource names. | string | ✓ | | +| [composer_config](variables.tf#L22) | Cloud Composer config. | object({…}) | | {…} | +| [data_catalog_tags](variables.tf#L69) | List of Data Catalog Policy tags to be created with optional IAM binging configuration in {tag => {ROLE => [MEMBERS]}} format. | map(map(list(string))) | | {…} | +| [data_force_destroy](variables.tf#L80) | Flag to set 'force_destroy' on data services like BiguQery or Cloud Storage. | bool | | false | +| [groups](variables.tf#L91) | User groups. | map(string) | | {…} | +| [location](variables.tf#L101) | Location used for multi-regional resources. | string | | "eu" | +| [network_config](variables.tf#L107) | Shared VPC network configurations to use. If null networks will be created in projects with preconfigured values. | object({…}) | | null | +| [project_services](variables.tf#L144) | List of core services enabled on all projects. | list(string) | | […] | +| [project_suffix](variables.tf#L155) | Suffix used only for project ids. | string | | null | +| [region](variables.tf#L161) | Region used for regional resources. | string | | "europe-west1" | +| [service_encryption_keys](variables.tf#L167) | Cloud KMS to use to encrypt different services. Key location should match service region. | object({…}) | | null | ## Outputs | name | description | sensitive | |---|---|:---:| | [bigquery-datasets](outputs.tf#L17) | BigQuery datasets. | | -| [demo_commands](outputs.tf#L28) | Demo commands. | | -| [gcs-buckets](outputs.tf#L41) | GCS buckets. | | -| [kms_keys](outputs.tf#L55) | Cloud MKS keys. | | -| [projects](outputs.tf#L60) | GCP Projects informations. | | -| [vpc_network](outputs.tf#L88) | VPC network. | | -| [vpc_subnet](outputs.tf#L97) | VPC subnetworks. | | +| [demo_commands](outputs.tf#L27) | Demo commands. Relevant only if Composer is deployed. | | +| [gcs-buckets](outputs.tf#L40) | GCS buckets. | | +| [kms_keys](outputs.tf#L53) | Cloud MKS keys. | | +| [projects](outputs.tf#L58) | GCP Projects informations. | | +| [vpc_network](outputs.tf#L84) | VPC network. | | +| [vpc_subnet](outputs.tf#L93) | VPC subnetworks. | | ## TODOs From a5f4e0883d47bb5c30ed8a0ccbf6805bb649a0f2 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 11 Jan 2023 08:56:58 +0100 Subject: [PATCH 4/7] Fix FAST documentation. --- fast/stages/03-data-platform/dev/README.md | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/fast/stages/03-data-platform/dev/README.md b/fast/stages/03-data-platform/dev/README.md index 10638e2766..35f9bf1c51 100644 --- a/fast/stages/03-data-platform/dev/README.md +++ b/fast/stages/03-data-platform/dev/README.md @@ -168,22 +168,22 @@ You can find examples in the `[demo](../../../../blueprints/data-solutions/data- |---|---|:---:|:---:|:---:|:---:| | [automation](variables.tf#L17) | Automation resources created by the bootstrap stage. | object({…}) | ✓ | | 00-bootstrap | | [billing_account](variables.tf#L25) | Billing account id and organization id ('nnnnnnnn' or null). | object({…}) | ✓ | | 00-globals | -| [folder_ids](variables.tf#L65) | Folder to be used for the networking resources in folders/nnnn format. | object({…}) | ✓ | | 01-resman | -| [host_project_ids](variables.tf#L83) | Shared VPC project ids. | object({…}) | ✓ | | 02-networking | -| [organization](variables.tf#L115) | Organization details. | object({…}) | ✓ | | 00-globals | -| [prefix](variables.tf#L131) | Unique prefix used for resource names. Not used for projects if 'project_create' is null. | string | ✓ | | 00-globals | -| [composer_config](variables.tf#L34) | Cloud Composer configuration options. | object({…}) | | {…} | | -| [data_catalog_tags](variables.tf#L48) | List of Data Catalog Policy tags to be created with optional IAM binging configuration in {tag => {ROLE => [MEMBERS]}} format. | map(map(list(string))) | | {…} | | -| [data_force_destroy](variables.tf#L59) | Flag to set 'force_destroy' on data services like BigQery or Cloud Storage. | bool | | false | | -| [groups](variables.tf#L73) | Groups. | map(string) | | {…} | | -| [location](variables.tf#L91) | Location used for multi-regional resources. | string | | "eu" | | -| [network_config_composer](variables.tf#L97) | Network configurations to use for Composer. | object({…}) | | {…} | | -| [outputs_location](variables.tf#L125) | Path where providers, tfvars files, and lists for the following stages are written. Leave empty to disable. | string | | null | | -| [project_services](variables.tf#L137) | List of core services enabled on all projects. | list(string) | | […] | | -| [region](variables.tf#L148) | Region used for regional resources. | string | | "europe-west1" | | -| [service_encryption_keys](variables.tf#L154) | Cloud KMS to use to encrypt different services. Key location should match service region. | object({…}) | | null | | -| [subnet_self_links](variables.tf#L166) | Shared VPC subnet self links. | object({…}) | | null | 02-networking | -| [vpc_self_links](variables.tf#L175) | Shared VPC self links. | object({…}) | | null | 02-networking | +| [folder_ids](variables.tf#L98) | Folder to be used for the networking resources in folders/nnnn format. | object({…}) | ✓ | | 01-resman | +| [host_project_ids](variables.tf#L116) | Shared VPC project ids. | object({…}) | ✓ | | 02-networking | +| [organization](variables.tf#L146) | Organization details. | object({…}) | ✓ | | 00-globals | +| [prefix](variables.tf#L162) | Unique prefix used for resource names. Not used for projects if 'project_create' is null. | string | ✓ | | 00-globals | +| [composer_config](variables.tf#L34) | Cloud Composer configuration options. | object({…}) | | {…} | | +| [data_catalog_tags](variables.tf#L81) | List of Data Catalog Policy tags to be created with optional IAM binging configuration in {tag => {ROLE => [MEMBERS]}} format. | map(map(list(string))) | | {…} | | +| [data_force_destroy](variables.tf#L92) | Flag to set 'force_destroy' on data services like BigQery or Cloud Storage. | bool | | false | | +| [groups](variables.tf#L106) | Groups. | map(string) | | {…} | | +| [location](variables.tf#L124) | Location used for multi-regional resources. | string | | "eu" | | +| [network_config_composer](variables.tf#L130) | Network configurations to use for Composer. | object({…}) | | {…} | | +| [outputs_location](variables.tf#L156) | Path where providers, tfvars files, and lists for the following stages are written. Leave empty to disable. | string | | null | | +| [project_services](variables.tf#L168) | List of core services enabled on all projects. | list(string) | | […] | | +| [region](variables.tf#L179) | Region used for regional resources. | string | | "europe-west1" | | +| [service_encryption_keys](variables.tf#L185) | Cloud KMS to use to encrypt different services. Key location should match service region. | object({…}) | | null | | +| [subnet_self_links](variables.tf#L197) | Shared VPC subnet self links. | object({…}) | | null | 02-networking | +| [vpc_self_links](variables.tf#L206) | Shared VPC self links. | object({…}) | | null | 02-networking | ## Outputs From 07a975f84eaad148131724d8eda7e05460c73173 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 11 Jan 2023 12:37:08 +0100 Subject: [PATCH 5/7] Fix example test. --- blueprints/data-solutions/data-platform-foundations/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/data-solutions/data-platform-foundations/README.md b/blueprints/data-solutions/data-platform-foundations/README.md index 099f7ca98c..06efe80447 100644 --- a/blueprints/data-solutions/data-platform-foundations/README.md +++ b/blueprints/data-solutions/data-platform-foundations/README.md @@ -219,7 +219,7 @@ module "data-platform" { prefix = "myprefix" } -# tftest modules=42 resources=316 +# tftest modules=39 resources=286 ``` ## Customizations From 50a52ae01a7362559970522f6b64b96fa7593317 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Thu, 12 Jan 2023 12:41:00 +0100 Subject: [PATCH 6/7] Implement PR comments. --- .../data-platform-foundations/IAM.md | 74 +++++++++---------- .../data-platform-foundations/README.md | 6 +- .../data-platform-foundations/variables.tf | 58 ++++++++++++--- 3 files changed, 83 insertions(+), 55 deletions(-) diff --git a/blueprints/data-solutions/data-platform-foundations/IAM.md b/blueprints/data-solutions/data-platform-foundations/IAM.md index 60b033003b..5a1995da90 100644 --- a/blueprints/data-solutions/data-platform-foundations/IAM.md +++ b/blueprints/data-solutions/data-platform-foundations/IAM.md @@ -2,97 +2,89 @@ Legend: + additive, conditional. -## Project lc-2301-cmn +## Project cmn | members | roles | |---|---| |gcp-data-analysts
group|[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer) | |gcp-data-engineers
group|[roles/dlp.estimatesAdmin](https://cloud.google.com/iam/docs/understanding-roles#dlp.estimatesAdmin)
[roles/dlp.reader](https://cloud.google.com/iam/docs/understanding-roles#dlp.reader)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | |gcp-data-security
group|[roles/datacatalog.admin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.admin)
[roles/dlp.admin](https://cloud.google.com/iam/docs/understanding-roles#dlp.admin) | -|lc-2301-load-df-0
serviceAccount|[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | -|lc-2301-trf-bq-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer) | -|lc-2301-trf-df-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | +|load-df-0
serviceAccount|[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | +|trf-bq-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer) | +|trf-df-0
serviceAccount|[roles/datacatalog.categoryFineGrainedReader](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryFineGrainedReader)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/dlp.user](https://cloud.google.com/iam/docs/understanding-roles#dlp.user) | -## Project lc-2301-drp +## Project drp | members | roles | |---|---| |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/pubsub.editor](https://cloud.google.com/iam/docs/understanding-roles#pubsub.editor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | -|lc-2301-drp-bq-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | -|lc-2301-drp-cs-0
serviceAccount|[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | -|lc-2301-drp-ps-0
serviceAccount|[roles/pubsub.publisher](https://cloud.google.com/iam/docs/understanding-roles#pubsub.publisher) | -|lc-2301-load-df-0
serviceAccount|[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|lc-2301-orc-cmp-0
serviceAccount|[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|drp-bq-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | +|drp-cs-0
serviceAccount|[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | +|drp-ps-0
serviceAccount|[roles/pubsub.publisher](https://cloud.google.com/iam/docs/understanding-roles#pubsub.publisher) | +|load-df-0
serviceAccount|[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|orc-cmp-0
serviceAccount|[roles/pubsub.subscriber](https://cloud.google.com/iam/docs/understanding-roles#pubsub.subscriber)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -## Project lc-2301-dwh-conf +## Project dwh-conf | members | roles | |---|---| |gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|lc-2301-load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | -|lc-2301-trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | -|lc-2301-trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | +|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | +|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -## Project lc-2301-dwh-cur +## Project dwh-cur | members | roles | |---|---| |gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|lc-2301-load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | -|lc-2301-trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | -|lc-2301-trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|load-df-0
serviceAccount|[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | +|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | +|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -## Project lc-2301-dwh-lnd +## Project dwh-lnd | members | roles | |---|---| |gcp-data-analysts
group|[roles/bigquery.dataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataViewer)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|lc-2301-load-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | -|lc-2301-trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | -|lc-2301-trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner) | +|load-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/storage.objectCreator](https://cloud.google.com/iam/docs/understanding-roles#storage.objectCreator) | +|trf-bq-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner)
[roles/datacatalog.categoryAdmin](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.categoryAdmin) | +|trf-df-0
serviceAccount|[roles/bigquery.dataOwner](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataOwner) | -## Project lc-2301-dwh-plg - -| members | roles | -|---|---| -|gcp-data-analysts
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/bigquery.metadataViewer](https://cloud.google.com/iam/docs/understanding-roles#bigquery.metadataViewer)
[roles/bigquery.user](https://cloud.google.com/iam/docs/understanding-roles#bigquery.user)
[roles/datacatalog.tagTemplateViewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.tagTemplateViewer)
[roles/datacatalog.viewer](https://cloud.google.com/iam/docs/understanding-roles#datacatalog.viewer)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | -|SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| - -## Project lc-2301-lod +## Project lod | members | roles | |---|---| |gcp-data-engineers
group|[roles/compute.viewer](https://cloud.google.com/iam/docs/understanding-roles#compute.viewer)
[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin)
[roles/dataflow.developer](https://cloud.google.com/iam/docs/understanding-roles#dataflow.developer)
[roles/viewer](https://cloud.google.com/iam/docs/understanding-roles#viewer) | |SERVICE_IDENTITY_dataflow-service-producer-prod
serviceAccount|[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|lc-2301-load-df-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin)
[roles/dataflow.worker](https://cloud.google.com/iam/docs/understanding-roles#dataflow.worker)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|lc-2301-orc-cmp-0
serviceAccount|[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | +|load-df-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin)
[roles/dataflow.worker](https://cloud.google.com/iam/docs/understanding-roles#dataflow.worker)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|orc-cmp-0
serviceAccount|[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | -## Project lc-2301-orc +## Project orc | members | roles | |---|---| |gcp-data-engineers
group|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/cloudbuild.builds.editor](https://cloud.google.com/iam/docs/understanding-roles#cloudbuild.builds.editor)
[roles/composer.admin](https://cloud.google.com/iam/docs/understanding-roles#composer.admin)
[roles/composer.environmentAndStorageObjectAdmin](https://cloud.google.com/iam/docs/understanding-roles#composer.environmentAndStorageObjectAdmin)
[roles/iam.serviceAccountUser](https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountUser)
[roles/iap.httpsResourceAccessor](https://cloud.google.com/iam/docs/understanding-roles#iap.httpsResourceAccessor)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | |SERVICE_IDENTITY_cloudcomposer-accounts
serviceAccount|[roles/composer.ServiceAgentV2Ext](https://cloud.google.com/iam/docs/understanding-roles#composer.ServiceAgentV2Ext)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|lc-2301-load-df-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | -|lc-2301-orc-cmp-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/composer.worker](https://cloud.google.com/iam/docs/understanding-roles#composer.worker)
[roles/iam.serviceAccountUser](https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountUser)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | -|lc-2301-trf-df-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | +|load-df-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor)
[roles/storage.objectViewer](https://cloud.google.com/iam/docs/understanding-roles#storage.objectViewer) | +|orc-cmp-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/composer.worker](https://cloud.google.com/iam/docs/understanding-roles#composer.worker)
[roles/iam.serviceAccountUser](https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountUser)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|trf-df-0
serviceAccount|[roles/bigquery.dataEditor](https://cloud.google.com/iam/docs/understanding-roles#bigquery.dataEditor) | -## Project lc-2301-trf +## Project trf | members | roles | |---|---| |gcp-data-engineers
group|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser)
[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | |SERVICE_IDENTITY_dataflow-service-producer-prod
serviceAccount|[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | |SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| -|lc-2301-orc-cmp-0
serviceAccount|[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | -|lc-2301-trf-bq-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | -|lc-2301-trf-df-0
serviceAccount|[roles/dataflow.worker](https://cloud.google.com/iam/docs/understanding-roles#dataflow.worker)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | +|orc-cmp-0
serviceAccount|[roles/dataflow.admin](https://cloud.google.com/iam/docs/understanding-roles#dataflow.admin) | +|trf-bq-0
serviceAccount|[roles/bigquery.jobUser](https://cloud.google.com/iam/docs/understanding-roles#bigquery.jobUser) | +|trf-df-0
serviceAccount|[roles/dataflow.worker](https://cloud.google.com/iam/docs/understanding-roles#dataflow.worker)
[roles/storage.objectAdmin](https://cloud.google.com/iam/docs/understanding-roles#storage.objectAdmin) | diff --git a/blueprints/data-solutions/data-platform-foundations/README.md b/blueprints/data-solutions/data-platform-foundations/README.md index 06efe80447..982661d683 100644 --- a/blueprints/data-solutions/data-platform-foundations/README.md +++ b/blueprints/data-solutions/data-platform-foundations/README.md @@ -21,7 +21,7 @@ The approach adapts to different high-level requirements: - least privilege principle - rely on service account impersonation -The code in this blueprint doesn't address Organization-level configurations (Organization policy, VPC-SC, centralized logs). We expect those elements to be managed by automation stages external to this script like those in [FAST](../../../fast) and this blueprint deployed on top of them as one of the [stage](../../../fast/stages/03-data-platform/dev/README.md). +The code in this blueprint doesn't address Organization-level configurations (Organization policy, VPC-SC, centralized logs). We expect those elements to be managed by automation stages external to this script like those in [FAST](../../../fast) and this blueprint deployed on top of them as one of the [stages](../../../fast/stages/03-data-platform/dev/README.md). ### Project structure @@ -39,13 +39,13 @@ This separation into projects allows adhering to the least-privilege principle b The script will create the following projects: - **Drop off** Used to store temporary data. Data is pushed to Cloud Storage, BigQuery, or Cloud PubSub. Resources are configured with a customizable lifecycle policy. -- **Load** Used to load data from the drop off zone to the data warehouse. The load is made with minimal to zero transformation logic (mainly `cast`). Anonymization or tokenization of Personally Identifiable Information (PII) can be implemented here or in the transformation stage, depending on your requirements. The use of [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates) is recommended. When you need to handle workloads from different teams, if strong role separation is needed between them, we suggests to customize the scirpt and have separate `Load` projects. +- **Load** Used to load data from the drop off zone to the data warehouse. The load is made with minimal to zero transformation logic (mainly `cast`). Anonymization or tokenization of Personally Identifiable Information (PII) can be implemented here or in the transformation stage, depending on your requirements. The use of [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates) is recommended. When you need to handle workloads from different teams, if strong role separation is needed between them, we suggest to customize the scirpt and have separate `Load` projects. - **Data Warehouse** Several projects distributed across 3 separate layers, to host progressively processed and refined data: - **Landing - Raw data** Structured Data, stored in relevant formats: structured data stored in BigQuery, unstructured data stored on Cloud Storage with additional metadata stored in BigQuery (for example pictures stored in Cloud Storage and analysis of the images for Cloud Vision API stored in BigQuery). - **Curated - Cleansed, aggregated and curated data** - **Confidential - Curated and unencrypted layer** - **Orchestration** Used to host Cloud Composer, which orchestrates all tasks that move data across layers. -- **Transformation** Used to move data between Data Warehouse layers. We strongly suggest relying on BigQuery Engine to perform the transformations. If BigQuery doesn't have the features needed to perform your transformations, you can use Cloud Dataflow with [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates). This stage can also optionally anonymize or tokenize PII. When you need to handle workloads from different teams, if strong role separation is needed between them, we suggests to customize the scirpt and have separate `Tranformation` projects. +- **Transformation** Used to move data between Data Warehouse layers. We strongly suggest relying on BigQuery Engine to perform the transformations. If BigQuery doesn't have the features needed to perform your transformations, you can use Cloud Dataflow with [Cloud Dataflow templates](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates). This stage can also optionally anonymize or tokenize PII. When you need to handle workloads from different teams, if strong role separation is needed between them, we suggest to customize the scirpt and have separate `Tranformation` projects. - **Exposure** Used to host resources that share processed data with external systems. Depending on the access pattern, data can be presented via Cloud SQL, BigQuery, or Bigtable. For BigQuery data, we strongly suggest relying on [Authorized views](https://cloud.google.com/bigquery/docs/authorized-views). ### Roles diff --git a/blueprints/data-solutions/data-platform-foundations/variables.tf b/blueprints/data-solutions/data-platform-foundations/variables.tf index f930de1f05..6c25406a2f 100644 --- a/blueprints/data-solutions/data-platform-foundations/variables.tf +++ b/blueprints/data-solutions/data-platform-foundations/variables.tf @@ -23,30 +23,41 @@ variable "composer_config" { description = "Cloud Composer config." type = object({ disable_deployment = optional(bool) - environment_size = string - software_config = object({ + environment_size = optional(string, "ENVIRONMENT_SIZE_SMALL") + software_config = optional(object({ airflow_config_overrides = optional(any) pypi_packages = optional(any) env_variables = optional(map(string)) image_version = string + }), { + image_version = "composer-2-airflow-2" }) - workloads_config = object({ - scheduler = object( + workloads_config = optional(object({ + scheduler = optional(object( { cpu = number memory_gb = number storage_gb = number count = number } - ) - web_server = object( + ), { + cpu = 0.5 + memory_gb = 1.875 + storage_gb = 1 + count = 1 + }) + web_server = optional(object( { cpu = number memory_gb = number storage_gb = number } - ) - worker = object( + ), { + cpu = 0.5 + memory_gb = 1.875 + storage_gb = 1 + }) + worker = optional(object( { cpu = number memory_gb = number @@ -54,15 +65,40 @@ variable "composer_config" { min_count = number max_count = number } - ) - }) + ), { + cpu = 0.5 + memory_gb = 1.875 + storage_gb = 1 + min_count = 1 + max_count = 3 + }) + })) }) default = { environment_size = "ENVIRONMENT_SIZE_SMALL" software_config = { image_version = "composer-2-airflow-2" } - workloads_config = null + workloads_config = { + scheduler = { + cpu = 0.5 + memory_gb = 1.875 + storage_gb = 1 + count = 1 + } + web_server = { + cpu = 0.5 + memory_gb = 1.875 + storage_gb = 1 + } + worker = { + cpu = 0.5 + memory_gb = 1.875 + storage_gb = 1 + min_count = 1 + max_count = 3 + } + } } } From 1672cfe9c14ca9eb39b8fac6fb6c90e5bf9fead6 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Thu, 12 Jan 2023 12:45:39 +0100 Subject: [PATCH 7/7] Fix README. --- .../data-platform-foundations/README.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/blueprints/data-solutions/data-platform-foundations/README.md b/blueprints/data-solutions/data-platform-foundations/README.md index 982661d683..ed28eba6f4 100644 --- a/blueprints/data-solutions/data-platform-foundations/README.md +++ b/blueprints/data-solutions/data-platform-foundations/README.md @@ -245,19 +245,19 @@ You can find examples in the `[demo](./demo)` folder. | name | description | type | required | default | |---|---|:---:|:---:|:---:| | [billing_account_id](variables.tf#L17) | Billing account id. | string | ✓ | | -| [folder_id](variables.tf#L86) | Folder to be used for the networking resources in folders/nnnn format. | string | ✓ | | -| [organization_domain](variables.tf#L130) | Organization domain. | string | ✓ | | -| [prefix](variables.tf#L135) | Prefix used for resource names. | string | ✓ | | -| [composer_config](variables.tf#L22) | Cloud Composer config. | object({…}) | | {…} | -| [data_catalog_tags](variables.tf#L69) | List of Data Catalog Policy tags to be created with optional IAM binging configuration in {tag => {ROLE => [MEMBERS]}} format. | map(map(list(string))) | | {…} | -| [data_force_destroy](variables.tf#L80) | Flag to set 'force_destroy' on data services like BiguQery or Cloud Storage. | bool | | false | -| [groups](variables.tf#L91) | User groups. | map(string) | | {…} | -| [location](variables.tf#L101) | Location used for multi-regional resources. | string | | "eu" | -| [network_config](variables.tf#L107) | Shared VPC network configurations to use. If null networks will be created in projects with preconfigured values. | object({…}) | | null | -| [project_services](variables.tf#L144) | List of core services enabled on all projects. | list(string) | | […] | -| [project_suffix](variables.tf#L155) | Suffix used only for project ids. | string | | null | -| [region](variables.tf#L161) | Region used for regional resources. | string | | "europe-west1" | -| [service_encryption_keys](variables.tf#L167) | Cloud KMS to use to encrypt different services. Key location should match service region. | object({…}) | | null | +| [folder_id](variables.tf#L122) | Folder to be used for the networking resources in folders/nnnn format. | string | ✓ | | +| [organization_domain](variables.tf#L166) | Organization domain. | string | ✓ | | +| [prefix](variables.tf#L171) | Prefix used for resource names. | string | ✓ | | +| [composer_config](variables.tf#L22) | Cloud Composer config. | object({…}) | | {…} | +| [data_catalog_tags](variables.tf#L105) | List of Data Catalog Policy tags to be created with optional IAM binging configuration in {tag => {ROLE => [MEMBERS]}} format. | map(map(list(string))) | | {…} | +| [data_force_destroy](variables.tf#L116) | Flag to set 'force_destroy' on data services like BiguQery or Cloud Storage. | bool | | false | +| [groups](variables.tf#L127) | User groups. | map(string) | | {…} | +| [location](variables.tf#L137) | Location used for multi-regional resources. | string | | "eu" | +| [network_config](variables.tf#L143) | Shared VPC network configurations to use. If null networks will be created in projects with preconfigured values. | object({…}) | | null | +| [project_services](variables.tf#L180) | List of core services enabled on all projects. | list(string) | | […] | +| [project_suffix](variables.tf#L191) | Suffix used only for project ids. | string | | null | +| [region](variables.tf#L197) | Region used for regional resources. | string | | "europe-west1" | +| [service_encryption_keys](variables.tf#L203) | Cloud KMS to use to encrypt different services. Key location should match service region. | object({…}) | | null | ## Outputs