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

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

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

Выберите предпочитаемый язык разработки в верхней части статьи.

Important

Поддержка Go для Функции Azure сейчас находится на этапе общедоступной предварительной версии. Во время предварительной версии приложения-функции Go поддерживаются только в плане потребления Flex.

Prerequisites

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

  • Функции Azure Core Tools версии 4.12 или более поздней версии. Выполните команду func --version, чтобы проверить установленную версию.

  • Azure CLI версии 2.87.0 или более поздней. Выполните команду az version, чтобы проверить установленную версию.

  • Цепочка инструментов Rust с использованием rustup. Используйте команду rustc --version, чтобы проверить установленную версию.

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

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

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

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

Если вы ранее использовали установщик Windows (MSI) для установки основных инструментов в Windows, перед установкой последней версии удалите старую версию из команды "Добавить программы".

Подсказка

Чтобы установить основные средства в подсистеме Windows для Linux (WSL), следуйте инструкциям на вкладке Linux.

Создание и активация виртуальной среды

В подходящей папке выполните следующие команды, чтобы создать и активировать виртуальную среду с именем .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 Выполните команду, чтобы создать проект функций Go:

    func init MyGoFunctionApp --worker-runtime go
    

    Эта команда создает папку проекта с именем MyGoFunctionApp , включающую следующие файлы:

    File Description
    host.json Конфигурация хоста для приложения-функции.
    local.settings.json Параметры, используемые при локальном запуске.
    main.go Точка входа с примером функции, активируемой по HTTP.
    go.mod Файл модуля Go для управления зависимостями.
    go.sum Файл контрольной суммы модуля Go.
  2. Перейдите в папку проекта:

    cd MyGoFunctionApp
    
  3. Откройте main.go для просмотра созданного кода. Он содержит пример функции, активаемой HTTP:

    package main
    
    import (
        "log"
        "net/http"
    
        "github.com/azure/azure-functions-golang-worker/sdk"
        "github.com/azure/azure-functions-golang-worker/worker"
    )
    
    // HTTPTriggerHandler handles standard HTTP requests
    func HTTPTriggerHandler(w http.ResponseWriter, r *http.Request) {
        log.Printf("Processing HTTP Trigger for %s", r.URL.Path)
        w.WriteHeader(http.StatusOK)
        w.Write([]byte("Hello from Go Worker!"))
    }
    
    func main() {
        app := sdk.FunctionApp()
        app.HTTP("hello", HTTPTriggerHandler,
            sdk.WithMethods("GET", "POST"),
            sdk.WithAuth("anonymous"),
        )
        worker.Start(app)
    }
    

    Функции Go используют стандартные net/http типы (http.ResponseWriter и *http.Request) для триггеров HTTP. Функции регистрируются в main() с помощью Go Worker SDK и функциональных опций, и файлы function.json не требуются.

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

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

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

    Important

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

    Prompt Value Description
    groupId com.fabrikam Это значение уникально идентифицирует проект среди всех остальных. Оно должно соответствовать правилам именования пакетов для Java.
    artifactId fabrikam-functions Это значение содержит имя JAR-файла, без номера версии.
    version 1.0-SNAPSHOT Выберите значение по умолчанию.
    package com.fabrikam Значение, представляющее собой пакет Java для сгенерированного кода функции. Используйте значения по умолчанию.
  3. Введите Y или нажмите Enter, чтобы подтвердить.

    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 "function"
    

    Новый файл кода добавляется в проект. В этом случае --name аргумент — это уникальное имя функции (HttpExample), а --template аргумент указывает триггер HTTP.

Корневая папка проекта содержит различные файлы для проекта, включая файлы конфигураций с именем local.settings.json и host.json. Файл local.settings.json может содержать секреты, скачанные из Azure, поэтому файл по умолчанию исключен из системы управления версиями в GITIGNORE-файле.

Создание и сборка функции

