Azure 函数 "Host keys" 不是使用 Terraform 创建的
Azure Function "Host keys" not created with Terraform
如果我通过门户应用程序密钥手动创建 Azure Functions,则会创建:
如果我通过 terraform 尝试同样的操作:
功能应用
resource "azurerm_function_app" "resize_images" {
name = format("%s%s%s%s", module.subscription_prefix.prefix, "pfunctionapp", lower(local.environment), "0001")
location = azurerm_resource_group.azure_functions.location
resource_group_name = azurerm_resource_group.azure_functions.name
app_service_plan_id = module.app_service_plan.id
# AzureRM 1.x needs this
#storage_connection_string = local.azure_functions_storage_account_primary_connection_string
# AzureRM 2.x needs this
storage_account_name = data.azurerm_storage_account.resize_storage.name
storage_account_access_key = data.azurerm_storage_account.resize_storage.primary_access_key
app_settings = {
AzureWebJobsDashboard = data.azurerm_storage_account.resize_storage.primary_connection_string
AzureWebJobsStorage = data.azurerm_storage_account.resize_storage.primary_connection_string
BLOB_STORAGE_CONNECTION_STRING = data.azurerm_storage_account.resize_storage.primary_connection_string
CONTAINER_NAME = "images"
FUNCTIONS_EXTENSION_VERSION = "~3"
WEBSITE_HTTPLOGGING_RETENTION_DAYS = "3"
WEBSITE_RUN_FROM_PACKAGE = "1"
}
version = "~3"
tags = local.tags
}
没有创建应用密钥:
在Terraform documentation there is nothing how to create those keys, but you can read them as data内。
谁能告诉我如何创建密钥的正确方向?!
默认情况下,密钥存储在 AzureWebJobsStorage
设置提供的帐户中的 Blob 存储容器中。在您的代码中,密钥确实是在关联的存储帐户上自动生成的,但未显示在 Azure Function 应用程序上 UI。
经过我的验证,如果您删除 app_settings
中的 WEBSITE_RUN_FROM_PACKAGE = "1"
,那么您将在 Function 应用程序中看到默认的应用程序键。当您将 WEBSITE_RUN_FROM_PACKAGE
设置添加到您的函数应用程序设置时,它使您的函数应用程序能够从包中 运行。我认为这或多或少会覆盖默认的 Azure 函数部署行为。阅读 this 了解更多详情。
我不完全确定这是问题的完整修复,删除后我仍然收到它 app_setting。
对我来说,这看起来像是一个时间问题,terraform 创建了函数,然后我要了密钥,但没有密钥,terraform 失败了,我等了不到一分钟,密钥就在那里,重新 运行 申请并且所有作品...
真的很难找到解决这个问题的方法。
更新:
因此 Azure 提供程序 2.45.1 在检索密钥时超时。
然而 Provider 2.51.0 没有...
似乎超时已在最新的提供程序上修复。
我遇到了同样的问题,在我的例子中,不同之处在于删除了版本参数:
version = "~3"
删除它会使密钥重新生成。
我们有这个错误,并且仍然在最新版本的 azurerm (2.54) 上看到它,对我们来说,恢复到版本 = "~1" 不是一个选项。正在 blob 存储中创建应用密钥,但生成的 v3 Function App 找不到它们。我们必须删除包含加密密钥的旧 blob,并将其添加到函数应用 App Settings
CONTAINER_NAME = "azure-webjobs-secrets"
地形
Terraformed Function 应用程序的整个 app_settings 如下
app_settings = {
AzureWebJobsDashboard = data.azurerm_storage_account.sg.primary_connection_string
AzureWebJobsStorage = data.azurerm_storage_account.sg.primary_connection_string
CONTAINER_NAME = "azure-webjobs-secrets"
FUNCTIONS_EXTENSION_VERSION = "~3"
WEBSITE_HTTPLOGGING_RETENTION_DAYS = "3"
}
这为我们修复了它
对我来说,问题是之前从资源组中删除了一个同名的函数应用程序,并且存储帐户中的旧密钥“阻止”创建新密钥 and/or成立。从存储中删除旧密钥并通过 Terraform 重新创建函数应用程序解决了这个问题。
如果我通过门户应用程序密钥手动创建 Azure Functions,则会创建:
如果我通过 terraform 尝试同样的操作:
功能应用
resource "azurerm_function_app" "resize_images" {
name = format("%s%s%s%s", module.subscription_prefix.prefix, "pfunctionapp", lower(local.environment), "0001")
location = azurerm_resource_group.azure_functions.location
resource_group_name = azurerm_resource_group.azure_functions.name
app_service_plan_id = module.app_service_plan.id
# AzureRM 1.x needs this
#storage_connection_string = local.azure_functions_storage_account_primary_connection_string
# AzureRM 2.x needs this
storage_account_name = data.azurerm_storage_account.resize_storage.name
storage_account_access_key = data.azurerm_storage_account.resize_storage.primary_access_key
app_settings = {
AzureWebJobsDashboard = data.azurerm_storage_account.resize_storage.primary_connection_string
AzureWebJobsStorage = data.azurerm_storage_account.resize_storage.primary_connection_string
BLOB_STORAGE_CONNECTION_STRING = data.azurerm_storage_account.resize_storage.primary_connection_string
CONTAINER_NAME = "images"
FUNCTIONS_EXTENSION_VERSION = "~3"
WEBSITE_HTTPLOGGING_RETENTION_DAYS = "3"
WEBSITE_RUN_FROM_PACKAGE = "1"
}
version = "~3"
tags = local.tags
}
没有创建应用密钥:
在Terraform documentation there is nothing how to create those keys, but you can read them as data内。
谁能告诉我如何创建密钥的正确方向?!
默认情况下,密钥存储在 AzureWebJobsStorage
设置提供的帐户中的 Blob 存储容器中。在您的代码中,密钥确实是在关联的存储帐户上自动生成的,但未显示在 Azure Function 应用程序上 UI。
经过我的验证,如果您删除 app_settings
中的 WEBSITE_RUN_FROM_PACKAGE = "1"
,那么您将在 Function 应用程序中看到默认的应用程序键。当您将 WEBSITE_RUN_FROM_PACKAGE
设置添加到您的函数应用程序设置时,它使您的函数应用程序能够从包中 运行。我认为这或多或少会覆盖默认的 Azure 函数部署行为。阅读 this 了解更多详情。
我不完全确定这是问题的完整修复,删除后我仍然收到它 app_setting。
对我来说,这看起来像是一个时间问题,terraform 创建了函数,然后我要了密钥,但没有密钥,terraform 失败了,我等了不到一分钟,密钥就在那里,重新 运行 申请并且所有作品...
真的很难找到解决这个问题的方法。
更新: 因此 Azure 提供程序 2.45.1 在检索密钥时超时。 然而 Provider 2.51.0 没有...
似乎超时已在最新的提供程序上修复。
我遇到了同样的问题,在我的例子中,不同之处在于删除了版本参数:
version = "~3"
删除它会使密钥重新生成。
我们有这个错误,并且仍然在最新版本的 azurerm (2.54) 上看到它,对我们来说,恢复到版本 = "~1" 不是一个选项。正在 blob 存储中创建应用密钥,但生成的 v3 Function App 找不到它们。我们必须删除包含加密密钥的旧 blob,并将其添加到函数应用 App Settings
CONTAINER_NAME = "azure-webjobs-secrets"
地形
Terraformed Function 应用程序的整个 app_settings 如下
app_settings = {
AzureWebJobsDashboard = data.azurerm_storage_account.sg.primary_connection_string
AzureWebJobsStorage = data.azurerm_storage_account.sg.primary_connection_string
CONTAINER_NAME = "azure-webjobs-secrets"
FUNCTIONS_EXTENSION_VERSION = "~3"
WEBSITE_HTTPLOGGING_RETENTION_DAYS = "3"
}
这为我们修复了它
对我来说,问题是之前从资源组中删除了一个同名的函数应用程序,并且存储帐户中的旧密钥“阻止”创建新密钥 and/or成立。从存储中删除旧密钥并通过 Terraform 重新创建函数应用程序解决了这个问题。