Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы используете локальные средства командной строки для создания функции, которая отвечает на HTTP-запросы. После того как вы проверите код локально, вы развернете его в Azure Functions на бессерверном плане размещения Flex Consumption.
Завершение этого быстрого старта влечет за собой небольшие расходы в несколько центов США или меньше в вашей учетной записи Azure.
Выберите предпочитаемый язык разработки в верхней части статьи.
Prerequisites
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
-
Пакет разработчиков Java 17
- Если вы используете другую поддерживаемую версию Java, необходимо обновить файл pom.xml проекта.
- Переменная
JAVA_HOMEсреды должна быть задана в расположении установки правильной версии пакета средств разработки Java (JDK).
- Apache Maven 3.8.x
Обработчик JSON командной
jqстроки, используемый для анализа выходных данных JSON, а также доступен в Azure Cloud Shell.
Установка основных инструментов Функций Azure
Рекомендуемый способ установки основных средств зависит от операционной системы локального компьютера разработки.
Следующая процедура устанавливает Core Tools версии v4.x с помощью установщика Windows (MSI). Дополнительные сведения о других установщиках на основе пакетов, см. в файле readme для Core Tools.
Скачайте и запустите установщик Core Tools для используемой версии Windows:
- v4.x — Windows 64-разрядная версия (рекомендуется для отладки Visual Studio Code требуется 64-разрядная версия.)
- v4.x — Windows 32-разрядная версия
Если вы ранее использовали установщик Windows (MSI) для установки основных инструментов в Windows, перед установкой последней версии удалите старую версию из команды "Добавить программы".
Создание и активация виртуальной среды
В подходящей папке выполните следующие команды, чтобы создать и активировать виртуальную среду с именем .venv. Обязательно используйте одну из версий Python, поддерживаемых функциями Azure.
python -m venv .venv
source .venv/bin/activate
Если пакет venv не установлен Python для вашего дистрибутива Linux, выполните следующую команду:
sudo apt-get install python3-venv
Все последующие команды будут выполняться в этой активированной виртуальной среде.
Создание локального проекта кода и функции
В Функциях Azure проект кода — это приложение, содержащее одну или несколько отдельных функций, которые каждый отвечает на определенный триггер. Все функции в проекте используют одинаковые конфигурации и развертываются как единица в Azure. В этом разделе вы создадите проект кода, содержащий одну функцию.
В терминале или командной строке выполните следующую
func initкоманду, чтобы создать проект приложения-функции в текущей папке:func init --worker-runtime dotnet-isolated
В терминале или командной строке выполните следующую
func initкоманду, чтобы создать проект приложения-функции в текущей папке:func init --worker-runtime node --language javascript
В терминале или командной строке выполните следующую
func initкоманду, чтобы создать проект приложения-функции в текущей папке:func init --worker-runtime powershell
В терминале или командной строке выполните следующую
func initкоманду, чтобы создать проект приложения-функции в текущей папке:func init --worker-runtime python
В терминале или командной строке выполните следующую
func initкоманду, чтобы создать проект приложения-функции в текущей папке:func init --worker-runtime node --language typescript
В пустой папке выполните следующую
mvnкоманду, чтобы создать проект кода из архетипа Функций Azure Maven:mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17Important
- Используйте
-DjavaVersion=11, чтобы функции выполнялись на Java 11. Дополнительные сведения см. в версиях Java. - Чтобы выполнить задания из этой статьи, переменной среды
JAVA_HOMEнеобходимо присвоить расположение установки правильной версии JDK.
- Используйте
Maven запрашивает значения, которые позволят завершить создание проекта развертывания.
При появлении запроса укажите следующие значения:Prompt Value Description groupId com.fabrikamЭто значение уникально идентифицирует проект среди всех остальных. Оно должно соответствовать правилам именования пакетов для Java. artifactId fabrikam-functionsЭто значение содержит имя JAR-файла, без номера версии. version 1.0-SNAPSHOTВыберите значение по умолчанию. package com.fabrikamЭто значение определяет пакет Java для создаваемого кода функции. Используйте значения по умолчанию. Введите
Yили нажмите клавишу ВВОД для подтверждения.Maven создает файлы проекта в новой папке с именем artifactId, который в этом примере является
fabrikam-functions.Перейдите в папку проекта:
cd fabrikam-functionsВы можете просмотреть созданный шаблоном код для новой функции триггера HTTP в Function.java в каталоге проекта \src\main\java\com\fabrikam .
Используйте эту
func newкоманду, чтобы добавить функцию в проект:func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"Новый файл кода добавляется в проект. В этом случае
--nameаргумент — это уникальное имя функции (HttpExample), а--templateаргумент указывает триггер HTTP.
Корневая папка проекта содержит различные файлы для проекта, включая файлы конфигураций с именем local.settings.json и host.json. Файл local.settings.json может содержать секреты, скачанные из Azure, поэтому файл по умолчанию исключен из системы управления версиями в GITIGNORE-файле.
Локальное выполнение функции
Проверьте новую функцию, запустив проект локально и вызвав конечную точку функции.
Используйте эту команду, чтобы запустить локальный узел среды выполнения Функций Azure в корневой папке проекта:
func startfunc startnpm install npm startmvn clean package mvn azure-functions:runБлиже к концу выходных данных появятся следующие строки:
... Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample ...Note
Если конечная точка HttpExample не отображается так, как ожидалось, скорее всего, вы запустили хост вне корневой папки проекта. В этом случае остановите хост-приложение клавишами CTRL+C, перейдите в корневую папку проекта и снова выполните указанную выше команду.
Скопируйте URL-адрес вашей функции из этого вывода в браузер. Перейдите по URL-адресу функции, и вы должны получить успешный ответ с сообщением "hello world".
Когда закончите, нажмите клавиши Ctrl+C и выберите
y, чтобы остановить хост функций.
Создание вспомогательных ресурсов Azure для функции
Прежде чем развернуть код функции в Azure, необходимо создать следующие ресурсы:
- группу ресурсов — логический контейнер связанных ресурсов;
- Учетная запись хранения по умолчанию, которая используется узлом функций для поддержания состояния и других сведений о функциях.
- Управляемое удостоверение, назначенное пользователем, которое хост функций использует для подключения к учетной записи хранения по умолчанию.
- Приложение-функция, которое предоставляет окружение для выполнения кода вашей функции. Приложение функций соответствует вашему локальному проекту функций и позволяет группировать функции в логические единицы для более простого управления, развертывания и совместного использования ресурсов.
Используйте команды Azure CLI, описанные в этих шагах, чтобы создать необходимые ресурсы.
Войдите в Azure, если вы еще этого не сделали:
az loginКоманда
az loginвходит в вашу учетную запись Azure. Пропустите этот шаг при запуске в Azure Cloud Shell.Если вы еще этого не сделали, используйте эту
az extension addкоманду для установки расширения Application Insights:az extension add --name application-insightsИспользуйте команду az group create , чтобы создать группу ресурсов с именем
AzureFunctionsQuickstart-rgв выбранном регионе:az group create --name "AzureFunctionsQuickstart-rg" --location "<REGION>"В этом примере замените
<REGION>на регион рядом с вами, который поддерживает план потребления Flex. Используйте команду az functionapp list-flexconsumption-locations , чтобы просмотреть список поддерживаемых в настоящее время регионов.Используйте команду az storage account create, чтобы создать учетную запись хранения общего назначения в группе ресурсов и регионе:
az storage account create --name <STORAGE_NAME> --location "<REGION>" --resource-group "AzureFunctionsQuickstart-rg" \ --sku "Standard_LRS" --allow-blob-public-access false --allow-shared-key-access falseВ этом примере замените
<STORAGE_NAME>на имя, подходящее вам и уникальное в хранилище Azure. Имена должны содержать от трех до 24 символов и содержать только цифры и строчные буквы.Standard_LRSуказывает учетную запись общего назначения, которая поддерживается Функциями. Доступ к этой новой учетной записи можно получить только с помощью удостоверений, прошедших проверку подлинности Microsoft Entra, которым предоставлены разрешения для определенных ресурсов.Используйте этот скрипт для создания управляемого удостоверения, назначаемого пользователем, анализа возвращаемых свойств JSON объекта с помощью
jqи предоставленияStorage Blob Data Ownerразрешений в учетной записи хранения по умолчанию:output=$(az identity create --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" --location <REGION> \ --query "{userId:id, principalId: principalId, clientId: clientId}" -o json) userId=$(echo $output | jq -r '.userId') principalId=$(echo $output | jq -r '.principalId') clientId=$(echo $output | jq -r '.clientId') storageId=$(az storage account show --resource-group "AzureFunctionsQuickstart-rg" --name <STORAGE_NAME> --query 'id' -o tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal \ --role "Storage Blob Data Owner" --scope $storageIdЕсли у вас нет служебной
jqпрограммы в локальной оболочке Bash, она доступна в Azure Cloud Shell. В этом примере замените<STORAGE_NAME>на имя вашей учетной записи хранения по умолчанию и<REGION>на регион соответственно.Команда az identity create создает удостоверение с именем
func-host-storage-user. ВозвращенныйprincipalIdиспользуется для назначения разрешений этому новому удостоверению в учетной записи хранения по умолчанию с помощью командыaz role assignment create. Командаaz storage account showиспользуется для получения идентификатора учетной записи хранения.Используйте следующую команду az functionapp create для создания приложения-функции в Azure:
az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime dotnet-isolated --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime java --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime node --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"В этом примере замените эти заполнители соответствующими значениями:
-
<APP_NAME>: глобально уникальное имя, соответствующее вам.<APP_NAME>также является доменом DNS по умолчанию для приложения-функции. -
<STORAGE_NAME>: имя учетной записи, используемой на предыдущем шаге. -
<REGION>: текущий регион. -
<LANGUAGE_VERSION>: используйте ту же поддерживаемую версию стека языков , проверенную локально.
Эта команда создает функциональное приложение, работающее в указанной языковой среде выполнения на Linux в плане потребления Flex, который является бесплатным для объема использования, который вы создаете здесь. Эта команда также создает связанный экземпляр Azure Application Insights в той же группе ресурсов, с помощью которой можно отслеживать выполнение приложения-функции и просматривать журналы. Дополнительные сведения см. в разделе Мониторинг функций Azure. Этот экземпляр не создает затраты, пока вы не активируете его.
-
Используйте этот скрипт, чтобы добавить ваше пользовательское управляемое удостоверение в роль издателя метрик мониторинга в экземпляре Application Insights.
appInsights=$(az monitor app-insights component show --resource-group "AzureFunctionsQuickstart-rg" \ --app <APP_NAME> --query "id" --output tsv) principalId=$(az identity show --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" \ --query principalId -o tsv) az role assignment create --role "Monitoring Metrics Publisher" --assignee $principalId --scope $appInsightsВ нашем примере замените
<APP_NAME>именем реального приложения-функции. Команда az role assignment create добавляет пользователя в роль. Идентификатор ресурса вашего экземпляра Application Insights и основной идентификатор пользователя получаются с помощью команд az monitor app-insights component show иaz identity show, соответственно.
Обновление параметров приложения
Чтобы разрешить узлу функций подключаться к учетной записи хранения по умолчанию с помощью общих секретов, необходимо заменить настройку строки подключения на несколько параметров с префиксом AzureWebJobsStorage. Эти параметры определяют сложный набор настроек, который ваше приложение использует для подключения к хранилищу и Application Insights с назначенным пользователем управляемым удостоверением.
Используйте этот скрипт, чтобы получить ID клиента для управляемого удостоверения, назначенного пользователем, и используйте его для определения подключений управляемого удостоверения к хранилищу и Application Insights.
clientId=$(az identity show --name func-host-storage-user \ --resource-group AzureFunctionsQuickstart-rg --query 'clientId' -o tsv) az functionapp config appsettings set --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> \ AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId \ APPLICATIONINSIGHTS_AUTHENTICATION_STRING="ClientId=$clientId;Authorization=AAD"В этом скрипте замените
<APP_NAME>на название вашего приложения-функции, а<STORAGE_NAME>на название вашей учетной записи хранения соответственно.Выполните команду az functionapp config appsettings delete , чтобы удалить существующий
AzureWebJobsStorageпараметр строки подключения, содержащий общий секретный ключ:az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorageВ этом примере замените
<APP_NAME>на имя вашего приложения-функции.
На этом этапе хост функций может безопасно подключаться к учетной записи хранения при помощи управляемых удостоверений, а не общих секретов. Теперь вы можете развернуть код проекта в ресурсах Azure.
Развертывание проекта функций в Azure
После успешного создания приложения-функции в Azure теперь можно развернуть проект локальных функций с помощью func azure functionapp publish команды.
В корневой папке проекта выполните следующую func azure functionapp publish команду:
func azure functionapp publish <APP_NAME>
В этом примере следует заменить <APP_NAME> именем приложения. Успешное развертывание показывает результаты, аналогичные следующим выходным данным (усеченным для простоты):
...
Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.
...
Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
HttpExample - [httpTrigger]
Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample
Обновление файла pom.xml
После создания функции в Azure необходимо обновить файл pom.xml, чтобы Maven мог развернуть приложение в новой функции. В противном случае он создает новый набор ресурсов Azure во время развертывания.
В Azure Cloud Shell используйте эту
az functionapp showкоманду, чтобы получить URL-адрес контейнера развертывания и идентификатор нового управляемого удостоверения, назначаемого пользователем:az functionapp show --name <APP_NAME> --resource-group AzureFunctionsQuickstart-rg \ --query "{userAssignedIdentityResourceId: properties.functionAppConfig.deployment.storage.authentication.userAssignedIdentityResourceId, \ containerUrl: properties.functionAppConfig.deployment.storage.value}"В этом примере замените
<APP_NAME>на имя вашего приложения-функции.В корневом каталоге проекта откройте файл pom.xml в текстовом редакторе, найдите
propertiesэлемент и внесите обновления в следующие значения свойств:Название свойства Value java.versionИспользуйте ту же поддерживаемую версию стека языков , проверенную локально, например 17.azure.functions.maven.plugin.version1.37.1azure.functions.java.library.version3.1.0functionAppNameИмя приложения-функции в Azure. configurationНайдите разделazure-functions-maven-pluginи замените его этим фрагментом XML:<configuration> <appName>${functionAppName}</appName> <resourceGroup>AzureFunctionsQuickstart-rg</resourceGroup> <pricingTier>Flex Consumption</pricingTier> <region>....</region> <runtime> <os>linux</os> <javaVersion>${java.version}</javaVersion> </runtime> <deploymentStorageAccount>...</deploymentStorageAccount> <deploymentStorageResourceGroup>AzureFunctionsQuickstart-rg</deploymentStorageResourceGroup> <deploymentStorageContainer>...</deploymentStorageContainer> <storageAuthenticationMethod>UserAssignedIdentity</storageAuthenticationMethod> <userAssignedIdentityResourceId>...</userAssignedIdentityResourceId> <appSettings> <property> <name>FUNCTIONS_EXTENSION_VERSION</name> <value>~4</value> </property> </appSettings> </configuration>В новом элементе
configurationвыполните следующие точные замены значений, представленных многоточиями (...):Configuration Value regionКод региона существующего приложения-функции, например eastus.deploymentStorageAccountИмя учетной записи хранения. deploymentStorageContainerИмя общей папки развертывания, которое следует после \в значенииcontainerUrl, которое вы получили.userAssignedIdentityResourceIdПолный идентификатор ресурса управляемого удостоверения, полученного вами. Сохраните изменения в файле pom.xml .
Теперь вы можете использовать Maven для развертывания проекта кода в существующем приложении.
Развертывание проекта функций в Azure
В командной строке выполните следующую команду:
mvn clean package azure-functions:deployПосле успешного развертывания используйте эту
az functionapp function showфункцию, чтобы получить URL-адрес конечной точки удаленнойHttpExampleфункции:az functionapp function show --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --function-name HttpExample --query invokeUrlTemplate -o tsvВ этом примере замените
<APP_NAME>на имя вашего приложения-функции.Скопируйте URL-адрес возвращаемой конечной точки, который будет использоваться для вызова конечной точки функции.
Вызов функции в Azure
Функция использует триггер HTTP и поддерживает запросы GET, поэтому ее необходимо вызывать через HTTP-запрос к URL-адресу. Проще всего выполнить запрос GET в браузере.
Скопируйте полный URL-адрес вызова Invoke URL, показанный в выходных данных команды публикации, в адресную строку браузера.
Вставьте URL-адрес, скопированный в адресную строку браузера.
URL-адрес конечной точки должен выглядеть примерно так:
https://contoso-app.azurewebsites.net/api/httpexample
При переходе к этому URL-адресу в браузере должны отображаться выходные данные, аналогичные данным при локальном запуске функции.
Очистите ресурсы
Если вы намерены перейти к следующему шагу и добавить выходную привязку очереди службы хранилища Azure, сохраните все ваши ресурсы в неизменном виде, так как вам предстоит работать с уже выполненными действиями.
В противном случае используйте следующую команду, чтобы удалить группу ресурсов и все содержащиеся в ней ресурсы и избежать дополнительных расходов.
az group delete --name AzureFunctionsQuickstart-rg