Terraform 地形模块定义中的合并地图

Terraform 地形模块定义中的合并地图,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我将Azure Function应用程序作为Terraform中的一个模块公开,我希望该模块允许用户扩展配置参数: resource "azurerm_function_app" "test" { name = "${var.prefix}-listener" resource_group_name = "${var.resource_group_name}" location = "${var.

我将Azure Function应用程序作为Terraform中的一个模块公开,我希望该模块允许用户扩展配置参数:

resource "azurerm_function_app" "test" {
  name                      = "${var.prefix}-listener"
  resource_group_name       = "${var.resource_group_name}"
  location                  = "${var.resource_group_location}"
  app_service_plan_id       = "${var.app_service_plan_id}"
  storage_connection_string = "${var.storage_account_connection_string}"

  app_settings = {
    HASH = "${data.archive_file.test.output_base64sha256}"
    WEBSITE_USE_ZIP = "https://${var.storage_account_name}.blob.core.windows.net/${azurerm_storage_container.test.name}/${azurerm_storage_blob.test.name}${data.azurerm_storage_account_sas.test.sas}"
  }

  site_config {
    always_on = true
  }
}
但是,在该示例中,
app\u设置
是固定的,我希望它能够扩展此映射。比如:

  app_settings = ${merge({
    HASH = "${data.archive_file.test.output_base64sha256}"
    WEBSITE_USE_ZIP = "https://${var.storage_account_name}.blob.core.windows.net/${azurerm_storage_container.test.name}/${azurerm_storage_blob.test.name}${data.azurerm_storage_account_sas.test.sas}"
  }, ${var.app_settings})}
我是从阅读报纸上得到这个想法的。但是,我得到一个无效表达式错误


这里的正确语法是什么?

看起来
{
}
导致字符串插值出现问题。您可以将代码更改为

app_settings = "${merge(
    map("HASH","${data.archive_file.test.output_base64sha256}"),
    map("WEBSITE_USE_ZIP","https://${var.storage_account_name}.blob.core.windows.net/${azurerm_storage_container.test.name}"),/${azurerm_storage_blob.test.name}${data.azurerm_storage_account_sas.test.sas}", 
    var.app_settings}"


希望这能解决您的问题。

看起来
{
}
会导致字符串插值出现问题。您可以将代码更改为

app_settings = "${merge(
    map("HASH","${data.archive_file.test.output_base64sha256}"),
    map("WEBSITE_USE_ZIP","https://${var.storage_account_name}.blob.core.windows.net/${azurerm_storage_container.test.name}"),/${azurerm_storage_blob.test.name}${data.azurerm_storage_account_sas.test.sas}", 
    var.app_settings}"


希望这能解决您的问题。

您的
${var.app\u设置}
定义是什么?它是地图吗?@nancyxyong YesTry this:
app_settings=“${merge({“HASH”=“${data.archive\u file.test.output\u base64sha256}”,“WEBSITE\u USE\u ZIP”=“https://${var.storage\u account\u name}.blob.core.windows.net/${azurerm storage\u container.test.name}/${azurerm storage\u storage\u storage\u blob.test.test.name}${data.azurerm sas},”${var.app\u settings}“}”
你的
${var.app\u settings}
定义是什么?它是地图吗?@nancyxyong YesTry这:
app\u settings=“${merge({“HASH”=“${data.archive\u file.test.output\u base64sha256}”,“网站使用\u ZIP”=“https://${var.storage\u帐户名}.blob.core.windows.net/${azurerm storage\u container.test name}/${azurerm_storage_blob.test.name}${data.azurerm_storage_account_sas.test.sas},“${var.app_settings}”)}”