如何使用 Terraform 设置具有 Min 0,5 vCore 的 Azure SQL 数据库实例?
How to set Azure SQL database instance with Min 0,5 vCores with Terraform?
我有 Terraform 并设置了 Azure SQL 数据库。
当前计算硬件在 Terraform 中的定义:
requested_service_objective_name = "GP_S_Gen5_4"
这将为最大 vCores 4 和最小 vCores 1 配置计算硬件。
我需要将最小 vCores 配置为 0,5。
如果我设置 0.5,然后使用“GP_S_Gen5_4”部署 Terraform,我会自动升级到 Min vCores 1。
我可以做些什么来将大小配置为 0,5 或由 Terraform 部署时的实际最小值 1?
有两个 terraform API,azurerm_mssql_database
和 azurerm_mssql_elasticpool
。
azurerm_mssql_database
不支持基于 vCore 或 DTU 的数据库配置。只有 azurerm_mssql_elasticpool
v3.0 API 允许基于 vCore 和 DTU 的配置。
因此,要使用 terraform 声明 vCore,您需要在 Elastic Pool 中部署数据库并使用以下示例代码。
resource "azurerm_mssql_elasticpool" "example" {
name = "test-epool"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
server_name = azurerm_sql_server.example.name
license_type = "LicenseIncluded"
max_size_gb = 756
sku {
name = "BasicPool"
tier = "Basic"
family = "Gen4"
capacity = 4
}
per_database_settings {
min_capacity = 0.25
max_capacity = 4
}
}
参考azurerm_mssql_database官方文档
正如接受的答案所回答的那样,SQL 数据库有两个 terraform API,但请注意 azurerm_sql_database (deprecated), and azurerm_mssql_database 这是现在的标准。
与公认的答案不同,我建议您要小心,azurerm_mssql_elasticpool 完全是另外一回事,它允许您将资源分散到多个数据库中。从你的问题来看,我认为你不需要设置它,因为它只会增加你的成本。
使用官方模块,我可以毫不费力地指定最小容量 0.5
,有一个设置 min_capacity
,这对我来说似乎很实用。不过,它默认为 0
,这不是一个可接受的值,所以一定要设置它。比如下面的配置:
resource "azurerm_mssql_server" "this" {
name = "demo-min-capacity"
resource_group_name = azurerm_resource_group.this.name
location = azurerm_resource_group.this.location
version = "12.0"
administrator_login = "..."
administrator_login_password = "..."
}
resource "azurerm_mssql_database" "this" {
name = "demo"
server_id = azurerm_mssql_server.this.id
collation = "SQL_Latin1_General_CP1_CI_AS"
max_size_gb = 20
sku_name = "GP_S_Gen5_1"
zone_redundant = false
auto_pause_delay_in_minutes = 60
min_capacity = 0.5
storage_account_type = "LRS"
}
导致在 Azure 门户上进行此设置:
资源 azurerm_mssql_database
没有设置最大 vcores 的属性,它在 sku_name
的最后一部分指定。因此,如果您想拥有更多的最大 vcores,请增加 sku。将 min_capacity
设置为您需要的最小 vcore 数量。设置 auto_pause_delay_in_minutes
以强制数据库在 x 分钟不活动后进入暂停模式。此变量应为 60 分钟或更高,您也可以将其设置为 -1,这将使数据库 运行 处于最小容量。
如果您需要普通的 sql 数据库,我不推荐使用 azurerm_mssql_elasticpool
,它还有其他用途。见下文或阅读 documentation:
一般recommendations/guidelines:
- 如果您需要快速扩展,请不要将最小 vcore 数量设置得太低。 Vcore 缩放也需要一些时间来传播。
- 将开发和测试环境中的数据库设置为 auto-pause 延迟以在不使用时节省成本。
- 对于经常使用的生产环境,将自动暂停延迟设置为 -1。
- 您的应用程序必须能够在数据库暂停时处理连接重试。第一次请求后,数据库通常需要一些时间才能启动。
我有 Terraform 并设置了 Azure SQL 数据库。
当前计算硬件在 Terraform 中的定义:
requested_service_objective_name = "GP_S_Gen5_4"
这将为最大 vCores 4 和最小 vCores 1 配置计算硬件。
我需要将最小 vCores 配置为 0,5。 如果我设置 0.5,然后使用“GP_S_Gen5_4”部署 Terraform,我会自动升级到 Min vCores 1。
我可以做些什么来将大小配置为 0,5 或由 Terraform 部署时的实际最小值 1?
有两个 terraform API,azurerm_mssql_database
和 azurerm_mssql_elasticpool
。
azurerm_mssql_database
不支持基于 vCore 或 DTU 的数据库配置。只有 azurerm_mssql_elasticpool
v3.0 API 允许基于 vCore 和 DTU 的配置。
因此,要使用 terraform 声明 vCore,您需要在 Elastic Pool 中部署数据库并使用以下示例代码。
resource "azurerm_mssql_elasticpool" "example" {
name = "test-epool"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
server_name = azurerm_sql_server.example.name
license_type = "LicenseIncluded"
max_size_gb = 756
sku {
name = "BasicPool"
tier = "Basic"
family = "Gen4"
capacity = 4
}
per_database_settings {
min_capacity = 0.25
max_capacity = 4
}
}
参考azurerm_mssql_database官方文档
正如接受的答案所回答的那样,SQL 数据库有两个 terraform API,但请注意 azurerm_sql_database (deprecated), and azurerm_mssql_database 这是现在的标准。
与公认的答案不同,我建议您要小心,azurerm_mssql_elasticpool 完全是另外一回事,它允许您将资源分散到多个数据库中。从你的问题来看,我认为你不需要设置它,因为它只会增加你的成本。
使用官方模块,我可以毫不费力地指定最小容量 0.5
,有一个设置 min_capacity
,这对我来说似乎很实用。不过,它默认为 0
,这不是一个可接受的值,所以一定要设置它。比如下面的配置:
resource "azurerm_mssql_server" "this" {
name = "demo-min-capacity"
resource_group_name = azurerm_resource_group.this.name
location = azurerm_resource_group.this.location
version = "12.0"
administrator_login = "..."
administrator_login_password = "..."
}
resource "azurerm_mssql_database" "this" {
name = "demo"
server_id = azurerm_mssql_server.this.id
collation = "SQL_Latin1_General_CP1_CI_AS"
max_size_gb = 20
sku_name = "GP_S_Gen5_1"
zone_redundant = false
auto_pause_delay_in_minutes = 60
min_capacity = 0.5
storage_account_type = "LRS"
}
导致在 Azure 门户上进行此设置:
资源 azurerm_mssql_database
没有设置最大 vcores 的属性,它在 sku_name
的最后一部分指定。因此,如果您想拥有更多的最大 vcores,请增加 sku。将 min_capacity
设置为您需要的最小 vcore 数量。设置 auto_pause_delay_in_minutes
以强制数据库在 x 分钟不活动后进入暂停模式。此变量应为 60 分钟或更高,您也可以将其设置为 -1,这将使数据库 运行 处于最小容量。
如果您需要普通的 sql 数据库,我不推荐使用 azurerm_mssql_elasticpool
,它还有其他用途。见下文或阅读 documentation:
一般recommendations/guidelines:
- 如果您需要快速扩展,请不要将最小 vcore 数量设置得太低。 Vcore 缩放也需要一些时间来传播。
- 将开发和测试环境中的数据库设置为 auto-pause 延迟以在不使用时节省成本。
- 对于经常使用的生产环境,将自动暂停延迟设置为 -1。
- 您的应用程序必须能够在数据库暂停时处理连接重试。第一次请求后,数据库通常需要一些时间才能启动。