64 lines
2.1 KiB
HCL
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 = "sereact"
|
|
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 = "sereact"
|
|
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 = "sereact"
|
|
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
|
|
} |