【问题标题】:Azure Function dissapears when using terraform apply使用 terraform apply 时 Azure Function 消失
【发布时间】:2019-07-09 18:14:01
【问题描述】:

我们在 azure 中使用 terraform 提供了一个解决方案 其中一个步骤是配置函数应用

单独的管道在函数应用中安装软件功能

当我重新运行 terraform apply (用于更新某些内容) 软件功能已从 azure 函数应用程序中删除

使用 terraform 1.22 版 这是预期的行为吗?

从原始问题扩展。 我相信今天从 terraform 1.21 到 1.22 的变化 向函数应用添加了额外的应用设置。 这似乎重新部署了整个功能应用程序,而不是仅仅添加应用程序设置,并且由于功能消失了而破坏了功能。

我不确定这是错误还是预期的行为,但至少这是我们没有预料到的。

因为我不想仅仅因为应用设置的更改而再次部署某些东西。是否有人遇到此问题,您是否有解决方法,或者他们的工作流程是我在 terraform 文档中遗漏的。

额外信息编辑2:

这样创建的 Azure 函数

resource "azurerm_function_app" "xxx"{
name = "xxx-status2signalr-func"
location = "${var.region}"
resource_group_name = "${azurerm_resource_group.xxx.name}"
app_service_plan_id = "${azurerm_app_service_plan.xxx.id}"
storage_connection_string = "${azurerm_storage_account.xxx.primary_connection_string}"
enable_builtin_logging = "false"
app_settings {      
  "blabladosmomethingEventhub" = "${var.blabla-something-eventhub}"
  "blabladosomethingChangedEventhubConsumer" = "${var.blabla-dosomething-eventhub-consumer}"
  "blablasomethingEventhubConnectionkeyListen" = "${var.xxxblabladosomethingchangedlisten}"
  "AzureSignalRConnectionString" = "${azurerm_signalr_service.xxx.primary_connection_string}"
  "WEBSITE_RUN_FROM_PACKAGE" = "1"
}
enabled="true"
version="~2"

}

函数创建得很好 我们部署的软件部分功能目前使用visual studio 右键部署

一切正常

现在我们对 appsettings 键进行了以下更改

resource "azurerm_function_app" "xxx"{
name = "xxx-status2signalr-func"
location = "${var.region}"
resource_group_name = "${azurerm_resource_group.xxx.name}"
app_service_plan_id = "${azurerm_app_service_plan.xxx.id}"
storage_connection_string = "${azurerm_storage_account.xxx.primary_connection_string}"
enable_builtin_logging = "false"
app_settings {
  "APPINSIGHTS_INSTRUMENTATIONKEY" = "${azurerm_application_insights.xxx.instrumentation_key}"
  "blabladosmomethingEventhub" = "${var.blabla-something-eventhub}"
  "blabladosomethingChangedEventhubConsumer" = "${var.blabla-dosomething-eventhub-consumer}"
  "blablasomethingEventhubConnectionkeyListen" = "${var.xxxblabladosomethingchangedlisten}"
  "AzureSignalRConnectionString" = "${azurerm_signalr_service.xxx.primary_connection_string}"
  "WEBSITE_RUN_FROM_PACKAGE" = "1"
}
enabled="true"
version="~2"

}

计划的输出显示更新 1 "APPINSIGHTS_INSTRUMENTATIONKEY" = "${azurerm_application_insights.xxx.instrumentation_key}"

检查时 appsetting 键被很好地添加 但部署的软件不见了。

非常欢迎任何关于此的指针。

【问题讨论】:

  • 听起来像是在重新部署 Azure Function 实例。添加一个检查以查看它是否存在,如果您不希望它被重新部署,请不要理会它。
  • 好吧,既然我们将状态存储在一个 azure blob 存储中,我希望 terraform 知道不重新部署它?
  • 扩展问题
  • 您能否编辑您的问题以分享您的 Terraform 代码以及显示它将删除该功能的计划输出?
  • 添加了额外信息

标签: azure azure-functions terraform terraform-provider-azure


【解决方案1】:

除非我遗漏了什么,否则就是这样:

  1. 您使用 Terraform 部署您的基础设施。 Function App 具有"WEBSITE_RUN_FROM_PACKAGE" = "1" 设置(在您的 TF 脚本中定义)。

  2. 您使用 Azure Functions Core Tools 或 VSCode 部署代码。它将您的代码上传到存储帐户并将其挂载到 FA 主机的 /home/site/wwwroot 文件夹。部署工具更新应用设置。现在是WEBSITE_RUN_FROM_PACKAGE = <url to the blob storage>

  3. 功能应用(云基础设施资源)已存在,代码已存在,您的应用正在运行。

  4. 您对 TF 脚本进行了一些更改并重新部署它。它使用 1 的值覆盖 WEBSITE_RUN_FROM_PACKAGE 应用程序设置。

  5. Function App 运行时找不到应用代码(WEBSITE_RUN_FROM_PACKAGE = 1 表示代码存储在 FA 主机本身上)。您的应用无法运行。

您可以做的是确保您的 code 部署工具设置 WEBSITE_RUN_FROM_PACKAGE=1 设置以匹配 TF 定义(注意:并非所有执行环境都支持)或告诉 Terraform 忽略更改WEBSITE_RUN_FROM_PACKAGE 设置:

resource "azurerm_function_app" "function_app" {
  ...
   
  lifecycle {
    ignore_changes = [
      app_settings["WEBSITE_RUN_FROM_PACKAGE"], # prevent TF reporting configuration drift after app code is deployed
    ]
  }

完整解释here.

【讨论】:

    【解决方案2】:

    看起来,您的部署使用包。 如果您通过 Terraform 部署应用程序,然后通过 VS 进行部署,则会设置应用程序设置:WEBSITE_RUN_FROM_PACKAGE 为 1。 如果您通过 Terraform 更新函数,则挂载将不会是 wwwroot。因此,通过 Terraform 更新函数会导致包的挂载失败。 为避免这种情况 - 在 Terraform 部署中添加 WEBSITE_RUN_FROM_PACKAGE 设置为 1。 这应该解决它。 让我知道这是否有帮助并将其标记为答案:)

    【讨论】:

      【解决方案3】:

      遇到类似问题,帮助在 terraform 中将 WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置为 false

      如果未指定 WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置或设置为 true,则 /home/ 目录将在规模实例之间共享,并且写入的文件将在重启后持续存在。将 WEBSITES_ENABLE_APP_SERVICE_STORAGE 显式设置为 false 将禁用挂载。

      https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-faq

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-18
        • 2019-11-16
        • 2020-11-29
        • 1970-01-01
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        相关资源
        最近更新 更多