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.
我已将 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.