Как программировать и тестировать Функции Azure в локальной среде

Хотя вы можете разрабатывать и тестировать Функции Azure на портале Azure, многие разработчики предпочитают локальную среду разработки. Решение "Функции" позволяет с легкостью использовать предпочитаемый редактор кода и средства разработки для создания и тестирования функций на локальном компьютере. Локальные функции можно подключать к действующим службам Azure, а их отладку можно выполнять на локальном компьютере с помощью полной среды выполнения решения "Функции".

В этой статье приведены ссылки на конкретные среды разработки для предпочитаемого языка. Здесь также приведено общее руководство для локальной разработки. Например руководство по работе с файлом local.settings.json.

Локальные среды разработки

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

Среда Языки Описание
Visual Studio Code C# (внутрипроцессный)
C# (изолированный рабочий процесс)
JavaScript
PowerShell
Python
Расширение Функций Azure для VS Code добавляет поддержку средства "Функции" в VS Code. Требуются основные инструменты. Поддерживает разработку на платформах Linux, macOS и Windows при использовании версии 2.x основных инструментов. Для получения дополнительных сведений см. статью Создание функции в Azure с помощью Visual Studio Code.
Командная строка или терминал C# (внутрипроцессный)
C# (изолированный рабочий процесс)
JavaScript
PowerShell
Python
Azure Functions Core Tools предоставляет базовую среду выполнения и шаблоны для создания функций, дающих возможность локальной разработки. Версия 2.x поддерживает разработку в Linux, macOS и Windows. Во всех средах применяют основные инструменты для локальной среды выполнения средства "Функции".
Visual Studio C# (внутрипроцессный)
C# (изолированный рабочий процесс)
Средства Функции Azure включены в рабочую нагрузку Разработка Azureв Visual Studio, начиная с Visual Studio 2019. Позволяет компилировать функции в библиотеке классов и публиковать библиотеки DLL в Azure. Включает основные инструменты для локального тестирования. Дополнительные сведения см. в статье Инструменты Функций Azure для Visual Studio.
Maven (различные) Java Архетип Maven поддерживает основные инструменты и обеспечивает возможность разработки функций Java. Версия 2.x поддерживает разработку в Linux, macOS и Windows. Дополнительные сведения см. в статье Создание первой функции с помощью Java и Maven. Также поддерживает разработку с помощью Eclipse и IntelliJ IDEA.

Примечание

Не объединяйте локальную разработку и разработку с помощью портала разработки в одном приложении-функции. При создании и публикации функций из локального проекта вы не сможете хранить или изменять код проекта на портале.

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

Файл с локальными параметрами

В локальном файле local.settings.json хранятся параметры приложения и параметры для локальных средств разработки. Параметры в файле local.settings.json используются только при локальном выполнении проекта. При публикации проекта в Azure обязательно добавьте все необходимые параметры в параметры приложения-функции.

Важно!

Так как файл local.settings.jsв может содержать секреты, например строки подключения, его не следует хранить в удаленном репозитории. Средства, которые поддерживают функции, предоставляют способы синхронизации параметров в файле local.settings.json с помощью параметров приложения в приложении-функции, в котором развернут проект.

Файл локальных параметров имеет следующую структуру:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<language worker>",
    "AzureWebJobsStorage": "<connection-string>",
    "MyBindingConnection": "<binding-connection-string>",
    "AzureWebJobs.HttpExample.Disabled": "true"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*",
    "CORSCredentials": false
  },
  "ConnectionStrings": {
    "SQLConnectionString": "<sqlclient-connection-string>"
  }
}

При локальном выполнении проектов поддерживаются следующие параметры:

