terraform/basic/main.tf (91 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 * * 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. */ provider "google" { project = var.project_id } # Used to retrieve project_number later data "google_project" "project" { } # Enable Cloud Run API resource "google_project_service" "run" { service = "run.googleapis.com" disable_on_destroy = false } # Enable Eventarc API resource "google_project_service" "eventarc" { service = "eventarc.googleapis.com" disable_on_destroy = false } # Deploy Cloud Run service resource "google_cloud_run_service" "default" { name = "cloudrun-hello-tf" location = var.region template { spec { containers { image = "gcr.io/cloudrun/hello" } } } traffic { percent = 100 latest_revision = true } depends_on = [google_project_service.run] } # Create a Pub/Sub trigger resource "google_eventarc_trigger" "trigger-pubsub-tf" { name = "trigger-pubsub-tf" location = var.region matching_criteria { attribute = "type" value = "google.cloud.pubsub.topic.v1.messagePublished" } destination { cloud_run_service { service = google_cloud_run_service.default.name region = var.region } } service_account = "${data.google_project.project.number}-compute@developer.gserviceaccount.com" depends_on = [google_project_service.eventarc] } # Give default Compute service account eventarc.eventReceiver role resource "google_project_iam_binding" "project" { project = var.project_id role = "roles/eventarc.eventReceiver" members = [ "serviceAccount:${data.google_project.project.number}-compute@developer.gserviceaccount.com" ] } # Create an AuditLog for Cloud Storage trigger resource "google_eventarc_trigger" "trigger-auditlog-tf" { name = "trigger-auditlog-tf" location = var.region matching_criteria { attribute = "type" value = "google.cloud.audit.log.v1.written" } matching_criteria { attribute = "serviceName" value = "storage.googleapis.com" } matching_criteria { attribute = "methodName" value = "storage.objects.create" } destination { cloud_run_service { service = google_cloud_run_service.default.name region = var.region } } service_account = "${data.google_project.project.number}-compute@developer.gserviceaccount.com" depends_on = [google_project_service.eventarc] }