From 8e01fe1d2174b0a8e46d821129643c190d0cd496 Mon Sep 17 00:00:00 2001
From: Alexander Timmermann <alexander.timmermann@holi.social>
Date: Tue, 21 Jan 2025 12:33:46 +0100
Subject: [PATCH] feat(infra): add DLQ topic and retry policy for pubsub

---
 terraform/environments/pubsub.tf | 20 +++++++++++++++++++-
 terraform/environments/vars.tf   |  2 ++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/terraform/environments/pubsub.tf b/terraform/environments/pubsub.tf
index c8c6011..a8c1b36 100644
--- a/terraform/environments/pubsub.tf
+++ b/terraform/environments/pubsub.tf
@@ -1,8 +1,16 @@
+locals {
+  main_topic = local.is_production ? data.terraform_remote_state.okuna_common_state.outputs.google_pubsub_topic_okuna_production : data.terraform_remote_state.okuna_common_state.outputs.google_pubsub_topic_okuna_staging
+  dlq_topic  = local.is_production ? data.terraform_remote_state.okuna_common_state.outputs.google_pubsub_topic_okuna_production_dlq : data.terraform_remote_state.okuna_common_state.outputs.google_pubsub_topic_okuna_staging_dlq
+
+  max_attemts = 10
+  min_backoff = "2s"
+  max_backoff = "10s"
+}
 
 resource "google_pubsub_subscription" "holi-chat-integration-okuna-sub" {
   project = data.terraform_remote_state.holi_infra_state.outputs.shared_project_id
   name    = random_id.main.hex
-  topic   = local.environment_name == "production" ? data.terraform_remote_state.okuna_common_state.outputs.google_pubsub_topic_okuna_production : data.terraform_remote_state.okuna_common_state.outputs.google_pubsub_topic_okuna_staging
+  topic   = local.main_topic
 
   ack_deadline_seconds = 10 * 60 # 10 minutes, max. value
   expiration_policy {
@@ -16,4 +24,14 @@ resource "google_pubsub_subscription" "holi-chat-integration-okuna-sub" {
       service_account_email = data.terraform_remote_state.holi_chat_integration_common_state.outputs.function_service_account
     }
   }
+
+  retry_policy {
+    minimum_backoff = local.min_backoff
+    maximum_backoff = local.max_backoff
+  }
+
+  dead_letter_policy {
+    dead_letter_topic     = local.dlq_topic
+    max_delivery_attempts = local.max_attemts
+  }
 }
diff --git a/terraform/environments/vars.tf b/terraform/environments/vars.tf
index 0df1873..4193654 100644
--- a/terraform/environments/vars.tf
+++ b/terraform/environments/vars.tf
@@ -5,4 +5,6 @@ locals {
   environment_type = contains(["staging", "production"], local.environment) ? local.environment : "review"
 
   default_region = data.terraform_remote_state.holi_infra_state.outputs.default_region
+
+  is_production = local.environment_name == "production"
 }
-- 
GitLab