Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы используете локальные средства командной строки для создания функции, которая отвечает на HTTP-запросы. После того как вы проверите код локально, вы развернете его в Azure Functions на бессерверном плане размещения Flex Consumption.
Завершение этого быстрого старта влечет за собой небольшие расходы в несколько центов США или меньше в вашей учетной записи Azure.
Предпосылки
- Учетная запись 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=17
Это важно
- Используйте
-DjavaVersion=11
, чтобы функции выполнялись на Java 11. Дополнительные сведения см. в версиях Java. - Чтобы выполнить задания из этой статьи, переменной среды
JAVA_HOME
необходимо присвоить расположение установки правильной версии JDK.
- Используйте
Maven запрашивает значения, которые позволят завершить создание проекта развертывания.
При появлении запроса укажите следующие значения:Подсказка Ценность Описание groupId com.fabrikam
Это значение уникально идентифицирует проект среди всех остальных. Оно должно соответствовать правилам именования пакетов для Java. artifactId fabrikam-functions
Это значение содержит имя JAR-файла, без номера версии. версия 1.0-SNAPSHOT
Выберите значение по умолчанию. пакета 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 start
func start
npm install npm start
mvn 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 ...
Замечание
Если конечная точка 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
элемент и внесите обновления в следующие значения свойств:Название свойства Ценность java.version
Используйте ту же поддерживаемую версию стека языков , проверенную локально, например 17
.azure.functions.maven.plugin.version
1.37.1
azure.functions.java.library.version
3.1.0
functionAppName
Имя приложения-функции в 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
выполните следующие точные замены значений, представленных многоточиями (...
):Конфигурация Ценность 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