2025-05-26 18:47:21 +02:00

64 lines
2.1 KiB
HCL

# Compute default service accounts
locals {
cloud_run_service_account = var.cloud_run_service_account != "" ? var.cloud_run_service_account : "${data.google_project.current.number}-compute@developer.gserviceaccount.com"
cloud_function_service_account = var.cloud_function_service_account != "" ? var.cloud_function_service_account : "${data.google_project.current.number}-compute@developer.gserviceaccount.com"
}
# Pub/Sub topic for image processing tasks
resource "google_pubsub_topic" "image_processing" {
name = var.pubsub_topic_name
labels = {
environment = var.environment
service = "contoso"
component = "image-processing"
}
}
# Dead letter queue for failed messages
resource "google_pubsub_topic" "image_processing_dlq" {
name = "${var.pubsub_topic_name}-dlq"
labels = {
environment = var.environment
service = "contoso"
component = "image-processing-dlq"
}
}
# Dead letter subscription for monitoring failed messages
resource "google_pubsub_subscription" "image_processing_dlq" {
name = "${var.pubsub_topic_name}-dlq-subscription"
topic = google_pubsub_topic.image_processing_dlq.name
# Long retention for failed messages
message_retention_duration = "2592000s" # 30 days
retain_acked_messages = true
labels = {
environment = var.environment
service = "contoso"
component = "image-processing-dlq"
}
}
# IAM binding for Cloud Run to publish to topic
resource "google_pubsub_topic_iam_binding" "image_processing_publisher" {
topic = google_pubsub_topic.image_processing.name
role = "roles/pubsub.publisher"
members = [
"serviceAccount:${local.cloud_run_service_account}",
]
}
# Output the topic and subscription names
output "pubsub_topic_name" {
description = "Name of the Pub/Sub topic for image processing"
value = google_pubsub_topic.image_processing.name
}
output "pubsub_dlq_topic_name" {
description = "Name of the dead letter queue topic"
value = google_pubsub_topic.image_processing_dlq.name
}