sample-deployments/composer-orchestrated-process/main.tf (199 lines of code) (raw):

# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. provider "google" { project = var.project_id user_project_override = true billing_project = var.project_id default_labels = local.dpu_label } locals { processing_cloud_run_job_name = "ms-office-doc-processor" classifier_cloud_run_job_name = "doc-classifier" dpu_label = { goog-packaged-solution : "eks-solution" } } module "common_infra" { source = "../../components/common-infra/terraform" project_id = var.project_id region = var.region create_vpc_network = var.create_vpc_network vpc_name = var.vpc_name serverless_connector_subnet = var.serverless_connector_subnet serverless_connector_subnet_range = var.serverless_connector_subnet_range } module "project_services" { source = "github.com/terraform-google-modules/terraform-google-project-factory.git//modules/project_services?ref=ff00ab5032e7f520eb3961f133966c6ced4fd5ee" # commit hash of version 17.0.0 project_id = var.project_id disable_services_on_destroy = false disable_dependent_services = false activate_apis = [ "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "iam.googleapis.com", "aiplatform.googleapis.com", "discoveryengine.googleapis.com" ] } resource "google_discovery_engine_data_store" "dpu_ds" { project = module.project_services.project_id location = var.vertex_ai_data_store_region data_store_id = "eks-data-store" display_name = "Enterprise Knowledge Store" industry_vertical = "GENERIC" content_config = "CONTENT_REQUIRED" solution_types = ["SOLUTION_TYPE_SEARCH"] create_advanced_site_search = false document_processing_config { default_parsing_config { layout_parsing_config {} } } } resource "google_discovery_engine_search_engine" "basic" { project = module.project_services.project_id # TODO: Change this engine_id = "ent-search-agent" collection_id = "default_collection" location = var.vertex_ai_data_store_region display_name = "Enterprise Search Agent" data_store_ids = [google_discovery_engine_data_store.dpu_ds.data_store_id] search_engine_config { search_tier = "SEARCH_TIER_ENTERPRISE" search_add_ons = ["SEARCH_ADD_ON_LLM"] } } module "processor" { source = "../../components/processing/terraform" project_id = var.project_id region = var.region repository_region = var.region artifact_repo = module.common_infra.artifact_repo.name cloud_build_service_account_email = module.common_infra.cloud_build_service_account.email processing_cloud_run_job_name = local.processing_cloud_run_job_name } module "doc_classifier_job" { source = "../../components/doc-classifier/terraform" project_id = var.project_id region = var.region artifact_repo = module.common_infra.artifact_repo.name cloud_build_service_account_email = module.common_infra.cloud_build_service_account.email classifier_cloud_run_job_name = local.classifier_cloud_run_job_name vpc_network_name = module.common_infra.vpc_network_name serverless_connector_subnet = module.common_infra.serverless_connector_subnet } module "specialized_parser_job" { source = "../../components/specialized-parser/terraform" project_id = var.project_id region = var.region processors_location = var.docai_location artifact_repo = module.common_infra.artifact_repo.name bigquery_dataset_id = module.common_infra.bq_store_dataset_id alloydb_instance = module.common_infra.alloydb_primary_instance alloydb_cluster = module.common_infra.alloydb_cluster_name vpc_network_name = module.common_infra.vpc_network_name serverless_connector_subnet = module.common_infra.serverless_connector_subnet alloydb_cluster_ready = module.common_infra.alloydb_cluster_ready cloud_build_service_account_email = module.common_infra.cloud_build_service_account.email } module "dpu_workflow" { source = "../../components/dpu-workflow/terraform" region = var.region project_id = var.project_id vpc_network_name = module.common_infra.vpc_network_name vpc_network_id = module.common_infra.vpc_network_id composer_cidr = var.composer_cidr composer_env_variables = { DPU_OUTPUT_DATASET = module.common_infra.bq_store_dataset_id DPU_INPUT_BUCKET = module.common_infra.gcs_input_bucket_name DPU_PROCESS_BUCKET = module.common_infra.gcs_process_bucket_name DPU_REJECT_BUCKET = module.common_infra.gcs_reject_bucket_name DPU_REGION = var.region DPU_DATA_STORE_REGION = var.vertex_ai_data_store_region DOC_PROCESSOR_JOB_NAME = module.processor.processing_cloud_run_job_name DPU_DATA_STORE_ID = google_discovery_engine_data_store.dpu_ds.data_store_id DOC_CLASSIFIER_JOB_NAME = module.doc_classifier_job.classifier_cloud_run_job_name DOC_REGISTRY_JOB_NAME = module.doc_registry.doc_registry_service_cloud_run_job_name SPECIALIZED_PARSER_JOB_NAME = module.specialized_parser_job.specialized_parser_cloud_run_job_name SPECIALIZED_PROCESSORS_IDS_JSON = module.specialized_parser_job.specialized_processors_ids_json CUSTOM_CLASSIFIER_ID = var.custom_classifier_id } } module "dpu_ui" { source = "../../components/webui/terraform" project_id = var.project_id region = var.region artifact_repo = module.common_infra.artifact_repo.name cloud_build_service_account_email = module.common_infra.cloud_build_service_account.email iap_access_domains = var.iap_access_domains vertex_ai_data_store_region = var.vertex_ai_data_store_region agent_builder_data_store_id = google_discovery_engine_data_store.dpu_ds.data_store_id agent_builder_search_id = google_discovery_engine_search_engine.basic.engine_id lb_ssl_certificate_domains = var.webui_domains vpc_network_name = module.common_infra.vpc_network_name serverless_connector_subnet = module.common_infra.serverless_connector_subnet } # Depends on: input bucket, artefactory (registury_url), and docprocessor service account resource "local_file" "env_file" { filename = "${path.module}/../../.env" content = templatefile("${path.module}/env.template", { # Common infrastructure project_id = var.project_id, region = var.region, bq_region = var.region, gcs_region = var.region, repository_region = var.region, artifact_repo = module.common_infra.artifact_repo.name gcs_input_bucket = module.common_infra.gcs_input_bucket_name gcs_process_bucket = module.common_infra.gcs_process_bucket_name gcs_reject_bucket = module.common_infra.gcs_reject_bucket_name # Cloud run specific.. processing_cloud_run_job_name = local.processing_cloud_run_job_name processing_service_account = module.processor.doc_processor_service_account specialized_parser_cloud_run_job_name = module.specialized_parser_job.specialized_parser_cloud_run_job_name specialized_parser_service_account = module.specialized_parser_job.specialized_parser_service_account classifier_cloud_run_job_name = local.classifier_cloud_run_job_name classifier_service_account = module.doc_classifier_job.classifier_service_account # Agent builder agent_builder_location = var.vertex_ai_data_store_region agent_builder_data_store_id = google_discovery_engine_data_store.dpu_ds.data_store_id agent_builder_search_id = google_discovery_engine_search_engine.basic.engine_id }) } module "doc_registry" { source = "../../components/doc-registry/terraform" project_id = var.project_id region = var.region artifact_repo = module.common_infra.artifact_repo.name cloud_build_service_account_email = module.common_infra.cloud_build_service_account.email vpc_network_name = module.common_infra.vpc_network_name serverless_connector_subnet = module.common_infra.serverless_connector_subnet } module "doc-deletion" { source = "../../components/doc-deletion/terraform" project_id = var.project_id region = var.region artifact_repo = module.common_infra.artifact_repo.name alloydb_cluster_ready = module.common_infra.alloydb_cluster_ready alloy_db_cluster_id = module.common_infra.alloydb_cluster_name cloud_build_service_account_email = module.common_infra.cloud_build_service_account.email serverless_connector_subnet = module.common_infra.serverless_connector_subnet alloydb_primary_instance = module.common_infra.alloydb_primary_instance vpc_network_name = module.common_infra.vpc_network_name data_store_project_id = var.project_id data_store_region = var.vertex_ai_data_store_region data_store_id = google_discovery_engine_data_store.dpu_ds.data_store_id } module "post-setup-config" { source = "../../components/post-setup-config/terraform" project_id = var.project_id region = var.region artifact_repo = module.common_infra.artifact_repo.name alloydb_cluster_ready = module.common_infra.alloydb_cluster_ready alloy_db_cluster_id = module.common_infra.alloydb_cluster_name cloud_build_service_account_email = module.common_infra.cloud_build_service_account.email serverless_connector_subnet = module.common_infra.serverless_connector_subnet alloydb_primary_instance = module.common_infra.alloydb_primary_instance vpc_network_name = module.common_infra.vpc_network_name db_role_content_hash = sha512(join("", [ module.specialized_parser_job.db_role_content_hash, module.doc-deletion.db_role_content_hash ])) additional_db_users = [ module.specialized_parser_job.specialized_parser_db_user, module.doc-deletion.doc_deletion_db_user, ] }