Skip to content

Instantly share code, notes, and snippets.

@rbrto
Created August 18, 2020 00:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rbrto/33f82c7af087d14d4b95513a7cc2b19a to your computer and use it in GitHub Desktop.
Save rbrto/33f82c7af087d14d4b95513a7cc2b19a to your computer and use it in GitHub Desktop.
Dead letter topic module
data "google_project" "project" {}
resource "google_pubsub_topic" "topic" {
name = var.topic
project = var.project_id
}
resource "google_pubsub_topic" "dead_letter_topic" {
name = var.dead_letter_topic
project = var.project_id
}
resource "google_pubsub_subscription" "pull_subscriptions" {
for_each = { for subscription in var.pull_subscriptions : subscription.name => subscription }
name = lookup(each.value, "name")
topic = google_pubsub_topic.topic.name
project = var.project_id
ack_deadline_seconds = lookup(each.value, "ack_deadline_seconds", 100)
dead_letter_policy {
dead_letter_topic = google_pubsub_topic.dead_letter_topic.id
max_delivery_attempts = lookup(each.value, "max_delivery_attempts", 10)
}
depends_on = ["google_pubsub_topic.topic"]
}
resource "google_pubsub_subscription" "dead_letter_subscription" {
name = var.dead_letter_subscription
topic = google_pubsub_topic.dead_letter_topic.name
project = var.project_id
ack_deadline_seconds = var.dead_letter_ack_deadline_seconds
retain_acked_messages = var.dead_letter_retain_acked_messages
message_retention_duration = var.dead_letter_message_retention_duration
expiration_policy {
ttl = ""
}
depends_on = ["google_pubsub_topic.dead_letter_topic"]
}
resource "google_pubsub_topic_iam_member" "topic_iam_member" {
topic = google_pubsub_topic.dead_letter_topic.name
role = "roles/pubsub.publisher"
member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
}
resource "google_pubsub_subscription_iam_member" "subscription_iam_member" {
for_each = { for subscription in var.pull_subscriptions : subscription.name => subscription }
subscription = "projects/mktp-vision-testing/subscriptions/${each.value.name}"
role = "roles/pubsub.subscriber"
member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
depends_on = ["google_pubsub_subscription.pull_subscriptions"]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment