在部署时,具有新队列触发器的函数应用程序将触发如下错误:
The 'MyQueueTrigger' function is in error: Microsoft.Azure.WebJobs.Host: Error indexing method 'MyQueueTrigger'. Microsoft.Azure.WebJobs.Extensions.Storage.Queues: Storage account connection string 'AzureWebJobsAzureStorageConnectionString' does not exist. Make sure that it is a defined App Setting.
字符串
在代码(C#)中,这个触发器看起来像这样:
[FunctionName("MyQueueTrigger")]
public async Task Run(
[QueueTrigger(
StorageConstants.MyQueue,
Connection = StorageConstants.AzureStorageConnectionString
)]
string myQueueItem,
ILogger log)
{
...
}
型
这里描述的常量是:“%MyQueue%”和“AzureStorageConnectionString”
部署后,在Azure门户中导航到此功能-> Code + Test显示以下内容:
{
"generatedBy": "Microsoft.NET.Sdk.Functions.Generator-4.1.1",
"configurationSource": "attributes",
"bindings": [
{
"type": "queueTrigger",
"connection": "AzureStorageConnectionString",
"queueName": "%MyQueue%",
"name": "myQueueItem"
}
],
"disabled": false,
"scriptFile": "../bin/MyNamespace.Functions.dll",
"entryPoint": "Redacted"
}
型
出现上述错误后,此功能在部署/启动时被禁用。短语“AzureWebJobsAzureStorageConnectionString”没有出现在我的函数应用程序中的任何地方,尽管AzureWebJobsStorage和AzureStorageConnectionString都是必需的默认设置。我在哪里可以找到这个连接的字符串呢?
添加具有此名称的配置 * 确实 * 解决了问题,但我不想承诺继续执行此操作。
此外,此队列触发器在本地运行时按预期工作。local.settings.json看起来像这样:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=redacted;AccountKey=redacted==;EndpointSuffix=core.windows.net",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"fooBlobContainer": "foo-blob-container",
"myQueue": "my-queue"
},
"AppSettings": {
"KeyVaultSecrets": {
"KeyVaultName": "https://redacted.vault.azure.net",
"DataWarehouseConnection": "DataWarehouseConnection",
"LoggingDBConnectionString": "LoggingDBConnectionString",
"ClientId": "redacted"
},
"myServiceAPI": {
"BaseURL": "redacted.azurewebsites.net/"
}
}
}
型
1条答案
按热度按时间6qftjkof1#
无论何时创建Azure函数应用程序,函数运行时都需要一个存储帐户来运行。您的函数应用将使用此存储帐户来管理所有触发器和其他BAU文件。由于您尚未为函数应用程序设置此值,因此会失败。只需将您现有的存储帐户指向此配置,它就应该可以工作。
您所指的
AzureStorageConnectionString
只是用于队列所在的存储帐户的配置。您可以为AzureWebJobsAzureStorageConnectionString
配置使用相同的存储帐户来保存func应用程序文件,也可以为func应用程序使用单独的存储帐户。**底线是:**您的func应用程序需要一个存储帐户才能运行/工作。:)
参见:https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#azurewebjobsstorage