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


Краткое руководство. Создание и развертывание функций для Функции Azure с помощью Интерфейса командной строки разработчика Azure

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

Источник проекта использует интерфейс командной строки разработчика Azure (azd), чтобы упростить развертывание кода в Azure. Это развертывание следует текущим рекомендациям по безопасным и масштабируемым Функции Azure развертываниям.

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

Необходимые компоненты

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

Инициализация проекта

С помощью azd init команды можно создать локальный проект кода Функции Azure из шаблона.

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

    azd init --template functions-quickstart-dotnet-azd -e flexquickstart-dotnet
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке. Флаг -e задает имя текущей среды. В azdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.

  2. Выполните следующую команду, чтобы перейти к папке http приложения:

    cd http
    
  3. Создайте файл с именем local.settings.json в папке http , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
        }
    }
    

    Этот файл требуется при локальном запуске.

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

    azd init --template azure-functions-java-flex-consumption-azd -e flexquickstart-java 
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке. Флаг -e задает имя текущей среды. В azdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.

  2. Выполните следующую команду, чтобы перейти к папке http приложения:

    cd http
    
  3. Создайте файл с именем local.settings.json в папке http , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java"
        }
    }
    

    Этот файл требуется при локальном запуске.

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

    azd init --template functions-quickstart-javascript-azd -e flexquickstart-js
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в корневой папке. Флаг -e задает имя текущей среды. В azdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.

  2. Создайте файл с именем local.settings.json в корневой папке, содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    Этот файл требуется при локальном запуске.

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

    azd init --template functions-quickstart-powershell-azd -e flexquickstart-ps
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в корневой папке. Флаг -e задает имя текущей среды. В azdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.

  2. Выполните следующую команду, чтобы перейти к папке src приложения:

    cd src
    
  3. Создайте файл с именем local.settings.json в папке src , содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2"
        }
    }
    

    Этот файл требуется при локальном запуске.

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

    azd init --template functions-quickstart-typescript-azd -e flexquickstart-ts
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в корневой папке. Флаг -e задает имя текущей среды. В azdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.

  2. Создайте файл с именем local.settings.json в корневой папке, содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    Этот файл требуется при локальном запуске.

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

    azd init --template functions-quickstart-python-http-azd -e flexquickstart-py
    

    Эта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в корневой папке. Флаг -e задает имя текущей среды. В azdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.

  2. Создайте файл с именем local.settings.json в корневой папке, содержащей эти данные JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python"
        }
    }
    

    Этот файл требуется при локальном запуске.

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

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

python3 -m venv .venv
source .venv/bin/activate

Если пакет venv не установлен Python для вашего дистрибутива Linux, выполните следующую команду:

sudo apt-get install python3-venv

Запуск в локальной среде

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

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

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

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

    http://localhost:7071/api/httpget

  3. В новом окне терминала или командной строки выполните следующую curl команду, чтобы отправить запрос POST с полезными данными JSON в httppost конечную точку:

    curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.json
    
    curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"
    

    Эта команда считывает полезные данные JSON из testdata.json файла проекта. Примеры обоих HTTP-запросов можно найти в test.http файле проекта.

  4. По завершении нажмите клавиши CTRL+C в окне терминала, чтобы остановить func.exe процесс узла.

  1. Выполните команду deactivate , чтобы завершить работу виртуальной среды.

Просмотр кода (необязательно)

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

       [Function("httpget")]
       public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
         HttpRequest req,
         string name)
       {
           var returnValue = string.IsNullOrEmpty(name)
               ? "Hello, World."
               : $"Hello, {name}.";

           _logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");

           return new OkObjectResult(returnValue);
       }
@FunctionName("httpget")
public HttpResponseMessage run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.GET},
            authLevel = AuthorizationLevel.FUNCTION)
            HttpRequestMessage<Optional<String>> request,
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");

    return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');

app.http('httpget', {
    methods: ['GET'],
    authLevel: 'function',
    handler: async (request, context) => {
        context.log(`Http function processed request for url "${request.url}"`);

        const name = request.query.get('name') || await request.text() || 'world';

        return { body: `Hello, ${name}!` };
    }
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";

export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || await request.text() || 'world';

    return { body: `Hello, ${name}!` };
};

app.http('httpget', {
    methods: ['GET'],
    authLevel: 'function',
    handler: httpGetFunction
});

Этот function.json файл определяет функцию httpget :

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get"
      ],
      "route": "httpget"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}

Этот run.ps1 файл реализует код функции:

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters
$name = $Request.Query.name

$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
    name = req.params.get("name", "World")

    logging.info(f"Processing GET request. Name: {name}")

    return func.HttpResponse(f"Hello, {name}!")

Вы можете просмотреть полный проект шаблона здесь.

Вы можете просмотреть полный проект шаблона здесь.

Вы можете просмотреть полный проект шаблона здесь.

Вы можете просмотреть полный проект шаблона здесь.

Вы можете просмотреть полный проект шаблона здесь.

