【问题标题】:Connection String not exists error when trying to connect blob trigger using Azure Active Directory Identity尝试使用 Azure Active Directory 标识连接 blob 触发器时出现连接字符串不存在错误
【发布时间】:2022-07-13 22:56:27
【问题描述】:

我正在尝试为我们的 ADLS2 容器目录实现 Azure Blob 触发器。 为此,我正在关注这两个 MS 文档

Azure Blob storage trigger for azure functions

Azure function extension libraries

这是我们的 local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "myconnection__blobServiceUri": "https://myadls2account.blob.core.windows.net",
    "myconnection__queueServiceUri": "https://myadls2account.blob.core.windows.net"
  }
}

这是我们的 blob 触发器

    [FunctionName("Function1")]
    public void Run([BlobTrigger("sample/my-directory/{name}",Connection = "myconnection")]Stream myBlob, string name, ILogger log)
    {
        log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
    }

但是执行的时候会触发下面的错误

Error indexing method 'Function1'
Microsoft.Azure.WebJobs.Host: Error indexing method 'Function1'. Microsoft.Azure.WebJobs.Extensions.Storage: Storage account connection string 'AzureWebJobsmyconnection' does not exist. Make sure that it is a defined App Setting.

请分享您的想法,我错过了什么或做错了什么?

【问题讨论】:

  • 我对这些触发器不太了解,但错误似乎很简单。您是否尝试过在根级别使用预期的名称创建应用设置?
  • 但我们正在尝试的解决方案是摆脱连接字符串并使用天蓝色的活动目录标识。对于使用 Azurite 的功能,我指定了 UseDevelopmentStorage=true
  • 我认为这只是一个命名问题。在您的 blobtrigger 中,您将连接定义为“myconnection”。在您的本地设置中,没有名为“myconnection”的连接字符串。尝试将 blobtrigger 中的连接更改为“AzureWebJobsStorage”。
  • 顺便说一句,您发布的第一个链接描述得很好:“如果应用程序设置名称以“AzureWebJobs”开头,您可以在此处仅指定名称的其余部分。例如,如果您设置连接到“MyStorage”时,Functions 运行时会查找名为“AzureWebJobsMyStorage”的应用设置。如果将连接留空,则 Functions 运行时会使用名为 AzureWebJobsStorage 的应用设置中的默认存储连接字符串
  • @rekcul 根据文档 (devblogs.microsoft.com/azure-sdk/…) 就是这样。它是我们在本地设置连接中指定的前缀

标签: c# azure-active-directory azure-functions azure-blob-trigger


【解决方案1】:

您的 blobtrigger 存在命名问题:

[FunctionName("Function1")]
public void Run([BlobTrigger("sample/my-directory/{name}",Connection = "myconnection")]Stream myBlob, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

根据您的代码,您将连接定义为“myconnection”。所以运行时在你的 local.settings.json 中寻找一个关键的“myconnection”。如果此密钥不可用,它将查找“AzureWebJobsmyconnection”。

所以现在有几种解决方案:

  1. 将“myconnection”值添加到 local.settings.json
  2. 将 AzureWebJobsmyconnection 值添加到 local.settings.json
  3. 保持连接为空以强制运行时使用名为“AzureWebJobsStorage”的默认连接字符串

当然可以在 local.settings.json 中为不同的 blob 触发器定义几个不同的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多