问题
Azure 函数 (v4) 应用程序的部署脚本不会像我们的其他应用程序一样更新我的 local.settings.json - AzureWebJobsStorage 值。
代码
执行以下操作的部署脚本:(在大多数情况下仅显示高级详细信息)
#set the subscription we want to use
az account
#create resource group
az group create ...
#deploy ARM Template
az deployment group create `
--resource-group $resourcegrp `
--template-file "./arm_templates/apptemplate.json"
#update local.settings
func settings add FUNCTIONS_WORKER_RUNTIME dotnet
#update connection string for the storage account
func azure storage fetch-connection-string $storageAccount.name
#deploy function app using local settings.
func azure functionapp publish $fnApp.name --publish-local-settings -i --overwrite-settings -y
local.settings.json
这就是我的本地设置文件的样子:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=somename;AccountKey=aSuperOldKeyValue;EndpointSuffix=core.windows.net",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"StorageQueue": "DefaultEndpointsProtocol=https;AccountName=somename;AccountKey=freshKey,
"ServiceBus": ""
},
"ConnectionStrings": {}
}
ARM 模板 就 appSettings 而言,ARM 模板如下所示:
"properties": {
"reserved": true,
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanPortalName'))]",
"siteConfig": {
"linuxFxVersion": "DOTNETCORE|6.0",
"appSettings": [
{
"name": "APPINSIGHTS_INSTRUMENTATIONKEY",
"value": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName')), '2015-05-01').InstrumentationKey]"
},
{
"name": "AzureWebJobsStorage",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccountName'), ';EndpointSuffix=', environment().suffixes.storage, ';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value)]"
},
{
"name": "FUNCTIONS_EXTENSION_VERSION",
"value": "~4"
},
{
"name": "FUNCTIONS_WORKER_RUNTIME",
"value": "dotnet"
}
]
}
部署结果/工件
部署时,我看到此错误消息:
Getting site publishing info...
Creating archive for current directory...
Uploading 13.01 MB [##############################################################################]
Upload completed successfully.
Deployment completed successfully.
App setting AzureWebJobsStorage is different between azure and local.settings.json Overwriting setting in azure with local value because '--overwrite-settings [-y]' was specified.
Setting FUNCTIONS_WORKER_RUNTIME = ****
Setting StorageQueue = ****
Setting ServiceBus = ****
我当然可以删除覆盖指令,然后它会提示我询问是否要使用本地覆盖 azure 值。 我不得不说不能确保上游应用程序实际工作。
其他评论
我将此脚本与我们拥有的类似功能应用程序的另一个部署脚本进行了比较,我确实看不出逻辑上有任何直接差异。 但另一个应用程序确实会在每次运行脚本时正确更新 AzureWebJobsStorage(并且它具有基本相同的步骤、相同的顺序)。这两个脚本之间有一个很大的区别 - 尽管我还不确定它是否是罪魁祸首 - 有效的脚本是 azure 函数版本 3,而这个新应用程序正在运行版本 4。
我将在谷歌上搜索,看看这是否是我问题的根本原因,但是否有人可以帮助我。 目标是确保此配置设置的值始终是上游应用程序中的最新值,并将该值填充到我的 local.settings.json 文件中。
编辑1
因此,虽然我希望它自动更新,但出于学习目的,我将 AzureWebJobsStorage 更改为如下所示:
"AzureWebJobsStorage": "UseDevelopmentStorage=true"
根据答案中的建议。 在我的 csproj 中,我有以下内容:
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
这会破坏我的应用程序,因为它复制了上游的“AzureWebJobsStorage”:“UseDevelopmentStorage = true”,因此该应用程序不再工作。
要更新
local.settings.json
文件中的AzureWebJobsStorage,您可以尝试以下方法:
- 设置
UseDevelopmentStorage=true
- 右键单击
,转到属性,将“复制到输出目录”从“不复制”更改为“始终复制”。local.settings.json
参考文献:local.settings.json 中缺少 AzureWebJobsStorage 的值、Visual Studio 2017 中 local.settings.json 本地开发中缺少 AzureWebJobsStorage 的值和 https://www.koskila.net/how-to-修复-azurewebjobsstorage-in-local-settings-json-when-youre-debugging-azure-functions-locally/的缺失值