Azure队列触发器在部署时失败,需要奇怪的连接字符串

qrjkbowd  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(97)

在部署时,具有新队列触发器的函数应用程序将触发如下错误:

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/"
    }
  }
}

6qftjkof

6qftjkof1#

无论何时创建Azure函数应用程序,函数运行时都需要一个存储帐户来运行。您的函数应用将使用此存储帐户来管理所有触发器和其他BAU文件。由于您尚未为函数应用程序设置此值,因此会失败。只需将您现有的存储帐户指向此配置,它就应该可以工作。
您所指的AzureStorageConnectionString只是用于队列所在的存储帐户的配置。您可以为AzureWebJobsAzureStorageConnectionString配置使用相同的存储帐户来保存func应用程序文件,也可以为func应用程序使用单独的存储帐户。

**底线是:**您的func应用程序需要一个存储帐户才能运行/工作。:)

参见:https://learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#azurewebjobsstorage

相关问题