gpt4 book ai didi

使用 terraform apply 时 Azure Function 消失

转载 作者:行者123 更新时间:2023-12-04 13:01:58 26 4
gpt4 key购买 nike

我们在 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}”

当检查应用程序设置键是否已很好地添加时但部署的软件不见了。

非常欢迎对此提出任何建议。

最佳答案

除非我遗漏了什么,否则发生的事情是这样的:

  1. 您使用 Terraform 部署基础设施。功能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 脚本进行了一些更改并重新部署它。它会覆盖 WEBSITE_RUN_FROM_PACKAGE值为 1 的应用程序设置.

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

您可以做的是确保您的代码部署工具设置 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

关于使用 terraform apply 时 Azure Function 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54712085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com