/** * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ locals { cloudsql_conf = { database_version = "MYSQL_8_0" tier = "db-g1-small" db = "wp-mysql" user = "admin" } iam_roles = [ "roles/cloudsql.admin", "roles/cloudsql.client", "roles/cloudsql.instanceUser", "roles/logging.admin", "roles/iam.serviceAccountUser", "roles/iam.serviceAccountTokenCreator" ] connector = var.connector == null ? google_vpc_access_connector.connector.0.self_link : var.connector wp_user = "user" wp_pass = var.wordpress_password == null ? random_password.wp_password.result : var.wordpress_password } resource "random_password" "wp_password" { length = 8 } module "project" { source = "../../../../modules/project" name = var.project_id parent = try(var.project_create.parent, null) billing_account = try(var.project_create.billing_account_id, null) project_create = var.project_create != null prefix = var.project_create == null ? null : var.prefix iam = ( var.project_create != true || var.admin_principal == null ? {} : { for r in local.iam_roles : r => [var.admin_principal] } ) iam_bindings_additive = ( var.project_create == true || var.admin_principal == null ? {} : { for r in local.iam_roles : r => { member = var.admin_principal role = r } } ) services = [ "run.googleapis.com", "logging.googleapis.com", "monitoring.googleapis.com", "sqladmin.googleapis.com", "sql-component.googleapis.com", "vpcaccess.googleapis.com", "servicenetworking.googleapis.com" ] } module "cloud_run" { source = "../../../../modules/cloud-run" project_id = module.project.project_id name = "${var.prefix}-cr-wordpress" region = var.region containers = { wp = { image = var.wordpress_image ports = { http = { container_port = var.wordpress_port } } env = { APACHE_HTTP_PORT_NUMBER = var.wordpress_port WORDPRESS_DATABASE_HOST = module.cloudsql.ip WORDPRESS_DATABASE_NAME = local.cloudsql_conf.db WORDPRESS_DATABASE_USER = local.cloudsql_conf.user WORDPRESS_DATABASE_PASSWORD = ( var.cloudsql_password == null ? module.cloudsql.user_passwords[local.cloudsql_conf.user] : var.cloudsql_password ) WORDPRESS_USERNAME = local.wp_user WORDPRESS_PASSWORD = local.wp_pass } } } iam = { "roles/run.invoker" : [var.cloud_run_invoker] } revision_annotations = { autoscaling = { min_scale = 1 max_scale = 2 } # connect to CloudSQL cloudsql_instances = [module.cloudsql.connection_name] # allow all traffic vpcaccess_connector = local.connector vpcaccess_egress = "all-traffic" } ingress_settings = "all" }