根据环境使用Azure功能和不同的存储帐户

问题描述 投票:0回答:5

我目前正在建立一个多发布者/单用户体系结构,使用Azure存储队列缓冲事件和Azure功能作为订阅者。

Publisher -> Queue -> Function

创建函数没有问题,我正在尝试解决的部分是如何设置同一函数的开发和生产部署。我在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}");
    }
}

我如何为连接提供不同的值,具体取决于我是部署到开发环境还是实时环境?

c# azure azure-functions azure-storage-queues
5个回答
3
投票

设置本地调试环境

您可以使用local.settings.json文件来定义本地设置。在本地使用Azure存储的先决条件是您需要在计算机上运行Azure Storage Emulator。在local.settings.json文件中,将Azure Storage Account连接字符串定义为UseDevelopmentStorage=true。该文件应如下所示:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true"
  }
}

默认情况下,如果没有为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}");
    }
}

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

QueueTrigger("tracker-readings", Connection = "CustomConnection")

local.settings.json文件中:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "CustomConnection": "Some custom connection string"
  }
}

有关更多详细信息,请参阅官方文档:

要设置Azure环境:

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

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

enter image description here

或者,您可以使用Azure Resource Manager templates以编程方式部署和更新环境设置。

您在Azure中创建的每个功能应用程序都有自己的环境,因此在为相关设置提供值后,您可以将功能部署到Azure中的多个环境(Dev / Test / Prod等),以及在不更改连接的情况下在本地调试代码每次都有字符串。


1
投票

在环境变量(或应用程序服务中的应用程序设置)中具有连接字符串。然后,您可以将应用程序设置设置为在不同环境中的不同值。


0
投票

我正在努力解决的是如何设置相同功能的开发和生产部署。

我不清楚你为什么要创建一个既作为生产又发展的功能。

实际上,Azure计费基于您的应用服务计划,因此您创建一个更多的azure功能可能不会花费更多。你可以创建两个函数来更清楚地区分它们。

如果您仍想使用单个功能,如Travis所说,您可以在应用程序设置中为不同的环境设置两个连接字符串。


0
投票

这是一个众所周知的场景,完全支持。您只需使用ARM模板和参数文件管理部署即可。

Deploy resources with Resource Manager templates and Azure PowerShell

连接字符串以及任何其他子/资源组相关设置只是参数。


0
投票

您可以将Connection设置为配置值(类似于Connection=AppSettingsKey.DatabaseConnectionString),然后为不同的平台(dev,staging,prod)设置不同的设置。

根据您的构建和部署工具,您可以在其中一个步骤中为连接字符串注入配置值。

另一种选择是使用存储连接字符串的Keyvault秘密。

© www.soinside.com 2019 - 2024. All rights reserved.