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

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

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

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

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

Среда Языки Description
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 следует разрабатывать функции локально и публиковать проект кода в приложении-функции в Azure. Дополнительные сведения см. в разделе об ограничениях разработки в портал Azure

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

Файлы локального проекта

Каталог проекта Functions содержит следующие файлы в корневой папке проекта независимо от языка:

Имя файла Description
host.json Дополнительные сведения см. в справке по файлу host.json.
local.settings.json Параметры, используемые инструментами Core Tools при локальном запуске, включая параметры приложения. Дополнительные сведения см . в файле локальных параметров.
.gitignore Предотвращает случайную публикацию файла local.settings.json в репозитории Git. Дополнительные сведения см . в файле локальных параметров.
.vscode\extensions.json Файл параметров, используемый при открытии папки проекта в Visual Studio Code.

Другие файлы в проекте зависят от языка и конкретных функций. Дополнительные сведения см. в руководстве разработчика по языку.

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

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

Внимание

Так как файл local.settings.json может содержать секреты, например строки подключения, его не следует хранить в удаленном репозитории. Средства, которые поддерживают функции, предоставляют способы синхронизации параметров в файле 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>"
  }
}

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

Параметр Description
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 при локальном запуске.

Параметр Значения Description
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, следующие средства также позволяют синхронизировать параметры приложения с локальными параметрами в проекте:

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

При локальной разработке функций необходимо учитывать поведение триггеров и привязки. Для триггеров HTTP можно просто вызвать конечную точку HTTP на локальном компьютере, используя http://localhost/. Для функций, не активированных по протоколу HTTP, существует несколько вариантов локального выполнения:

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

Во время локального тестирования необходимо запустить узел, предоставляемый core Tools (func.exe). Дополнительные сведения см. в разделе Функции Azure Core Tools.

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

Во время локальной разработки можно использовать локальный эмулятор 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.
  • При публикации проекта не опубликуйте AzureWebJobsStorage параметр как UseDevelopmentStorage=true. В Azure параметр всегда должен быть строка подключения учетной записи хранения, AzureWebJobsStorage используемой приложением-функцией. Дополнительные сведения см. в разделе AzureWebJobsStorage.

Следующие шаги