Смена пароля администратора Terraform Azure SQL Server вынуждает воссоздать ресурс

У меня есть следующий фрагмент кода Terraform, где Terraform извлекает пароль администратора sql из хранилища ключей. Когда я изменил логин и пароль администратора в хранилище ключей, а затем снова запустил terraform для обновления сервера sql, он уничтожил базу данных sql и сервер sql.

Это стандартная процедура или я могу изменить это поведение? Можно было понять, что воссоздание ресурсов в производственной среде нецелесообразно. Я знаю, что ловушка жизненного цикла может предотвратить удаление ресурса, но такая вещь может нарушить конвейер, если я прав.

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_login. administrator_login_password можно обновлять отдельно, что не приводит к повторному созданию экземпляра.


person Nebulastic    schedule 04.12.2020    source источник


Ответы (1)


Согласно официальному документу, если вы измените administrator_login, ожидается воссоздание ресурса. Однако, если вы измените только administrator_login_password, он должен обновиться.

administrator_login - (обязательно) логин администратора для нового сервера. Изменение этого параметра приводит к созданию нового ресурса.

Здесь ничего особенного сделать нельзя, поскольку Terraform взаимодействует с API Azure, который не предназначен для обновления идентификатора пользователя-администратора Azure SQL без создания нового ресурса.

person krishg    schedule 11.12.2020