Вы можете просмотреть полный проект шаблона здесь.

После локальной проверки функций пора опубликовать их в Azure.

Создание ресурсов Azure

Этот проект настроен для azd provision создания приложения-функции в плане потребления Flex, а также других необходимых ресурсов Azure.

Примечание.

Этот проект включает набор файлов Bicep, используемых azd для создания безопасного развертывания в плане потребления Flex, который следует рекомендациям.

Команды azd up и azd deploy команды в настоящее время не поддерживаются для приложений Java.

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

    azd provision
    

    Корневая папка содержит файл определения, необходимый azure.yaml azd.

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

  2. При появлении запроса укажите следующие необходимые параметры развертывания:

    Параметр Описание
    Подписка Azure Подписка, в которой создаются ресурсы.
    Расположение Azure Регион Azure, в котором создается группа ресурсов, содержащая новые ресурсы Azure. Отображаются только регионы, поддерживающие план потребления Flex.

    Команда azd provision использует ответ на эти запросы с файлами конфигурации Bicep для создания и настройки этих необходимых ресурсов Azure:

    • План потребления и приложение-функция Flex
    • служба хранилища Azure (обязательно) и Application Insights (рекомендуется)
    • Политики и роли доступа для учетной записи
    • Подключения между службами с помощью управляемых удостоверений (вместо хранимых строка подключения)
    • Виртуальная сеть для безопасного запуска приложения-функции и других ресурсов Azure

    После успешного завершения команды можно развернуть код проекта в этом новом приложении-функции в Azure.

Развернуть в Azure

Вы можете использовать основные средства для упаковки кода и развертывания его в Azure из выходной target папки.

  1. Перейдите к папке приложения, эквивалентной в выходной папке target :

    cd http/target/azure-functions/contoso-functions
    

    Эта папка должна иметь файл host.json, указывающий, что это корневой каталог скомпилированного приложения-функции Java.

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

    APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp publish $APP_NAME
    

    Команда azd env get-value получает имя приложения-функции из локальной среды, которая требуется для развертывания.func azure functionapp publish После успешной публикации вы увидите ссылки на конечные точки триггера HTTP в Azure.

Развернуть в Azure

Этот проект настроен для azd up развертывания этого проекта в новом приложении-функции в плане потребления Flex в Azure.

Совет

Этот проект включает набор файлов Bicep, используемых azd для создания безопасного развертывания в плане потребления Flex, который следует рекомендациям.

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

    azd up
    

    Корневая папка содержит файл определения, необходимый azure.yaml azd.

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

  2. При появлении запроса укажите следующие необходимые параметры развертывания:

    Параметр Описание
    Подписка Azure Подписка, в которой создаются ресурсы.
    Расположение Azure Регион Azure, в котором создается группа ресурсов, содержащая новые ресурсы Azure. Отображаются только регионы, поддерживающие план потребления Flex.

    Команда azd up использует ответ на эти запросы с файлами конфигурации Bicep для выполнения следующих задач развертывания:

    • Создайте и настройте эти необходимые ресурсы Azure (эквивалентно azd provision):

      • План потребления и приложение-функция Flex
      • служба хранилища Azure (обязательно) и Application Insights (рекомендуется)
      • Политики и роли доступа для учетной записи
      • Подключения между службами с помощью управляемых удостоверений (вместо хранимых строка подключения)
      • Виртуальная сеть для безопасного запуска приложения-функции и других ресурсов Azure
    • Упаковайте и разверните код в контейнере развертывания (эквивалентно azd deploy). Затем приложение запускается и запускается в развернутом пакете.

    После успешного завершения команды вы увидите ссылки на созданные ресурсы.

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

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

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

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

    SET APP_NAME=(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp list-functions $APP_NAME --show-keys
    
    $APP_NAME = azd env get-value AZURE_FUNCTION_NAME
    func azure functionapp list-functions $APP_NAME --show-keys
    

    Команда azd env get-value получает имя приложения-функции из локальной среды. --show-keys Использование параметра с func azure functionapp list-functions помощью этого параметра означает, что возвращаемый URL-адрес вызова: значение для каждой конечной точки включает ключ доступа на уровне функции.

  2. Как и раньше, используйте средство тестирования HTTP для проверки этих URL-адресов в приложении-функции, работающем в Azure.

Повторное развертывание кода

Вы можете выполнять azd up команду столько раз, сколько необходимо подготовить ресурсы Azure и развернуть обновления кода в приложении-функции.

Примечание.

Развернутые файлы кода всегда перезаписываются последним пакетом развертывания.

Исходные ответы на azd запросы и любые переменные среды, созданные с помощью azd , хранятся локально в именованной среде. azd env get-values Используйте команду, чтобы просмотреть все переменные в вашей среде, которые использовались при создании ресурсов Azure.

Очистка ресурсов

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

azd down --no-prompt

Примечание.

Параметр --no-prompt указывает azd удалить группу ресурсов без подтверждения.

Эта команда не влияет на локальный проект кода.