Я пытаюсь использовать провайдера Azure для предоставления инфраструктуры. У меня такой же процесс работает через AzureCLI, но я хочу перейти на Terraform.
К сожалению, я столкнулся с круговой зависимостью, которую, похоже, не могу разрешить. У меня есть следующие предметы.
- Когнитивный сервис с сгенерированным ключом API
- AppService с идентификатором SystemAssigned;
- Keyvault, с идентификатором, назначенным в (2), предоставлен доступ для чтения;
- Keyvault secret с ключом API, сгенерированным в (1).
- AppService в (2) необходимо обновить с помощью секретного идентификатора, сгенерированного в (3). - проблема.
Теперь: мне нужно установить конфигурацию AppService для ссылки на секретный идентификатор, который я генерирую при добавлении в хранилище, но не могу.
Есть ли способ отредактировать эти значения, чтобы конфигурация могла быть настроена по частям? то есть положение х затем изменить?
Редактировать: Мой файл Terraform находится ниже:
provider "azurerm" {
version = "=1.28.0"
}
variable "TENANT_ID" {
type = string
}
resource "azurerm_resource_group" "test" {
name = "resourceGroup1"
location = "australiaeast"
}
resource "azurerm_app_service_plan" "plan" {
name = "resourceGroup1"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
kind = "Linux"
sku {
tier = "Basic"
size = "B1"
}
}
resource "azurerm_cognitive_account" "cognitive" {
name = "resourceGroup1-cognitive"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
kind = "ComputerVision"
sku {
name = "S0"
tier = "Standard"
}
}
resource "azurerm_key_vault" "keyvault" {
name = "resourceGroup1-keyvault"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
tenant_id = var.TENANT_ID
sku {
name = "standard"
}
access_policy {
tenant_id = "${azurerm_app_service.api.identity.0.tenant_id}"
object_id = "${azurerm_app_service.api.identity.0.principal_id}"
secret_permissions = [ "get" ]
}
}
resource "azurerm_key_vault_secret" "keyvault-apikey" {
name = "AzureComputerVisionApiKey"
value = "${azurerm_cognitive_account.cognitive.primary_access_key}"
key_vault_id = "${azurerm_key_vault.keyvault.id}"
}
resource "azurerm_app_service" "api" {
name = "resourceGroup1-api"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
app_service_plan_id = "${azurerm_app_service_plan.plan.id}"
identity {
type = "SystemAssigned"
}
app_settings = {
"ASPNETCORE_AzureComputerVisionApiKey" = "THIS IS A NORMAL SECRET VALUE"
}
}
Если я изменю значение для строки «ASPNETCORE_AzureComputerVisionApiKey» на:
"ASPNETCORE_AzureComputerVisionApiKey" = "@Microsoft.KeyVault(${azurerm_key_vault_secret.keyvault-apikey.id})"
Чтобы он ссылался на секрет хранилища ключей, во время операции terraform plan
я получаю следующую ошибку:
Error: Cycle: azurerm_app_service.api, azurerm_key_vault.keyvault, azurerm_key_vault_secret.keyvault-apikey