Краткое руководство. Создание и развертывание функций для Функции Azure с помощью Интерфейса командной строки разработчика Azure
В этом кратком руководстве вы используете средства командной строки разработчика Azure для создания функций, которые отвечают на HTTP-запросы. После локального тестирования кода вы развернете его в новом бессерверном приложении-функции, которое вы создаете в плане потребления Flex в Функции Azure.
Источник проекта использует интерфейс командной строки разработчика Azure (azd), чтобы упростить развертывание кода в Azure. Это развертывание следует текущим рекомендациям по безопасным и масштабируемым Функции Azure развертываниям.
По умолчанию план потребления Flex следует модели выставления счетов с оплатой за то, что вы используете , а это означает, что для выполнения этого краткого руководства взимается небольшая стоимость нескольких центов в долларах США или меньше в вашей учетной записи Azure.
Необходимые компоненты
Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
Интерфейс командной строки разработчика Azure.
- Пакет разработчиков Java 17
- Если вы используете другую поддерживаемую версию Java, необходимо обновить файл pom.xml проекта.
- Переменной среды
JAVA_HOME
необходимо присвоить расположение установки правильной версии JDK.
- Apache Maven 3.8.x
- Безопасное средство тестирования HTTP для отправки запросов с полезными данными JSON в конечные точки функции. Для этой статьи используется
curl
.
Инициализация проекта
С помощью azd init
команды можно создать локальный проект кода Функции Azure из шаблона.
В локальном терминале или командной строке выполните следующую
azd init
команду в пустой папке:azd init --template functions-quickstart-dotnet-azd -e flexquickstart-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 flexquickstart-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 flexquickstart-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 flexquickstart-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 flexquickstart-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 flexquickstart-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 start
mvn clean package mvn azure-functions:run
npm install func start
npm install npm start
Когда узел функций запускается в локальной папке проекта, он записывает конечные точки URL-адреса активируемых функций HTTP в выходные данные терминала.
В браузере перейдите к конечной точке
httpget
, которая должна выглядеть следующим образом:В новом окне терминала или командной строки выполните следующую
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
файле проекта.По завершении нажмите клавиши 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.
Примечание.
Этот проект включает набор файлов Bicep, используемых azd
для создания безопасного развертывания в плане потребления Flex, который следует рекомендациям.
Команды azd up
и azd deploy
команды в настоящее время не поддерживаются для приложений Java.
В корневой папке проекта выполните следующую команду, чтобы создать необходимые ресурсы Azure:
azd provision
Корневая папка содержит файл определения, необходимый
azure.yaml
azd
.Если вы еще не вошли в систему, вам будет предложено выполнить проверку подлинности с помощью учетной записи Azure.
При появлении запроса укажите следующие необходимые параметры развертывания:
Параметр Описание Подписка 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.
Совет
Этот проект включает набор файлов Bicep, используемых azd
для создания безопасного развертывания в плане потребления Flex, который следует рекомендациям.
Выполните следующую команду, чтобы
azd
создать необходимые ресурсы Azure в Azure и развернуть проект кода в новом приложении-функции:azd up
Корневая папка содержит файл определения, необходимый
azure.yaml
azd
.Если вы еще не вошли в систему, вам будет предложено выполнить проверку подлинности с помощью учетной записи Azure.
При появлении запроса укажите следующие необходимые параметры развертывания:
Параметр Описание Подписка 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 и развернуть обновления кода в приложении-функции.
Примечание.
Развернутые файлы кода всегда перезаписываются последним пакетом развертывания.
Исходные ответы на azd
запросы и любые переменные среды, созданные с помощью azd
, хранятся локально в именованной среде. azd env get-values
Используйте команду, чтобы просмотреть все переменные в вашей среде, которые использовались при создании ресурсов Azure.
Очистка ресурсов
Когда вы закончите работу с приложением-функцией и связанными ресурсами, эту команду можно использовать для удаления приложения-функции и связанных ресурсов из Azure и предотвращения дополнительных затрат:
azd down --no-prompt
Примечание.
Параметр --no-prompt
указывает azd
удалить группу ресурсов без подтверждения.
Эта команда не влияет на локальный проект кода.