Как программировать и тестировать функции 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.
Средства тестирования HTTP
Во время разработки можно легко вызывать любую из конечных точек функций из веб-браузера, когда они поддерживают метод HTTP GET. Однако для других методов HTTP, поддерживающих полезные данные, например POST или PUT, необходимо использовать средство тестирования HTTP для создания и отправки этих HTTP-запросов в конечные точки функции.
Внимание
В сценариях, когда запросы должны включать конфиденциальные данные, обязательно используйте средство, которое защищает данные и снижает риск предоставления конфиденциальных данных общественности. Конфиденциальные данные, которые следует защитить, могут включать учетные данные, секреты, маркеры доступа, ключи API, данные геолокации, даже личные данные (PII).
Вы можете защитить данные, выбрав средство тестирования HTTP, которое работает в автономном или локальном режиме, не синхронизирует данные с облаком и не требует входа в учетную запись в Интернете. Некоторые средства также могут защитить данные от случайного воздействия, реализуя определенные функции безопасности.
Избегайте использования средств, которые централизованно хранят журнал HTTP-запросов (включая конфиденциальную информацию), не соблюдайте рекомендации по безопасности или не соблюдайте проблемы конфиденциальности данных.
Рекомендуется использовать одно из этих средств для безопасной отправки HTTP-запросов в конечные точки функций:
- Visual Studio Code с расширением из Visual Studio Marketplace, например REST Client
- PowerShell Invoke-RestMethod
- Microsoft Edge — средство сетевой консоли
- Бруно
- curl
Эмулятор локального хранилища
Во время локальной разработки можно использовать локальный эмулятор 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
.
Следующие шаги
- Дополнительные сведения о локальной разработке скомпилированных функций C# (как внутрипроцессных, так и изолированных рабочих процессов) с помощью Visual Studio см. в статье "Разработка Функции Azure с помощью Visual Studio".
- Дополнительные сведения о локальной разработке функций с помощью VS Code на компьютере Mac, Linux или Windows см. в статье о начале работы с Visual Studio Code для предпочитаемого языка:
- Дополнительные сведения о разработке функций из командной строки или терминала см. в статье Как программировать и тестировать Функции Azure в локальной среде.