[迎风奔雨] 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
}
浙公网安备 33010602011771号