You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于变量条件配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:45:30