Параметр Описание
IsEncrypted Если этот параметр имеет значение true, все значения шифруются с помощью ключа локального компьютера. Используется с командами func settings. Значение по умолчанию — false. Возможно, вам потребуется зашифровать файл local.settings.json на локальном компьютере, если он содержит секреты, например строки подключения службы. Узел автоматически расшифровывает параметры при запуске. Перед чтением локально зашифрованных параметров используйте команду func settings decrypt.
Values Коллекция параметров приложения, используемых при локальном выполнении проекта. Эти пары "ключ — значение" (строковые выражения) соответствуют параметрам приложения-функции в Azure, например AzureWebJobsStorage. Многие триггеры и привязки имеют свойство, относящееся к строке подключения параметра приложения, например Connection для триггера хранилища BLOB-объектов. Для таких свойств требуется определить параметр приложения в массиве Values. Список часто используемых параметров см. в следующей таблице.
Значения должны быть строками, а не объектами JSON или массивами. Имена параметров не могут включать двойное подчеркивание (__) и не должны включать двоеточие (:). Символы двойного подчеркивания зарезервированы средой выполнения, а двоеточие зарезервировано для поддержки внедрения зависимостей.
Host Параметры в этом разделе служат для настройки хост-процесса Функций при выполнении проектов в локальной среде. Эти параметры отделены от параметров host.json, которые также применяются при выполнении проектов в Azure.
LocalHttpPort Задает порт по умолчанию, используемый при выполнении локального узла Функций (func host start и func run). Аргумент командной строки --port имеет приоритет над этим параметром. Например, при выполнении в интегрированной среде разработки Visual Studio вы можете изменить номер порта, перейдя в окно "Свойства проекта -> Отладка >" и явно указав номер порта в команде host start --port <your-port-number>, которая может быть указана в поле "Аргументы приложения".
CORS Определяет источники, для которых разрешен общий доступ к ресурсам независимо от источника (CORS). Источники указываются в виде разделенного запятыми списка без пробелов. Допускается подстановочное значение (*), разрешающее запросы из любого источника.
CORSCredentials Если задано значение true, разрешает запросы withCredentials.
ConnectionStrings Коллекция. Не применяйте эту коллекцию для строк подключения, используемых привязками функций. Эта коллекция используется только платформами, которые обычно получают строки подключений из раздела ConnectionStrings в файле конфигурации, как например Entity Framework. Строки подключения, содержащиеся в этом объекте, добавляются в среду с типом поставщика System.Data.SqlClient. Элементы этой коллекции не публикуются в Azure с другими параметрами приложения. Необходимо явным образом добавить эти значения в коллекцию Connection strings в настройках приложения-функции. Если вы создаете параметр SqlConnection в коде функции, следует сохранить значение строки подключения на портале в Параметрах приложения, вместе с другими подключениями.

Следующие параметры приложения можно включать в массив Values при локальном запуске.

Параметр Значения Описание
AzureWebJobsStorage Строка подключения учетной записи хранения или
UseDevelopmentStorage=true
Содержит строку подключения для учетной записи хранения Azure Требуется при использовании триггеров, отличающихся от HTTP. См. справочник по AzureWebJobsStorage.
При наличии локального эмулятора службы хранилища Azure вы можете задать для параметра AzureWebJobsStorageзначение UseDevelopmentStorage=true, чтобы в Core Tools использовался эмулятор. Дополнительные сведения см. в статье Локальный эмулятор хранения.
AzureWebJobs.<FUNCTION_NAME>.Disabled true|false Чтобы отключить функцию при локальном выполнении, добавьте в коллекцию "AzureWebJobs.<FUNCTION_NAME>.Disabled": "true", где <FUNCTION_NAME> — имя функции. См. сведения о том, как отключать и включать функции в Функциях Azure.
FUNCTIONS_WORKER_RUNTIME dotnet
dotnet-isolated
node
java
powershell
python
Указывает целевой язык среды выполнения Функций. Требуется для среды выполнения Функций версии 2.x и выше. Этот параметр создается для проекта с помощью Core Tools. См. справочник по FUNCTIONS_WORKER_RUNTIME.
FUNCTIONS_WORKER_RUNTIME_VERSION ~7 Указывает, что PowerShell 7 будет использоваться при локальном запуске. Если параметр не задан, используется PowerShell Core 6. Этот параметр используется только при локальном запуске. При запуске в Azure версия среды выполнения PowerShell определяется параметром конфигурации сайта powerShellVersion, который можно настроить на портале.

Синхронизация параметров

При локальной разработке функций все локальные параметры, необходимые вашему приложению, также должны присутствовать в параметрах приложения-функции, в котором развертывается код. Также может потребоваться скачать текущие параметры из приложения-функции в локальный проект. Хотя вы можете вручную настроить параметры приложения в портал Azure, следующие средства также позволяют синхронизировать параметры приложения с локальными параметрами в проекте:

Триггеры и привязки

При локальной разработке функций необходимо учитывать поведение триггера и привязки. Самый простой способ проверить привязки во время локальной разработки — использовать строки подключения, предназначенные для динамических служб Azure. Вы можете нацелить динамические службы, добавив соответствующие параметры строки подключения в Values массив в файле local.settings.json. При этом локальные выполнения во время тестирования влияют на динамические данные службы. Поэтому рекомендуется настроить отдельные службы для использования во время разработки и тестирования, а затем переключиться на разные службы во время рабочей среды. Вы также можете использовать локальный эмулятор хранения.

Эмулятор локального хранилища

Во время локальной разработки вы можете использовать локальный эмулятор Azurite при тестировании функций с привязками службы хранилища Azure (хранилище очередей, хранилище BLOB-объектов и хранилище таблиц) без подключения к службам удаленного хранилища. Azurite интегрируется с Visual Studio Code и Visual Studio, и вы также можете запустить его из командной строки с помощью npm. Дополнительные сведения см. в статье Использование эмулятора Azurite для разработки и тестирования службы хранилища Azure.

Следующий параметр в Values коллекции файла local.settings.json указывает локальному узлу Функций использовать Azurite для подключения по умолчанию AzureWebJobsStorage :

"AzureWebJobsStorage": "UseDevelopmentStorage=true"

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

Дальнейшие действия