В настоящее время я настраиваю архитектуру с несколькими издателями и отдельными подписчиками, используя очереди хранилища 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}");
    }
}

Как я могу предоставить другое значение для соединения, в зависимости от того, развертываю ли я среду разработки или живую среду?

2
Andrew Williamson 2 Мар 2018 в 05:59

5 ответов

Лучший ответ

Чтобы настроить локальную среду отладки

Вы можете использовать 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, в которую вы развертываете. Обратите внимание, что значения AzureWebJobsStorage и AzureWebJobsDashboard устанавливаются автоматически на основе учетной записи хранения, которую вы выбираете при создании функции.

Самый простой способ определить настройки - через портал Azure. Перейдите в Настройки приложения в Function App и определите фактическое значение строки подключения учетной записи хранения. Вам не нужно вносить какие-либо изменения кода в функцию Azure, она автоматически выберет строку подключения из настроек приложения.

enter image description here

Кроме того, вы можете использовать диспетчер ресурсов Azure шаблоны, для развертывания и обновления настроек среды программно.

Каждое приложение-функция, которое вы создаете в Azure, имеет свою собственную среду, поэтому после предоставления значений для соответствующих параметров вы можете развернуть свою функцию в нескольких средах в Azure (Dev / Test / Prod и т. Д.), А также отладить свой код локально, не меняя подключения струны каждый раз.

4
Andrew Williamson 3 Мар 2018 в 07:56

Укажите строку подключения в переменной среды (или настройку приложения в службах приложения). После этого вы можете настроить для приложения разные значения в разных средах.

1
Travis H 2 Мар 2018 в 06:16

Я пытаюсь понять, как настроить разработку и развертывание в одной и той же функции.

Мне непонятно, почему вы хотите создать функцию как производства, так и разработки.

На самом деле биллинг Azure основан на плане обслуживания вашего приложения , поэтому создание еще одной функции Azure может стоить не дороже . Вы можете создать две функции, чтобы различать их более четко .

Если вы по-прежнему хотите использовать одну функцию, как сказал Трэвис, вы можете установить две строки подключения в настройках приложения для другой среды.

0
Joey Cai 2 Мар 2018 в 09:47

Это хорошо известный сценарий и полностью поддерживается. Все, что вам нужно для управления развертыванием, - это шаблон ARM и файл параметров.

Развертывание ресурсов с помощью шаблонов Resource Manager и Azure PowerShell

Строка соединения, наряду с любыми другими зависимыми настройками Sub / Resource Group, является просто параметрами.

0
Johns-305 2 Мар 2018 в 10:50

Вы можете установить для Connection значение конфигурации (что-то вроде Connection=AppSettingsKey.DatabaseConnectionString), а затем иметь разные настройки для разных платформ (dev, staging, prod).

В зависимости от вашего инструментария для сборки и развертывания, вы можете ввести значения конфигурации для строк подключения во время одного из этих шагов.

Другой вариант - использовать секрет Keyvault, в котором хранится строка подключения.

0
Horia Toma 2 Мар 2018 в 15:58