我们使用terraform与azurerm提供者一起构建我的蔚蓝资源。我们在地形运行过程中注入了一个秘密,这个秘密可能会不时改变。我们使用azurerm_key_vault_secret存储秘密,使用带有托管标识的函数应用程序(可以读取密钥库的权限)接收秘密,如下所示:
resource "azurerm_key_vault_secret" "my_secret" {
name = "my-secret"
value = var.my_secret
key_vault_id = azurerm_key_vault.default.id
}
resource "azurerm_function_app" "app" {
name = "..."
app_settings = {
MySecret = "@Microsoft.KeyVault(SecretUri=${azurerm_key_vault_secret.my_secret.id})"
}
identity {
type = "SystemAssigned"
}
...
}
当我运行terraform应用程序并更改秘密时,函数应用程序指向这个秘密的旧版本。azurerm_key_vault_secret.my_secret.id
似乎是在更新秘密之前被阅读的。
有没有人知道,我如何确保function_app会等待秘密的更新?
(是的,id会改变,我也不喜欢它,但这就是提供者的工作方式。)
发布于 2021-12-10 13:51:55
当您正在更新密钥库机密时,更改将由密钥库UI处理。因此Terraform不会检测到azurerm_key_vault_secret.example.id
上的更改,因此引用也不会被修改。
作为解决办法,您可以使用数据源对同一个密钥库秘密,并在函数-app中提供它,如下面的代码所示,这样就可以从数据源读取密钥库秘密中所做的所有更改,并相应地应用这些更改:
resource "azurerm_key_vault_secret" "example" {
name = "functionappsecret"
value = "changedpassword"
key_vault_id = azurerm_key_vault.example.id
}
data "azurerm_key_vault_secret" "secret" {
name="functionappsecret"
key_vault_id = azurerm_key_vault.example.id
depends_on = [
azurerm_key_vault_secret.example
]
}
resource "azurerm_function_app" "example" {
name = "ansuman-azure-functions"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
app_service_plan_id = azurerm_app_service_plan.example.id
storage_account_name = azurerm_storage_account.example.name
storage_account_access_key = azurerm_storage_account.example.primary_access_key
app_settings = {
MySecret = "@Microsoft.KeyVault(SecretUri=${data.azurerm_key_vault_secret.secret.id})"
}
identity {
type="SystemAssigned"
}
}
Ouptut:
https://stackoverflow.com/questions/70303087
复制相似问题