当前位置: 首页 > 知识库问答 >
问题:

尝试使用 Azure 活动目录标识连接 blob 触发器时,连接字符串不存在错误

鲜于承基
2023-03-14

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

Azure Blob storage trigger for azure functions

Azure 函数扩展库

这是我们的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.

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

共有1个答案

鲁鹏
2023-03-14

您的 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");
}

根据您的代码,您将连接定义为“myconnect”。所以运行时正在您的local.settings.json.中寻找一个键“myconnect”。如果这个键不可用,它将寻找“AzureWebJobsmyconnect”。

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

  1. 将“myconnection”密钥添加到 local.settings.json
  2. 将 AzureWebJobsmyconnection“ 键添加到 local.settings.json
  3. 将 Blob 触发器中的连接保留为空,以强制运行时使用默认密钥“AzureWebJobsStorage”

当然,可以在local.settings.json中为不同的blob触发器定义几个不同的变量。大概是这样的:

"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"MyFirstBlob": "{first}",
"MySecondBlob": "{second}"

然后在blob触发器连接中使用这些

Connection = "MyFirstBlob" or connection = "MySecondBlob"
 类似资料:
  • 我正在尝试设置Blob触发函数,但我不希望将连接字符串与所述函数共享到我的存储帐户。 从理论上讲,由于 Blob 存储与 Azure Active Directory 集成,因此应该可以对我的 Blob 容器提供正确的 RBAC 权限,以便函数的标识(托管服务标识)具有创建触发器和从 Blob 读取所需的任何权限。 但是,我还没有找到实现这一目标的方法。 我发现的所有选项都涉及到使用一个完整的连接

  • 您好,我正在创建一个新的blob触发的azure函数,我想了解函数头中“Connection=”参数的作用: 我所做的是完全删除该参数,在我将其部署到我的azure订阅后,它就可以正常工作了。因此,我想知道如果我没有使用连接参数指定任何特定帐户,该函数如何确定要使用哪个存储帐户。 这就是我部署函数的方式:

  • 问题内容: 在Windows上安装了Docker,并额外安装了2个Oracle VM VirualBox和Kitematic。我在Windows 10 PC中禁用了Hyper-V。现在的问题是我无法从DockerHub下载任何Docker映像,甚至我都无法以如下方式运行命令 两端都显示以下错误。 尝试连接时发生错误:获取 http:// localhost:2375 / v1.21 / info

  • 是否需要其他数据来生成ConnectionString?

  • 我有一个函数应用,定义如下 其中< code > let-test-this-in 和< code > let-test-this-out 是连接字符串为< code >“defaultendpointsprocol=”的存储帐户下现有存储队列的名称...;account name =…;AccountKey= ... "(直接从门户中的访问键-连接字符串复制而来)。我发布时生成的function