Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве вы используете средства командной строки разработчика Azure для создания масштабируемого веб-API с конечными точками функций, которые отвечают на HTTP-запросы. После локального тестирования кода вы развернете его в новом бессерверном приложении-функции, которое вы создаете в плане потребления Flex в Функции Azure.
Источник проекта использует интерфейс командной строки разработчика Azure (azd), чтобы упростить развертывание кода в Azure. Это развертывание следует текущим рекомендациям по безопасным и масштабируемым Функции Azure развертываниям.
По умолчанию план потребления Flex следует модели выставления счетов с оплатой за то, что вы используете , а это означает, что для выполнения этого краткого руководства взимается небольшая стоимость нескольких центов в долларах США или меньше в вашей учетной записи Azure.
Prerequisites
Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
-
Пакет разработчиков Java 17
- Если вы используете другую поддерживаемую версию Java, необходимо обновить файл pom.xml проекта.
- Переменная
JAVA_HOMEсреды должна быть задана в расположении установки правильной версии пакета средств разработки Java (JDK).
- Apache Maven 3.8.x
- Безопасное средство тестирования HTTP для отправки запросов с полезными данными JSON в конечные точки функции. Для этой статьи используется
curl.
Инициализация проекта
С помощью azd init команды можно создать локальный проект кода Функции Azure из шаблона.
В локальном терминале или командной строке выполните следующую
azd initкоманду в пустой папке:azd init --template functions-quickstart-dotnet-azd -e httpendpoint-dotnetЭта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке. Флаг
-eзадает имя текущей среды. Вazdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.Выполните следующую команду, чтобы перейти к папке
httpприложения:cd httpСоздайте файл с именемlocal.settings.json в папке
http, содержащей эти данные JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }Этот файл требуется при локальном запуске.
В локальном терминале или командной строке выполните следующую
azd initкоманду в пустой папке:azd init --template azure-functions-java-flex-consumption-azd -e httpendpoint-javaЭта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в текущей папке. Флаг
-eзадает имя текущей среды. Вazdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.Выполните следующую команду, чтобы перейти к папке
httpприложения:cd httpСоздайте файл с именемlocal.settings.json в папке
http, содержащей эти данные JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }Этот файл требуется при локальном запуске.
В локальном терминале или командной строке выполните следующую
azd initкоманду в пустой папке:azd init --template functions-quickstart-javascript-azd -e httpendpoint-jsЭта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в корневой папке. Флаг
-eзадает имя текущей среды. Вazdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.Создайте файл с именемlocal.settings.json в корневой папке, содержащей эти данные JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Этот файл требуется при локальном запуске.
В локальном терминале или командной строке выполните следующую
azd initкоманду в пустой папке:azd init --template functions-quickstart-powershell-azd -e httpendpoint-psЭта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в корневой папке. Флаг
-eзадает имя текущей среды. Вazdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.Выполните следующую команду, чтобы перейти к папке
srcприложения:cd srcСоздайте файл с именемlocal.settings.json в папке
src, содержащей эти данные JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2" } }Этот файл требуется при локальном запуске.
В локальном терминале или командной строке выполните следующую
azd initкоманду в пустой папке:azd init --template functions-quickstart-typescript-azd -e httpendpoint-tsЭта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в корневой папке. Флаг
-eзадает имя текущей среды. Вazdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.Создайте файл с именемlocal.settings.json в корневой папке, содержащей эти данные JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Этот файл требуется при локальном запуске.
В локальном терминале или командной строке выполните следующую
azd initкоманду в пустой папке:azd init --template functions-quickstart-python-http-azd -e httpendpoint-pyЭта команда извлекает файлы проекта из репозитория шаблонов и инициализирует проект в корневой папке. Флаг
-eзадает имя текущей среды. Вazdсреде используется для поддержания уникального контекста развертывания для приложения, и вы можете определить несколько. Он также используется в имени группы ресурсов, создаваемой в Azure.Создайте файл с именем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
Запуск в локальной среде
Выполните следующую команду из папки приложения в терминале или командной строке:
func startmvn clean package mvn azure-functions:runnpm install func startnpm install npm startКогда узел функций запускается в локальной папке проекта, он записывает конечные точки URL-адреса активируемых функций HTTP в выходные данные терминала.
В браузере перейдите к конечной точке
httpget, которая должна выглядеть следующим образом:В новом окне терминала или командной строки выполните следующую
curlкоманду, чтобы отправить запрос POST с полезными данными JSON вhttppostконечную точку:curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.jsoncurl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"Эта команда считывает полезные данные JSON из
testdata.jsonфайла проекта. Примеры обоих HTTP-запросов можно найти вtest.httpфайле проекта.По завершении нажмите клавиши CTRL+C в окне терминала, чтобы остановить
func.exeпроцесс узла.
- Выполните команду
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.
Note
Этот проект включает набор файлов Bicep, используемых azd для создания безопасного развертывания в плане потребления Flex, который следует рекомендациям.
Команды azd up и azd deploy команды в настоящее время не поддерживаются для приложений Java.
В корневой папке проекта выполните следующую команду, чтобы создать необходимые ресурсы Azure:
azd provisionКорневая папка содержит файл определения, необходимый
azure.yamlazd.Если вы еще не вошли в систему, вам будет предложено выполнить проверку подлинности с помощью учетной записи Azure.
При появлении запроса укажите следующие необходимые параметры развертывания:
Parameter Description Подписка Azure Подписка, в которой создаются ресурсы. Расположение Azure Регион Azure, в котором создается группа ресурсов, содержащая новые ресурсы Azure. Отображаются только регионы, поддерживающие план потребления Flex. Команда
azd provisionиспользует ответ на эти запросы с файлами конфигурации Bicep для создания и настройки этих необходимых ресурсов Azure:- План потребления и приложение-функция Flex
- служба хранилища Azure (обязательно) и Application Insights (рекомендуется)
- Политики и роли доступа для учетной записи
- Подключения между службами с помощью управляемых удостоверений (вместо хранимых строка подключения)
- Виртуальная сеть для безопасного запуска приложения-функции и других ресурсов Azure
После успешного завершения команды можно развернуть код проекта в этом новом приложении-функции в Azure.
Развернуть в Azure
Вы можете использовать основные средства для упаковки кода и развертывания его в Azure из выходной target папки.
Перейдите к папке приложения, эквивалентной в выходной папке
target:cd http/target/azure-functions/contoso-functionsЭта папка должна иметь файл host.json, указывающий, что это корневой каталог скомпилированного приложения-функции Java.
Выполните следующие команды, чтобы развернуть скомпилированный проект кода Java в новом ресурсе приложения-функции в Azure с помощью основных средств:
Команда
azd env get-valueполучает имя приложения-функции из локальной среды, которая требуется для развертывания.func azure functionapp publishПосле успешной публикации вы увидите ссылки на конечные точки триггера HTTP в Azure.
Развернуть в Azure
Этот проект настроен для azd up развертывания этого проекта в новом приложении-функции в плане потребления Flex в Azure.
Tip
Этот проект включает набор файлов Bicep, используемых azd для создания безопасного развертывания в плане потребления Flex, который следует рекомендациям.
Выполните следующую команду, чтобы
azdсоздать необходимые ресурсы Azure в Azure и развернуть проект кода в новом приложении-функции:azd upКорневая папка содержит файл определения, необходимый
azure.yamlazd.Если вы еще не вошли в систему, вам будет предложено выполнить проверку подлинности с помощью учетной записи Azure.
При появлении запроса укажите следующие необходимые параметры развертывания:
Parameter Description Подписка 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.
В локальном терминале или командной строке выполните следующие команды, чтобы получить значения конечной точки URL-адреса:
$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-адрес вызова: значение для каждой конечной точки включает ключ доступа на уровне функции.Как и раньше, используйте средство тестирования HTTP для проверки этих URL-адресов в приложении-функции, работающем в Azure.
Повторное развертывание кода
Вы можете выполнять azd up команду столько раз, сколько необходимо подготовить ресурсы Azure и развернуть обновления кода в приложении-функции.
Note
Развернутые файлы кода всегда перезаписываются последним пакетом развертывания.
Исходные ответы на azd запросы и любые переменные среды, созданные с помощью azd , хранятся локально в именованной среде.
azd env get-values Используйте команду, чтобы просмотреть все переменные в вашей среде, которые использовались при создании ресурсов Azure.
Очистка ресурсов
Когда вы закончите работу с приложением-функцией и связанными ресурсами, эту команду можно использовать для удаления приложения-функции и связанных ресурсов из Azure и предотвращения дополнительных затрат:
azd down --no-prompt
Note
Параметр --no-prompt указывает azd удалить группу ресурсов без подтверждения.
Эта команда не влияет на локальный проект кода.