terraform/lab5/main.tf (92 lines of code) (raw):

/** * Copyright 2021 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 region = var.region } locals { service_src = "garbage-collector" service_name = "${local.service_src}-service" bucket_images = "uploaded-pictures-${var.project_id}" bucket_thumbnails = "thumbnails-${var.project_id}" } # Enable services resource "google_project_service" "eventarc" { service = "eventarc.googleapis.com" disable_on_destroy = false } # !!!Don't forget to enable Audit Logs for Cloud Storage as well!!! # Assume that the container is already built with build.sh # Deploy to Cloud Run resource "google_cloud_run_service" "default" { name = local.service_name location = var.region autogenerate_revision_name = true template { spec { containers { image = "gcr.io/${var.project_id}/${local.service_name}" env { name = "BUCKET_IMAGES" value = local.bucket_images } env { name = "BUCKET_THUMBNAILS" value = local.bucket_thumbnails } } } } traffic { percent = 100 latest_revision = true } # Already enabled in Lab 2 #depends_on = [google_project_service.run] } # Make Cloud Run service publicly accessible resource "google_cloud_run_service_iam_member" "allUsers" { service = google_cloud_run_service.default.name location = google_cloud_run_service.default.location role = "roles/run.invoker" member = "allUsers" } # Used to retrieve project_number below data "google_project" "project" { } # 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" "default" { 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.delete" } 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] }