【问题标题】:Terraform Azure SQL server admin password change forces recreating of resourceTerraform Azure SQL 服务器管理员密码更改强制重新创建资源
【发布时间】:2021-03-16 12:11:31
【问题描述】:

我有以下 Terraform 代码,其中 Terraform 从密钥库中获取 sql 管理员密码。当我在密钥库中更改管理员登录名和密码,然后再次运行 terraform 更新 sql server 时,它会破坏 sql 数据库和 sql server。

这是标准程序还是我可以改变这种行为?可以理解,在生产环境中重新创建资源实际上并不可行。我知道生命周期钩子可以防止删除资源,但如果我是正确的,这样的事情会破坏管道。

data "azurerm_key_vault_secret" "sql_admin_user_secret" {
  name         = var.sql_admin_user_secret_name
  key_vault_id = data.azurerm_key_vault.key_vault.id
}

data "azurerm_key_vault_secret" "sql_admin_password_secret" {
  name         = var.sql_admin_password_secret_name
  key_vault_id = data.azurerm_key_vault.key_vault.id
}

resource "azurerm_sql_server" "sql_server" {
  name                         = var.sql_server_name
  resource_group_name          = var.resource_group_name
  location                     = var.location
  version                      = var.sql_server_version
  administrator_login          = data.azurerm_key_vault_secret.sql_admin_user_secret.value
  administrator_login_password = data.azurerm_key_vault_secret.sql_admin_password_secret.value
}

resource "azurerm_sql_database" "sql_database" {
  name                             = var.sql_database_name
  resource_group_name              = var.resource_group_name
  location                         = var.location
  server_name                      = azurerm_sql_server.sql_server.name
  edition                          = var.sql_edition
  requested_service_objective_name = var.sql_service_level
}

我可以添加类似这样的内容,但这只会阻止销毁并分别忽略这些字段中的更改。同样,这不是一个真正的选择。

lifecycle {
    prevent_destroy = true
    ignore_changes = ["administrator_login", "administrator_login_password"]
}

更新:

工作方式是永远不要更新administrator_loginadministrator_login_password 可以单独更新,不会导致实例重新创建。

【问题讨论】:

  • 能否也分享一下计划输出? github.com/terraform-providers/terraform-provider-azurerm/blob/…administrator_login_password 参数上没有ForceNew,所以这不应该仅仅因为密码被更新而发生。
  • 我想我现在更好地理解了这个问题。 administrator_login 和 administrator_login_password 都已更新,因此需要重新创建资源。仅更新密码并不会强制重新创建资源。谢谢你的解释!
  • Nebulastic,如果您觉得有帮助,请标记答案。

标签: azure azure-sql-database terraform azure-sql-data-warehouse


【解决方案1】:

根据official doc,如果您更改administrator_login,预计将重新创建资源。但是,如果您只更改administrator_login_password,它应该会更新。

administrator_login -(必需)新服务器的管理员登录名。更改此设置会强制创建新资源。

这里没有什么可以做的,因为 Terraform 正在与 Azure API 通信,该 API 并非旨在在不创建新资源的情况下更新 Azure SQL 的管理员用户 ID。

【讨论】:

    猜你喜欢
    • 2022-12-29
    • 2012-09-27
    • 2015-04-19
    • 1970-01-01
    • 2020-08-31
    • 2020-05-31
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多