Файл function.json в папке HttpExample объявляет функцию для триггера HTTP. Чтобы реализовать эту функцию, вам нужно добавить к ней обработчик и скомпилировать исполняемый файл.

  1. Нажмите клавиши CTRL+SHIFT+' или выберите команду New Terminal (Создать терминал) в меню Terminal (Терминал), чтобы открыть новый встроенный терминал VS Code.

  2. В корневой папке приложения-функции (где размещен файл host.json) инициализируйте проект Rust с именем handler.

    cargo init --name handler
    
  3. В файл Cargo.toml добавьте следующие зависимости, требуемые для работы с этим кратким руководством. В нашем примере используется платформа веб-сервера warp.

    [dependencies]
    warp = "0.3"
    tokio = { version = "1", features = ["rt", "macros", "rt-multi-thread"] }
    
  4. Добавьте в файл src/main.rs следующий код и сохраните его. Это и есть ваш пользовательский обработчик Rust.

    use std::collections::HashMap;
    use std::env;
    use std::net::Ipv4Addr;
    use warp::{http::Response, Filter};
    
    #[tokio::main]
    async fn main() {
        let example1 = warp::get()
            .and(warp::path("api"))
            .and(warp::path("HttpExample"))
            .and(warp::query::<HashMap<String, String>>())
            .map(|p: HashMap<String, String>| match p.get("name") {
                Some(name) => Response::builder().body(format!("Hello, {}. This HTTP triggered function executed successfully.", name)),
                None => Response::builder().body(String::from("This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.")),
            });
    
        let port_key = "FUNCTIONS_CUSTOMHANDLER_PORT";
        let port: u16 = match env::var(port_key) {
            Ok(val) => val.parse().expect("Custom Handler port is not a number!"),
            Err(_) => 3000,
        };
    
        warp::serve(example1).run((Ipv4Addr::LOCALHOST, port)).await
    }
    
  5. Скомпилируйте двоичный файл для этого обработчика. Исполняемый файл с именем handler (handler.exe в Windows) выводится в корневую папку приложения-функции.

    cargo build --release
    cp target/release/handler .
    

Настройте приложение-функцию

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

  1. Откройте файл host.json.

  2. В разделе customHandler.description задайте значение defaultExecutablePath для параметра handler (или handler.exe в среде Windows).

  3. В разделе customHandler добавьте свойство с именем enableForwardingHttpRequest и задайте для него значение true. Для функций, состоящих только из HTTP-триггера, этот параметр упрощает разработку, позволяя работать с обычным HTTP-запросом вместо тела запроса, передаваемого настраиваемому обработчику.

  4. Убедитесь, что раздел customHandler похож на представленный здесь пример. Сохраните файл.

    "customHandler": {
      "description": {
        "defaultExecutablePath": "handler",
        "workingDirectory": "",
        "arguments": []
      },
      "enableForwardingHttpRequest": true
    }
    

Приложение-функция настроено на запуск исполняемого файла пользовательского обработчика.

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

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

  1. Используйте эту команду, чтобы запустить локальный узел среды выполнения Функций Azure в корневой папке проекта:

    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
     ...
    
     

    В конце выходных данных отображается конечная точка HTTP для функции:

     Functions:
    
             hello: [GET,POST] http://localhost:7071/api/hello
     
  2. Вызовите конечную точку функции, чтобы убедиться, что она работает:

    Скопируйте URL-адрес вашей функции из этих данных HttpExample, вставьте в браузер и перейдите по URL-адресу функции. Вы должны получить успешный ответ с сообщением «hello world».

    Note

    Так как авторизация ключа доступа не применяется при локальном запуске, url-адрес функции, возвращенный не включает значение ключа доступа, и вам не нужно вызывать функцию.

    При локальной работе функции откройте браузер и перейдите по следующему URL-адресу:

    http://localhost:7071/api/hello
    

    Вы должны увидеть следующий ответ:

    Hello from Go Worker!
    
  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"
    
    az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \
    --runtime other --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 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 несколькими параметрами, которые имеют префикс 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, необходимо создать группу ресурсов, учетную запись хранения и приложение-функцию. Используйте команды Azure CLI, описанные в этих шагах, чтобы создать необходимые ресурсы.

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

    az login
    

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

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

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

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

  3. az storage account create Используйте команду, чтобы создать учетную запись хранения общего назначения в группе ресурсов и регионе:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    В этом примере замените <STORAGE_NAME> глобально уникальным именем. Имена должны содержать три до 24 символов и только строчные буквы и цифры.

  4. Создайте приложение-функцию в Azure:

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime go --runtime-version 1.0 --functions-version 4
    

    Замените <APP_NAME> глобально уникальным именем и <STORAGE_NAME> именем учетной записи, используемой на предыдущем шаге. Эта команда также создает связанный экземпляр приложение Azure Insights в той же группе ресурсов, с помощью которой можно отслеживать приложение-функцию и просматривать журналы. Дополнительные сведения см. в разделе Мониторинг функций Azure.

  5. Отключите HTTP/2 в приложении-функции, которое требуется во время общедоступной предварительной версии Go:

    az resource update --resource-group AzureFunctionsQuickstart-rg --resource-type Microsoft.Web/sites --name <APP_NAME> --set properties.siteConfig.http20Enabled=false
    

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

