[迎风奔雨] terraform create pubsub and inputs

发布时间 2023-08-06 17:35:04作者: 迎风奔雨

terragrunt.hcl

---------------------------------------------------------------------------------------------------------------------------------------

inputs = {
topics = [
{
name = "my-topic-1"
subscriptions = [
{
name = "my-subscription-1"
bigquery_config = "my-table-1"
},
{
name = "my-subscription-2"
bigquery_config = "my-table-2"
}
]
},
{
name = "my-topic-2"
subscriptions = [
{
name = "my-subscription-3"
bigquery_config = "my-table-3"
},
{
name = "my-subscription-4"
bigquery_config = "my-table-4"
}
]
}
]
schema_file = "schema.avsc"
schema_bucket = "my-bucket"
encoding = "JSON"
type = "AVRO"
create_before_destroy = true
message_retention_duration = "604800s"
retain_acked_messages = true
ack_deadline_seconds = 60
ttl = "3600s"
minimum_backoff = "10s"
maximum_backoff = "300s"
maximum_attempts = 10
max_delivery_attempts = 5
}

 

---------------------------------------------------------------------------------------------------------------------------------------

terraform maint.tf 

---------------------------------------------------------------------------------------------------------------------------------------

# 定义多个 Pub/Sub Topic 和 Subscription
locals {
topics = [for topic in var.topics : {
name = topic.name
subscriptions = [for sub in topic.subscriptions : {
name = sub.name
bigquery_config = sub.bigquery_config
}]
}]
}

resource "google_pubsub_topic" "topics" {
for_each = { for topic in local.topics : topic.name => {} }

name = each.key

# 定义消息模式
schema_settings {
encoding = var.encoding
type = var.type
schema = file("${path.module}/${var.schema_file}")
}

# 配置资源生命周期
lifecycle {
create_before_destroy = var.create_before_destroy
}
}

resource "google_pubsub_subscription" "subscriptions" {
for_each = { for topic in local.topics : topic.subscriptions => topic.name }

topic = google_pubsub_topic.topics[each.key].id
name = each.value[count.index].name

# 配置消息保留时间、消息确认方式等
message_retention_duration = var.message_retention_duration
retain_acked_messages = var.retain_acked_messages
ack_deadline_seconds = var.ack_deadline_seconds

# 配置消息过期策略、重试策略、死信队列等
expiration_policy {
ttl = var.ttl
}
retry_policy {
minimum_backoff = var.minimum_backoff
maximum_backoff = var.maximum_backoff
maximum_attempts = var.maximum_attempts
}
dead_letter_policy {
dead_letter_topic = google_pubsub_topic.dead_letter_topic.id
max_delivery_attempts = var.max_delivery_attempts
}

# 配置将消息写入 BigQuery
bigquery_config {
table_name = each.value[count.index].bigquery_config
}

# 配置资源生命周期
lifecycle {
create_before_destroy = var.create_before_destroy
}
}