terraform/cloud-functions/per-project/main.tf (132 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. */ terraform { required_providers { google = { source = "hashicorp/google" version = "6.24.0" } } } provider "google" { project = var.project_id region = var.region } resource "google_service_account" "poller_sa" { account_id = "poller-sa" display_name = "Memorystore Cluster Autoscaler - Poller SA" } resource "google_service_account" "scaler_sa" { account_id = "scaler-sa" display_name = "Memorystore Cluster Autoscaler - Scaler SA" } module "autoscaler-base" { source = "../../modules/autoscaler-base" project_id = var.project_id poller_sa_email = google_service_account.poller_sa.email scaler_sa_email = google_service_account.scaler_sa.email } module "autoscaler-functions" { source = "../../modules/autoscaler-functions" project_id = var.project_id region = var.region poller_sa_email = google_service_account.poller_sa.email scaler_sa_email = google_service_account.scaler_sa.email build_sa_id = module.autoscaler-base.build_sa_id } module "autoscaler-firestore" { count = !var.terraform_spanner_state ? 1 : 0 source = "../../modules/autoscaler-firestore" project_id = local.app_project_id region = var.region firestore_state_database = var.firestore_state_database poller_sa_email = google_service_account.poller_sa.email scaler_sa_email = google_service_account.scaler_sa.email } module "autoscaler-spanner" { source = "../../modules/autoscaler-spanner" region = var.region project_id = var.project_id terraform_spanner_state = var.terraform_spanner_state spanner_state_name = var.spanner_state_name spanner_state_database = var.spanner_state_database poller_sa_email = google_service_account.poller_sa.email scaler_sa_email = google_service_account.scaler_sa.email } module "autoscaler-scheduler" { source = "../../modules/autoscaler-scheduler" project_id = var.project_id location = var.region memorystore_cluster_name = var.memorystore_cluster_name memorystore_engine = var.memorystore_engine pubsub_topic = module.autoscaler-functions.poller_topic target_pubsub_topic = module.autoscaler-functions.scaler_topic terraform_spanner_state = var.terraform_spanner_state spanner_state_name = var.spanner_state_name spanner_state_database = var.spanner_state_database firestore_state_database = var.firestore_state_database // Example of passing config as json // json_config = base64encode(jsonencode([{ // "projectId": "${var.project_id}", // "instanceId": "${module.autoscaler-memorystore-cluster.memorystore_cluster_name}", // "scalerPubSubTopic": "${module.autoscaler-functions.scaler_topic}", // "units": "SHARDS", // "minSize": 3 // "maxSize": 30, // "scalingMethod": "LINEAR" // }])) } module "autoscaler-network" { count = var.terraform_memorystore_cluster ? 1 : 0 source = "../../modules/autoscaler-network" region = var.region project_id = var.project_id ip_range = var.ip_range memorystore_engine = var.memorystore_engine // Required for PSC service class } module "autoscaler-memorystore-cluster" { source = "../../modules/autoscaler-memorystore-cluster" region = var.region project_id = var.project_id memorystore_cluster_name = var.memorystore_cluster_name network = var.terraform_memorystore_cluster ? one(module.autoscaler-network).network : null subnetwork = var.terraform_memorystore_cluster ? one(module.autoscaler-network).subnetwork : null dns_zone = var.terraform_memorystore_cluster ? one(module.autoscaler-network).dns_zone : null terraform_memorystore_cluster = var.terraform_memorystore_cluster poller_sa_email = google_service_account.poller_sa.email scaler_sa_email = google_service_account.scaler_sa.email memorystore_shard_count = var.memorystore_shard_count memorystore_replica_count = var.memorystore_replica_count memorystore_engine = var.memorystore_engine depends_on = [module.autoscaler-network] } module "autoscaler-test-vm" { count = var.terraform_test_vm && var.terraform_memorystore_cluster ? 1 : 0 source = "../../modules/autoscaler-test-vm" region = var.region project_id = var.project_id name = var.terraform_test_vm_name network = one(module.autoscaler-network).network subnetwork = one(module.autoscaler-network).subnetwork } module "autoscaler-monitoring" { count = var.terraform_dashboard ? 1 : 0 source = "../../modules/autoscaler-monitoring" region = var.region project_id = var.project_id memorystore_cluster_name = var.memorystore_cluster_name memorystore_engine = var.memorystore_engine }