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


Быстрый старт: Создание функции в Azure с помощью командной строки

В этой статье вы используете локальные средства командной строки для создания функции, которая отвечает на HTTP-запросы. После того как вы проверите код локально, вы развернете его в Azure Functions на бессерверном плане размещения Flex Consumption.

Завершение этого быстрого старта влечет за собой небольшие расходы в несколько центов США или меньше в вашей учетной записи Azure.

Предпосылки

  • Пакет разработчиков Java 17
    • Если вы используете другую поддерживаемую версию Java, необходимо обновить файл pom.xml проекта.
    • Переменная JAVA_HOME среды должна быть задана в расположении установки правильной версии пакета средств разработки Java (JDK).
  • Apache Maven 3.8.x

Установка основных инструментов Функций Azure

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

Следующая процедура устанавливает Core Tools версии v4.x с помощью установщика Windows (MSI). Дополнительные сведения о других установщиках на основе пакетов, см. в файле readme для Core Tools.

Скачайте и запустите установщик Core Tools для используемой версии Windows:

Если вы ранее использовали установщик 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. В этом разделе вы создадите проект кода, содержащий одну функцию.

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

    func init --worker-runtime dotnet-isolated 
    
  1. В терминале или командной строке выполните следующую func init команду, чтобы создать проект приложения-функции в текущей папке:

    func init --worker-runtime node --language javascript 
    
  1. В терминале или командной строке выполните следующую func init команду, чтобы создать проект приложения-функции в текущей папке:

    func init --worker-runtime powershell 
    
  1. В терминале или командной строке выполните следующую func init команду, чтобы создать проект приложения-функции в текущей папке:

    func init --worker-runtime python 
    
  1. В терминале или командной строке выполните следующую func init команду, чтобы создать проект приложения-функции в текущей папке:

    func init --worker-runtime node --language typescript 
    
  1. В пустой папке выполните следующую mvn команду, чтобы создать проект кода из архетипа Функций Azure Maven:

    mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17
    

    Это важно

    • Используйте -DjavaVersion=11, чтобы функции выполнялись на Java 11. Дополнительные сведения см. в версиях Java.
    • Чтобы выполнить задания из этой статьи, переменной среды JAVA_HOME необходимо присвоить расположение установки правильной версии JDK.
  2. Maven запрашивает значения, которые позволят завершить создание проекта развертывания.
    При появлении запроса укажите следующие значения:

    Подсказка Ценность Описание
    groupId com.fabrikam Это значение уникально идентифицирует проект среди всех остальных. Оно должно соответствовать правилам именования пакетов для Java.
    artifactId fabrikam-functions Это значение содержит имя JAR-файла, без номера версии.
    версия 1.0-SNAPSHOT Выберите значение по умолчанию.
    пакета com.fabrikam Это значение определяет пакет Java для создаваемого кода функции. Используйте значения по умолчанию.
  3. Введите Y или нажмите клавишу ВВОД для подтверждения.

    Maven создает файлы проекта в новой папке с именем artifactId, который в этом примере является fabrikam-functions.

  4. Перейдите в папку проекта:

    cd fabrikam-functions
    

    Вы можете просмотреть созданный шаблоном код для новой функции триггера HTTP в Function.java в каталоге проекта \src\main\java\com\fabrikam .

  1. Используйте эту 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-файле.

Локальное выполнение функции

Проверьте новую функцию, запустив проект локально и вызвав конечную точку функции.

  1. Используйте эту команду, чтобы запустить локальный узел среды выполнения Функций 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, перейдите в корневую папку проекта и снова выполните указанную выше команду.

  2. Скопируйте URL-адрес вашей функции из этого вывода в браузер. Перейдите по URL-адресу функции, и вы должны получить успешный ответ с сообщением "hello world".

  3. Когда закончите, нажмите клавиши Ctrl+C и выберите y, чтобы остановить хост функций.

Создание вспомогательных ресурсов Azure для функции

Прежде чем развернуть код функции в Azure, необходимо создать следующие ресурсы:

  • группу ресурсов — логический контейнер связанных ресурсов;
  • Учетная запись хранения по умолчанию, которая используется узлом функций для поддержания состояния и других сведений о функциях.
  • Управляемое удостоверение, назначенное пользователем, которое хост функций использует для подключения к учетной записи хранения по умолчанию.
  • Приложение-функция, которое предоставляет окружение для выполнения кода вашей функции. Приложение функций соответствует вашему локальному проекту функций и позволяет группировать функции в логические единицы для более простого управления, развертывания и совместного использования ресурсов.

Используйте команды Azure CLI, описанные в этих шагах, чтобы создать необходимые ресурсы.

  1. Войдите в Azure, если вы еще этого не сделали:

    az login
    

    Команда az login входит в вашу учетную запись Azure. Пропустите этот шаг при запуске в Azure Cloud Shell.

  2. Если вы еще этого не сделали, используйте эту az extension add команду для установки расширения Application Insights:

    az extension add --name application-insights
    
  3. Используйте команду az group create , чтобы создать группу ресурсов с именем AzureFunctionsQuickstart-rg в выбранном регионе:

    az group create --name "AzureFunctionsQuickstart-rg" --location "<REGION>"
    

    В этом примере замените <REGION> на регион рядом с вами, который поддерживает план потребления Flex. Используйте команду az functionapp list-flexconsumption-locations , чтобы просмотреть список поддерживаемых в настоящее время регионов.

  4. Используйте команду 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, которым предоставлены разрешения для определенных ресурсов.

  5. Используйте этот скрипт для создания управляемого удостоверения, назначаемого пользователем, анализа возвращаемых свойств 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 используется для получения идентификатора учетной записи хранения.

  6. Используйте следующую команду 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. Этот экземпляр не создает затраты, пока вы не активируете его.

  7. Используйте этот скрипт, чтобы добавить ваше пользовательское управляемое удостоверение в роль издателя метрик мониторинга в экземпляре 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 с назначенным пользователем управляемым удостоверением.

  1. Используйте этот скрипт, чтобы получить 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> на название вашей учетной записи хранения соответственно.

  2. Выполните команду 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 во время развертывания.

  1. В 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> именами вашего приложения-функции.

  2. В корневом каталоге проекта откройте файл pom.xml в текстовом редакторе, найдите properties элемент и внесите обновления в следующие значения свойств:

    Название свойства Ценность
    java.version Используйте ту же поддерживаемую версию стека языков , проверенную локально, например 17.
    azure.functions.maven.plugin.version 1.37.1
    azure.functions.java.library.version 3.1.0
    functionAppName Имя приложения-функции в Azure.
  3. 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>
    
  4. В новом элементе configuration выполните следующие точные замены значений, представленных многоточиями (...):

    Конфигурация Ценность
    region Код региона существующего приложения-функции, например eastus.
    deploymentStorageAccount Имя учетной записи хранения.
    deploymentStorageContainer Имя общей папки развертывания, которое следует после \ в значении containerUrl, которое вы получили.
    userAssignedIdentityResourceId Полный идентификатор ресурса управляемого удостоверения, полученного вами.
  5. Сохраните изменения в файле pom.xml .

Теперь вы можете использовать Maven для развертывания проекта кода в существующем приложении.

Развертывание проекта функций в Azure

  1. В командной строке выполните следующую команду:

    mvn clean package azure-functions:deploy
    
  2. После успешного развертывания используйте эту 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> на имя вашего функционального приложения.

  3. Скопируйте 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

Дальнейшие шаги