Terraform 未检测到导入的 Azure SQL 服务器 administrator_login_password

Terraform not detecting imported Azure SQL Server administrator_login_password

我已将 Azure SQL 服务器定义为:

resource "azurerm_sql_server" "azure-sql-server" {
  name                         = "xxxxx"
  resource_group_name          = "xxxx"
  location                     = "xxxx"
  version                      = "12.0"
  administrator_login          = "admin_login"
  administrator_login_password = "password"

}

因为资源已经存在于我的 Azure 订阅中,所以我使用 terraform import 命令导入了它,效果很好。

当我 terraform plan 时,terraform 说 administrator_login_password 将就地更新,即使我使用了在服务器中设置的相同密码。

如何避免它发生?

当您使用terraform import将当前资源读入状态时,将不会找回密码。这是因为出于安全原因,Azure API(以及大多数其他)将不支持从其相关端点读取密码。因此,该密码目前处于未知状态,Terraform Azure 提供商将尝试更新它。

您可以使用针对 password 参数的 lifecycle 元块 ignore_changes 元参数来防止这种情况:

resource "azurerm_sql_server" "azure-sql-server" {
  name                         = "xxxxx"
  resource_group_name          = "xxxx"
  location                     = "xxxx"
  version                      = "12.0"
  administrator_login          = "admin_login"
  administrator_login_password = "password"

  lifecycle {
    ignore_changes = [administrator_login_password]
  }
}

并且 Azure 提供商将不再尝试对您的资源执行更新操作。 ignore_changes 的相关文档是 here.