После успешного создания приложения-функции в Azure теперь можно развернуть проект локальных функций с помощью func azure functionapp publish команды.

  1. В корневой папке проекта выполните следующую 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
     
  2. В локальном терминале или командной строке выполните следующую команду, чтобы получить значение конечной точки URL-адреса, включая ключ доступа:

    func azure functionapp list-functions <APP_NAME> --show-keys
    

    В этом примере снова замените <APP_NAME> на имя вашего приложения.

  3. Скопируйте возвращаемый URL-адрес конечной точки и ключ, который используется для вызова конечной точки функции.

Обновление файла pom.xml

После успешного создания приложения-функции в Azure обновите файл pom.xml, чтобы Maven смог развернуть ваше новое приложение. В противном случае 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 элемент и обновите следующие значения свойств:

    Название свойства Value
    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 выполните следующие точные замены значений, представленных многоточиями (...):

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

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

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

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

    mvn clean package azure-functions:deploy
    
  2. После успешного развертывания выполните следующую команду Core Tools, чтобы получить значение конечной точки URL-адреса, включая ключ доступа:

    func azure functionapp list-functions <APP_NAME> --show-keys
    

    В этом примере снова замените <APP_NAME> на имя вашего приложения.

  3. Скопируйте возвращаемый URL-адрес конечной точки и ключ, который используется для вызова конечной точки функции.

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

После успешного создания приложения-функции в Azure вы можете развернуть проект локальных функций. Используйте команду func azure functionapp publish для развертывания проекта в Azure:

func azure functionapp publish <APP_NAME>

Замените <APP_NAME> на имя приложения-функции.

Вызов функции в Azure

Так как функция использует триггер HTTP и поддерживает запросы GET, вы вызываете его, выполняя HTTP-запрос к URL-адресу с помощью ключа доступа на уровне функции. Проще всего выполнить запрос GET в браузере.

Вставьте URL-адрес и ключ доступа, скопированный в адресную строку браузера.

URL-адрес конечной точки должен выглядеть примерно так:

https://contoso-app.azurewebsites.net/api/httpexample?code=aabbccdd...

В этом случае необходимо также указать ключ доступа в строке запроса при выполнении запроса GET к URL-адресу конечной точки. Рекомендуется использовать ключ доступа, чтобы ограничить доступ для случайных клиентов. При выполнении запроса POST с помощью HTTP-клиента вместо этого следует указать ключ доступа в заголовке x-functions-key .

При переходе к этому URL-адресу в браузере должны отображаться выходные данные, аналогичные данным при локальном запуске функции.

Вызов функции в Azure

После завершения развертывания откройте следующий URL-адрес в браузере, чтобы убедиться, что функция выполняется в Azure:

https://<APP_NAME>.azurewebsites.net/api/hello

Вы должны увидеть тот же Hello from Go Worker! ответ, что и при локальном запуске функции.

Очистите ресурсы

Если вы намерены перейти к следующему шагу и добавить выходную привязку очереди службы хранилища Azure, сохраните все ваши ресурсы в неизменном виде, так как вам предстоит работать с уже выполненными действиями.

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

az group delete --name AzureFunctionsQuickstart-rg

Очистите ресурсы

Если вы переходите к следующему шагу, оставьте все ресурсы на месте, опираясь на то, что вы уже создали.

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

az group delete --name AzureFunctionsQuickstart-rg

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

Дополнительные сведения о разработке функций Go см. в следующих ресурсах: