基于变量条件配置azurerm_postgresql_flexible_server高可用性
解决方案
要根据var.isProd的布尔值动态开启或关闭高可用配置,你需要利用Terraform的**动态嵌套块(dynamic block)**来实现——因为直接的条件表达式无法控制嵌套块的存在与否。
修改后的完整代码如下:
resource "azurerm_postgresql_flexible_server" "default" { name = "example-${var.env}-postgresql-server" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name version = "14" administrator_login = "sqladmin" administrator_password = random_password.postgresql_server.result geo_redundant_backup_enabled = var.isProd backup_retention_days = var.isProd ? 60 : 7 storage_mb = 32768 # 动态生成高可用配置块 dynamic "high_availability" { for_each = var.isProd ? [1] : [] content { mode = "ZoneRedundant" } } sku_name = var.isProd ? "B_Standard_B2s" : "B_Standard_B1ms" }
关键说明:
dynamic "high_availability"块通过for_each控制是否生成:当var.isProd为true时,[1]会让块生成一次;当为false时,空数组[]会让块完全不生成。- 这样就避免了非生产环境下配置不支持高可用的SKU时,出现因存在
high_availability块导致的报错。 - 完全符合文档要求:仅在生产环境时设置
mode = "ZoneRedundant",非生产环境则不配置高可用。
内容的提问来源于stack exchange,提问作者spierce7
相关产品推荐
相关产品推荐

