Версия Terraform
Terraform v0.11.11
+ provider.azurerm v1.21.0
Файлы конфигурации Terraform
Я оставил много обязательных полей для краткости (все остальные настройки работали до того, как я добавил строки подключения).
# modules/function/main.tf
variable "conn-value" {}
locals {
conn = "${map("name", "mydb", "value", "${var.conn-value}", "type", "SQLAzure")}"
}
resource "azurerm_function_app" "functions" {
connection_string = "${list(local.conn)}"
# ...
}
# modules/db/main.tf
# ... other variables declared
resource "azurerm_sql_server" "server" {
# ...
}
output "connection-string" {
value = "Server=tcp:${azurerm_sql_server.server.fully_qualified_domain_name},1433;Initial Catalog=${var.catalog};Persist Security Info=False;User ID=${var.login};Password=${var.login-password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=200;"
}
# main.tf
module "my_db" {
source = "modules/db"
}
module "my_app" {
source = "modules/function"
conn-value = "${module.my_db.connection-string}"
# ...
}
Ожидаемое поведение при terraform plan
Выход module.my_db.connection-string
преобразуется в строку при передаче в переменную my_app
conn-value
и может использоваться в карте / списке, передаваемом в azurerm_function_app.functions.connection_string
переменная.
Фактическое поведение при terraform plan
Я получаю эту ошибку:
module.my_app.azurerm_function_app.functions: connection_string: should be a list
Если заменить "${var.conn-value}"
на modules/function/main.tf
locals
с помощью только строки это работает.
Обновление
В ответ на этот комментарий я обновил приведенный выше скрипт конструкцией строки подключения.