deprecated-code/terraform-modules/apis/tf-apis.tf (336 lines of code) (raw):

#################################################################################### # Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # 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. #################################################################################### #################################################################################### # Enables the APIs used by the resources # # Author: Adam Paternostro #################################################################################### terraform { required_providers { google = { source = "hashicorp/google-beta" version = "5.35.0" } } } #################################################################################### # Variables #################################################################################### variable "project_id" {} #################################################################################### # Enable Google APIs that are required # NOTE: There are lots of time delays so thing proprogate before use. # TODO: Reduce the time delays to a minimum (right now it works, just has a lot of 30 second delays) # gcloud services list --enabled (to see what is enabled if you click in the console) # # Reference: https://developers.google.com/apis-explorer (to get an API name) #################################################################################### resource "google_project_service" "enable_api_cloudresourcemanager" { project = var.project_id service = "cloudresourcemanager.googleapis.com" disable_dependent_services = true disable_on_destroy = true timeouts { create = "15m" } } resource "time_sleep" "enable_api_cloudresourcemanager_time_delay" { depends_on = [google_project_service.enable_api_cloudresourcemanager] create_duration = "30s" } # Service Management resource "google_project_service" "enable_api_servicemanagement" { project = var.project_id service = "servicemanagement.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_servicemanagement_time_delay" { depends_on = [google_project_service.enable_api_servicemanagement] create_duration = "30s" } # Org Policy resource "google_project_service" "enable_api_orgpolicy" { project = var.project_id service = "orgpolicy.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay,time_sleep.enable_api_servicemanagement_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_orgpolicy_time_delay" { depends_on = [google_project_service.enable_api_orgpolicy] create_duration = "30s" } # Compute resource "google_project_service" "enable_api_compute" { project = var.project_id service = "compute.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_compute_time_delay" { depends_on = [google_project_service.enable_api_compute] create_duration = "30s" } # BigQuery resource "google_project_service" "enable_api_bigquerystorage" { project = var.project_id service = "bigquerystorage.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_bigquerystorage_time_delay" { depends_on = [google_project_service.enable_api_bigquerystorage] create_duration = "30s" } resource "google_project_service" "enable_api_bigquerydatatransfer" { project = var.project_id service = "bigquerydatatransfer.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_bigquerystorage_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_bigquerydatatransfer_time_delay" { depends_on = [google_project_service.enable_api_bigquerydatatransfer] create_duration = "30s" } resource "google_project_service" "enable_api_bigqueryreservations" { project = var.project_id service = "bigqueryreservation.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_bigquerystorage_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_bigqueryreservations_time_delay" { depends_on = [google_project_service.enable_api_bigqueryreservations] create_duration = "30s" } resource "google_project_service" "enable_api_bigqueryconnection" { project = var.project_id service = "bigqueryconnection.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_bigquerystorage_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_bigqueryconnection_time_delay" { depends_on = [google_project_service.enable_api_bigqueryconnection] create_duration = "30s" } # Composer resource "google_project_service" "enable_api_composer" { project = var.project_id service = "composer.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_composer_time_delay" { depends_on = [google_project_service.enable_api_composer] create_duration = "30s" } # Dataproc resource "google_project_service" "enable_api_dataproc" { project = var.project_id service = "dataproc.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_dataproc_time_delay" { depends_on = [google_project_service.enable_api_dataproc] create_duration = "30s" } # Data Catalog resource "google_project_service" "enable_api_datacatalog" { project = var.project_id service = "datacatalog.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_datacatalog_time_delay" { depends_on = [google_project_service.enable_api_datacatalog] create_duration = "30s" } # Vertex AI resource "google_project_service" "enable_api_aiplatform" { project = var.project_id service = "aiplatform.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_aiplatform_time_delay" { depends_on = [google_project_service.enable_api_aiplatform] create_duration = "30s" } resource "google_project_service" "enable_api_notebooks" { project = var.project_id service = "notebooks.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_aiplatform_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_notebooks_time_delay" { depends_on = [google_project_service.enable_api_notebooks] create_duration = "30s" } # Spanner resource "google_project_service" "enable_api_spanner" { project = var.project_id service = "spanner.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_spanner_time_delay" { depends_on = [google_project_service.enable_api_spanner] create_duration = "30s" } # Dataflow resource "google_project_service" "enable_api_dataflow" { project = var.project_id service = "dataflow.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_dataflow_time_delay" { depends_on = [google_project_service.enable_api_dataflow] create_duration = "30s" } # Analytics Hub resource "google_project_service" "enable_api_analyticshub" { project = var.project_id service = "analyticshub.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_bigquerystorage_time_delay, time_sleep.enable_api_bigquerydatatransfer_time_delay, time_sleep.enable_api_bigqueryconnection_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_analyticshub_time_delay" { depends_on = [google_project_service.enable_api_analyticshub] create_duration = "5s" } # Cloud KMS resource "google_project_service" "enable_api_cloudkms" { project = var.project_id service = "cloudkms.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_cloudkms_time_delay" { depends_on = [google_project_service.enable_api_cloudkms] create_duration = "5s" } # Dataproc metastore (required for Dataplex, even though we do not create a metastore) resource "google_project_service" "enable_api_metastore" { project = var.project_id service = "metastore.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay, time_sleep.enable_api_datacatalog_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_metastore_time_delay" { depends_on = [google_project_service.enable_api_metastore] create_duration = "5s" } # Dataplex resource "google_project_service" "enable_api_dataplex" { project = var.project_id service = "dataplex.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay, time_sleep.enable_api_datacatalog_time_delay, time_sleep.enable_api_metastore_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_dataplex_time_delay" { depends_on = [google_project_service.enable_api_dataplex] create_duration = "5s" } # BigQuery Data Masking resource "google_project_service" "enable_api_bigquerydatapolicy" { project = var.project_id service = "bigquerydatapolicy.googleapis.com" disable_dependent_services = true disable_on_destroy = true depends_on = [time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_compute_time_delay, time_sleep.enable_api_datacatalog_time_delay] timeouts { create = "15m" } } resource "time_sleep" "enable_api_bigquerydatapolicy_time_delay" { depends_on = [google_project_service.enable_api_bigquerydatapolicy] create_duration = "5s" } #----------------------------------------------------------------------------------- # Overall Time Deplay for API Enable Commands (You must update this if you add a new API above) # https://registry.terraform.io/providers/hashicorp/time/latest/docs/resources/sleep # The APIs take some time to proprogate through the cloud #----------------------------------------------------------------------------------- resource "time_sleep" "time_sleep_enable_api" { create_duration = "90s" depends_on = [ time_sleep.enable_api_cloudresourcemanager_time_delay, time_sleep.enable_api_servicemanagement_time_delay, time_sleep.enable_api_orgpolicy_time_delay, time_sleep.enable_api_compute_time_delay, time_sleep.enable_api_bigquerystorage_time_delay, time_sleep.enable_api_bigquerydatatransfer_time_delay, time_sleep.enable_api_bigqueryreservations_time_delay, time_sleep.enable_api_bigqueryconnection_time_delay, time_sleep.enable_api_composer_time_delay, time_sleep.enable_api_dataproc_time_delay, time_sleep.enable_api_datacatalog_time_delay, time_sleep.enable_api_aiplatform_time_delay, time_sleep.enable_api_notebooks_time_delay, time_sleep.enable_api_spanner_time_delay, time_sleep.enable_api_dataflow_time_delay, time_sleep.enable_api_cloudkms_time_delay, ] }