根据环境使用具有不同存储帐户的 Azure Functions

And*_*son 3 c# azure azure-storage-queues azure-functions

我目前正在设置多发布者/单订阅者体系结构,使用 Azure 存储队列来缓冲事件,并使用 Azure Functions 作为订阅者。

Publisher -> Queue -> Function
Run Code Online (Sandbox Code Playgroud)

创建功能没有问题,我想要解决的部分是如何设置相同功能的开发和生产部署。我在 Visual Studio 中创建了该函数,连接是一个常量字符串文字:

public static class FooAdded
{
    [FunctionName("FooAdded")]
    public static void Run([QueueTrigger("tracker-readings", Connection = "https://foo.queue.core.windows.net/?sv=...")]string myQueueItem, TraceWriter log)
    {
        log.Info($"C# Queue trigger function processed: {myQueueItem}");
    }
}
Run Code Online (Sandbox Code Playgroud)

如何根据我部署到开发环境还是实时环境来为连接提供不同的值?

Shi*_*ngh 6

设置本地调试环境

您可以使用local.settings.json文件来定义本地设置。在本地使用Azure存储的前提是你需要Azure Storage Emulator在你的机器上运行。在文件中将连接字符串local.settings.json定义为. 该文件应如下所示:Azure Storage AccountUseDevelopmentStorage=true

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true"
  }
}
Run Code Online (Sandbox Code Playgroud)

Connection默认情况下,如果没有为属性的属性提供值QueueTrigger,它将使用以下AzureWebJobsStorage设置:

public static class FooAdded
{
    [FunctionName("FooAdded")]
    public static void Run([QueueTrigger("tracker-readings")]string myQueueItem, TraceWriter log)
    {
        log.Info($"C# Queue trigger function processed: {myQueueItem}");
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想显式指定连接字符串,则可以将 设为连接字符串的Connection名称(而不是连接字符串本身),并在配置文件的 部分中为其添加一个条目:Values

QueueTrigger("tracker-readings", Connection = "CustomConnection")
Run Code Online (Sandbox Code Playgroud)

在local.settings.json文件中:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "CustomConnection": "Some custom connection string"
  }
}
Run Code Online (Sandbox Code Playgroud)

更多详情请参考官方文档:

设置 Azure 环境:

中的值local.settings.json不会发布到 Azure,因此需要在要部署到的 Azure 环境中定义每个设置的值。AzureWebJobsStorage请注意,和 的值AzureWebJobsDashboard是根据您在创建函数时选择的存储帐户自动设置的。

定义设置的最简单方法是通过 Azure 门户。转到应用程序设置Function App并定义存储帐户连接字符串的实际值。您无需对 azure 函数进行任何代码更改,它会自动从应用程序设置中获取连接字符串。

在此输入图像描述

或者,您可以使用Azure 资源管理器模板以编程方式部署和更新环境设置。

您在 Azure 中创建的每个函数应用程序都有自己的环境,因此在提供相关设置的值后,您可以将函数部署到 Azure 中的多个环境(开发/测试/生产等),并在本地调试代码而无需更改连接每次都是字符串。