我正在用terraform配置我的服务器。对于非生产环境,我们的sku不允许高可用性,但在生产环境中,我们的sku允许。
出于某种原因,high_availability.mode
只接受“ZoneRedundant”值以实现高可用性,但不接受任何其他值(根据文档)。根据var.isProd
是否为真,我希望打开和关闭高可用性,但我该如何操作呢?
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
high_availability {
mode = "ZoneRedundant"
}
sku_name = var.isProd ? "B_Standard_B2s" : "B_Standard_B1ms"
}
2条答案
按热度按时间brgchamk1#
我认为此资源的默认分配将是禁用HA,因此管理HA的不是参数
mode
,而是存在high_availability
块。因此,您可以通过排除该块以接受默认“禁用”来管理HA,或者包括该块以使用值ZoneRedundant
将HA管理为启用:我对API端点参数默认值做了一些假设,所以这需要用Azure帐户进行验收测试。但是,Azure Postgres Flexible Server的文档通常声称HA实际上默认情况下是禁用的,所以这应该可以正常工作。
d5vmydt92#
如果您在terraform中使用azurerm provider部署flexible server,它将只接受
highavailability.mode
的ZoneRedundant
值,而且使用此提供程序,您只能部署sql server版本[11 12 13]。在terraform中使用Azapi provider时,您可以将highavailability值与“Disabled”、“ZoneRedundant”或“SameZone”中的任何一个一起使用
根据您的要求,我创建了下面的示例terraform脚本,它具有一个环境变量,仅接受prod或非prod值。使用此值,将使用相应的属性部署更灵活的服务器。
prod
,则脚本将部署具有高可用性的灵活服务器(如zone redundant
),并在启用地理冗余备份的情况下将备份保留期设置为35天。non-prod
,则脚本将部署具有高可用性的灵活服务器disabled
,并将备份保留期设置为7天,同时使用地理冗余备份disabled
以下是Terraform脚本:
注意:以上terraform示例脚本供您参考,请根据您的业务需求进行更改。