Поделиться через


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

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

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

Подсказка

Подробные сведения о том, как разрабатывать функции локально, см. в статьях, связанных с IDE.

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

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

Подсказка

Все локальные разработки используют основные средства Azure Functions Core Tools для предоставления среды выполнения Функций для отладки в локальной среде.

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

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

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

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

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

Имя файла Описание
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 файле с параметрами приложения в приложении-функции, в котором развертывается проект.

Файл 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.
При установке локального эмулятора Azurite и задании 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. Вы можете нацеливаться на актуальные службы, добавив соответствующие параметры строк подключения в массив в файле local.settings.json. Когда вы это делаете, локальные запуски во время тестирования могут повлиять на продуктовые службы. Вместо этого рекомендуется настроить отдельные службы для использования во время разработки и тестирования, а затем переключиться на разные службы во время рабочей среды.
  • Для триггеров на основе хранилища можно использовать локальный эмулятор хранилища.
  • Вы можете вручную запускать функции триггера, отличные от HTTP, с помощью специальных конечных точек администратора. Для получения дополнительной информации см. статью Вручную запустить функцию, не являющуюся HTTP-триггером.

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

Средства тестирования HTTP

Во время разработки можно легко вызывать любую из конечных точек функций из веб-браузера, когда они поддерживают метод HTTP GET. Однако для других методов HTTP, поддерживающих передачу данных, например POST или PUT, необходимо использовать средство тестирования HTTP для создания и отправки этих HTTP-запросов в конечные точки функции.

Внимание

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

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

Избегайте использования средств, которые централизованно хранят журнал HTTP-запросов (включая конфиденциальную информацию), не соблюдайте рекомендации по безопасности или не соблюдайте проблемы конфиденциальности данных.

Рекомендуется использовать одно из этих средств для безопасной отправки HTTP-запросов в конечные точки функций:

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

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

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

"AzureWebJobsStorage": "UseDevelopmentStorage=true"

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

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