diff --git a/mmv1/products/cgc/terraform.yaml b/mmv1/products/cgc/terraform.yaml index 6b5f8513b11e..664b6c93366d 100644 --- a/mmv1/products/cgc/terraform.yaml +++ b/mmv1/products/cgc/terraform.yaml @@ -72,6 +72,18 @@ overrides: !ruby/object:Overrides::ResourceOverrides primary_resource_id: "instance_virtual_display" vars: instance_virtual_display: "instance-virtual-display" + + # Eventarc + ### Eventarc Workflows quickstart + - !ruby/object:Provider::Terraform::Examples + name: "eventarc_workflows" + primary_resource_type: "google_eventarc_trigger" + primary_resource_id: "trigger_pubsub_tf" + vars: + pubsub_workflow_tf: "pubsub-workflow-tf" + trigger_pubsub_workflow_tf: "trigger-pubsub-workflow-tf" + min_version: beta + # SQL ### When including separate samples for each DB type, add `skip_test: true` ### for Postgres and MySQL, but not for SQL Server diff --git a/mmv1/templates/terraform/examples/eventarc_workflows.tf.erb b/mmv1/templates/terraform/examples/eventarc_workflows.tf.erb new file mode 100644 index 000000000000..3ceafd270695 --- /dev/null +++ b/mmv1/templates/terraform/examples/eventarc_workflows.tf.erb @@ -0,0 +1,101 @@ +# [START eventarc_terraform_enableapis] +# Used to retrieve project_number later +data "google_project" "project" { + provider = google-beta +} + +# Enable Eventarc API +resource "google_project_service" "eventarc" { + provider = google-beta + service = "eventarc.googleapis.com" + disable_on_destroy = false +} + +# Enable Pub/Sub API +resource "google_project_service" "pubsub" { + provider = google-beta + service = "pubsub.googleapis.com" + disable_on_destroy = false +} + +# Enable Workflows API +resource "google_project_service" "workflows" { + provider = google-beta + service = "workflows.googleapis.com" + disable_on_destroy = false +} + +# [END eventarc_terraform_enableapis] + +# [START eventarc_workflows_create_serviceaccount] + +# Create a service account for Eventarc trigger and Workflows +resource "google_service_account" "eventarc_workflows_service_account" { + provider = google-beta + account_id = "eventarc-workflows-sa" + display_name = "Eventarc Workflows Service Account" +} + +# Grant the logWriter role to the service account +resource "google_project_iam_binding" "project_binding_eventarc" { + provider = google-beta + project = data.google_project.project.id + role = "roles/logging.logWriter" + +members = ["serviceAccount:${google_service_account.eventarc_workflows_service_account.email}"] + + depends_on = [google_service_account.eventarc_workflows_service_account] +} + +# Grant the workflows.invoker role to the service account +resource "google_project_iam_binding" "project_binding_workflows" { + provider = google-beta + project = data.google_project.project.id + role = "roles/workflows.invoker" + +members = ["serviceAccount:${google_service_account.eventarc_workflows_service_account.email}"] + + depends_on = [google_service_account.eventarc_workflows_service_account] +} + +# [END eventarc_workflows_create_serviceaccount] + +# [START eventarc_workflows_deploy] +# Define and deploy a workflow +resource "google_workflows_workflow" "workflows_example" { + name = "<%= ctx[:vars]['pubsub_workflow_tf'] %>" + provider = google-beta + region = "us-central1" + description = "A sample workflow" + service_account = google_service_account.eventarc_workflows_service_account.id + # Imported main workflow YAML file + source_contents = templatefile("test-fixtures/workflow.yaml",{}) + + depends_on = [google_project_service.workflows, +google_service_account.eventarc_workflows_service_account] +} + +# [END eventarc_workflows_deploy] + +# [START eventarc_create_pubsub_trigger] +# Create an Eventarc trigger routing Pub/Sub events to Workflows +resource "google_eventarc_trigger" "<%= ctx[:primary_resource_id] %>" { + name = "<%= ctx[:vars]['trigger_pubsub_workflow_tf'] %>" + provider = google-beta + location = "us-central1" + matching_criteria { + attribute = "type" + value = "google.cloud.pubsub.topic.v1.messagePublished" + } + destination { + workflow = google_workflows_workflow.workflows_example.id + } + + + service_account = google_service_account.eventarc_workflows_service_account.id + + depends_on = [google_project_service.pubsub, google_project_service.eventarc, +google_service_account.eventarc_workflows_service_account] +} + +# [END eventarc_create_pubsub_trigger] diff --git a/mmv1/third_party/terraform/utils/test-fixtures/workflow.yaml b/mmv1/third_party/terraform/utils/test-fixtures/workflow.yaml new file mode 100644 index 000000000000..07d6c6ff1f22 --- /dev/null +++ b/mmv1/third_party/terraform/utils/test-fixtures/workflow.yaml @@ -0,0 +1,17 @@ +# This is a sample workflow that simply logs the incoming Pub/Sub event +# Note that $$ is needed for Terraform + +main: + params: [event] + steps: + - log_event: + call: sys.log + args: + text: $${event} + severity: INFO + - decode_pubsub_message: + assign: + - base64: $${base64.decode(event.data.data)} + - message: $${text.decode(base64)} + - return_pubsub_message: + return: $${message}