代码之家  ›  专栏  ›  技术社区  ›  Andrew Williamson

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

  •  2
  • Andrew Williamson  · 技术社区  · 7 年前

    我目前正在设置一个多发布服务器/单订阅服务器体系结构,使用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}");
        }
    }
    

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

    5 回复  |  直到 7 年前
        1
  •  4
  •   Andrew Williamson    7 年前

    设置本地调试环境

    您可以使用 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}");
        }
    }
    

    或者,如果要显式指定连接字符串,则可以设置 联系 名称 ,并在 Values 配置文件的节:

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

    地方的设置。json 文件:

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

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

    要设置Azure环境,请执行以下操作:

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

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

    enter image description here

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

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

        2
  •  1
  •   Travis H    7 年前

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

        3
  •  0
  •   Joey Cai    7 年前

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

    我不清楚您为什么要创建一个生产和开发功能。

    事实上 Azure计费基于您的应用程序服务计划 ,因此您又创建了一个azure函数 可能不会更贵 . 您可以创建两个函数 更清楚地区分它们 .

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

        4
  •  0
  •   DTRT    7 年前

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

    Deploy resources with Resource Manager templates and Azure PowerShell

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

        5
  •  0
  •   Horia Toma    7 年前

    您可以将连接设置为配置值(类似 Connection=AppSettingsKey.DatabaseConnectionString )然后针对不同的平台(dev、staging、prod)进行不同的设置。

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

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