Использование функций Azure с другой учетной записью хранения в зависимости от среды
В настоящее время я настраиваю архитектуру с несколькими издателями и отдельными подписчиками, используя очереди хранилища 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 ответов
Чтобы настроить локальную среду отладки
Вы можете использовать файл 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, она автоматически выберет строку подключения из настроек приложения.
Кроме того, вы можете использовать шаблоны Azure Resource Manager для программного развертывания и обновления параметров среды.
Каждое приложение-функция, которое вы создаете в Azure, имеет свою собственную среду, поэтому после предоставления значений для соответствующих параметров вы можете развернуть свою функцию в нескольких средах в Azure (Dev/Test/Prod и т. Д.), А также отладить свой код локально, не меняя подключения струны каждый раз.
Содержите строку подключения в переменной среды (или настройку приложения в службах приложения). После этого вы можете настроить для приложения разные значения в разных средах.
Я пытаюсь понять, как настроить разработку и развертывание в одной и той же функции.
Мне непонятно, почему вы хотите создать функцию как производства, так и разработки.
На самом деле биллинг Azure основан на плане обслуживания вашего приложения, поэтому создание еще одной функции Azure может не стоить дороже. Вы можете создать две функции, чтобы различать их более четко.
Если вы все еще хотите использовать одну функцию, как сказал Трэвис, вы можете установить две строки подключения в настройках приложения для другой среды.
Вы можете установить соединение на значение конфигурации (что-то вроде Connection=AppSettingsKey.DatabaseConnectionString
), а затем имеют разные настройки для разных платформ (dev, staging, prod).
В зависимости от вашего инструментария для сборки и развертывания, вы можете ввести значения конфигурации для строк подключения во время одного из этих шагов.
Другой вариант - использовать секрет Keyvault, в котором хранится строка подключения.
Это хорошо известный сценарий и полностью поддерживается. Все, что вам нужно для управления развертыванием, - это шаблон ARM и файл параметров.
Развертывание ресурсов с помощью шаблонов Resource Manager и Azure PowerShell
Строка соединения, наряду с любыми другими зависимыми настройками Sub/Resource Group, является просто параметрами.