如何在本地开发环境中将Azure应用配置服务与Azure函数一起使用?

7y4bm7vi  于 2023-03-31  发布在  其他
关注(0)|答案(1)|浏览(151)

我正在编写一个Azure函数(隔离模式下的服务总线主题触发函数),它是一个更大的解决方案的一部分,该解决方案具有API和其他项目。API从Azure应用程序配置服务读取配置设置,并且工作正常。
我想做的是从那里读取我的函数中的设置,并根据这些设置设置为函数设置绑定,但它不起作用。
我是这么做的:

  • 我在Azure订阅中创建了一个应用配置服务,并在其中添加了配置密钥。

  • 然后,我使用如下代码在Program.cs中添加了对该应用配置服务的引用:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureAppConfiguration(builder =>
    {
        builder.AddAzureAppConfiguration(
            "Endpoint=https://myfunctionconfig.azconfig.io;Id=somerandomstring;Secret=otherrandomstring",
            optional: false)
            .AddEnvironmentVariables()
        .Build();
    })
    .ConfigureFunctionsWorkerDefaults()
    .Build();

host.Run();
  • 我的函数代码看起来像这样:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace ServiceBusTriggeredFunction;

public static class ServiceBusTopicTrigger
{
    [Function("ServiceBusTopicTrigger")]
    public static void Run([ServiceBusTrigger("%FunctionsConfiguration:ServiceBusTopicTrigger:Topic%", "%FunctionsConfiguration:ServiceBusTopicTrigger:Subscription%", Connection = "FunctionsConfiguration:ServiceBusTopicTrigger:Connection")] string mySbMsg,
        FunctionContext context)
    {
        var logger = context.GetLogger("ServiceBusTopicTrigger");
        logger.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
    }
}

但是,当我在本地运行代码时,我得到以下错误:
“ServiceBusTopicTrigger”函数出错:Microsoft.Azure.WebJobs.Host:索引方法“Functions. ServiceBusTopicTrigger”时出错。Microsoft.Azure.WebJobs.Host:“%FunctionsConfiguration:ServiceBusTopicTrigger:Topic%”未解析为值。
基本上问题是它无法读取设置值(FunctionsConfiguration:ServiceBusTopicTrigger:Topic)。
但是,如果我在local.settings.json中定义相同的设置,相同的代码可以完美地工作。

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
        "FunctionsConfiguration:ServiceBusTopicTrigger:Connection": "Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=myaccesskey=",
        "FunctionsConfiguration:ServiceBusTopicTrigger:Topic": "topic",
        "FunctionsConfiguration:ServiceBusTopicTrigger:Subscription": "subscription"
    }
}

我想知道是否有人能告诉我我在这里做错了什么,是否有一种方法让我从应用程序配置服务中读取设置(我想这也适用于appsettings.json),并根据设置设置函数绑定。

31moq8wy

31moq8wy1#

我在Github上问了同样的问题-https://github.com/Azure/azure-functions-dotnet-worker/issues/1437,这是我得到的回复:
扩展/绑定当前不支持工作者配置源,因为该配置必须在应用程序/平台级别可用(平台组件依赖于该配置)。
目前,您的最佳选择是使用此处描述的功能:https://learn.microsoft.com/en-us/azure/app-service/app-service-configuration-references

相关问题