[迎风奔雨] terraform create pubsub and inputs

terragrunt.hcl

inputs = {
  topics = {
    topic1 = {
      name        = "topic-1"
      description = "First Pub/Sub topic"
      subscriptions = {
        sub1 = {
          name             = "subscription-1"
          description      = "First subscription for topic 1"
          dead_letter_topic = "dl-topic-1"
        }
        sub2 = {
          name             = "subscription-2"
          description      = "Second subscription for topic 1"
          dead_letter_topic = "dl-topic-1"
        }
      }
    }
    topic2 = {
      name        = "topic-2"
      description = "Second Pub/Sub topic"
      subscriptions = {
        sub1 = {
          name             = "subscription-1"
          description      = "First subscription for topic 2"
          dead_letter_topic = "dl-topic-2"
        }
        sub2 = {
          name             = "subscription-2"
          description      = "Second subscription for topic 2"
          dead_letter_topic = "dl-topic-2"
        }
      }
    }
  }
  
  regions = {
    region1 = {
      name        = "us-west1"
      description = "US West 1"
    }
    region2 = {
      name        = "us-east1"
      description = "US East 1"
    }
  }
}

terraform 

terraform {
  source = "git@alm-github.systems.hsbc:mycode/wcl/pubsub.git//deadletter?ref=master"
}

include {
  path = find_in_parent_folders()
}

variable "topics" {
  type = map(object({
    name          = string
    subscriptions = map(object({
      name             = string
      table_id         = string
      labels = map(string)
      message_retention_duration = string
      retain_acked_messages = bool
      ack_deadline_seconds = number
      expiration_policy = object({
        ttl = string
      })
      retry_policy = object({
        minimum_backoff     = string
        maximum_backoff     = string
        max_delivery_attempts = number
      })
      lifecycle = object({
        delete = object({
          days_since_last_acknowledgement = number
        })
      })
    }))
  }))
}

variable "regions" {
  type = map(object({
    name = string
  }))
}

variable "project" {
  type = string
}

variable "kms_key_name" {
  type = string
}

variable "schema_file" {
  type = string
}

variable "encoding" {
  type = string
}

variable "message_retention_duration" {
  type = string
}

variable "retain_acked_messages" {
  type = bool
}

variable "ack_deadline_seconds" {
  type = number
}

variable "ttl" {
  type = string
}

variable "minimum_backoff" {
  type = string
}

variable "maximum_backoff" {
  type = string
}

variable "max_delivery_attempts" {
  type = number
}

resource "google_pubsub_topic" "topics" {
  for_each = var.topics

  name    = each.value.name
  project = var.project
}

resource "google_pubsub_topic" "dead_letter_topics" {
  for_each = {
    for topic_key, topic_value in var.topics :
    for sub_key, sub_value in topic_value.subscriptions :
    "${topic_key}-${sub_key}" => {
      topic_key   = topic_key
      topic_value = topic_value
      sub_key     = sub_key
      sub_value   = sub_value
    }
  }

  name    = each.key
  project = var.project
}

resource "google_pubsub_subscription" "subscriptions" {
  for_each = {
    for topic_key, topic_value in var.topics :
    for sub_key, sub_value in topic_value.subscriptions :
    "${topic_key}-${sub_key}" => {
      topic_key   = topic_key
      topic_value = topic_value
      sub_key     = sub_key
      sub_value   = sub_value
    }
  }

  name                = each.value.sub_value.name
  topic               = google_pubsub_topic.topics[each.value.topic_key].name
  project             = var.project
  ack_deadline_seconds = each.value.sub_value.ack_deadline_seconds

  dead_letter_policy {
    dead_letter_topic = google_pubsub_topic.dead_letter_topics[each.key].name
    max_delivery_attempts = each.value.sub_value.dead_letter_policy.max_delivery_attempts
  }

  expiration_policy {
    ttl = each.value.sub_value.expiration_policy.ttl
  }

  retry_policy {
    minimum_backoff     = each.value.sub_value.retry_policy.minimum_backoff
    maximum_backoff     = each.value.sub_value.retry_policy.maximum_backoff
    max_delivery_attempts = each.value.sub_value.retry_policy.max_delivery_attempts
  }

  bigquery_config {
    table_id = each.value.sub_value.table_id
  }

  labels = each.value.sub_value.labels
}

  

 

posted on 2023-08-06 17:26  迎风奔雨  阅读(58)  评论(0)    收藏  举报

导航