Управление группами ресурсов Azure с помощью API-функции TypeScript
В этом руководстве вы создадите локальное приложение-функцию TypeScript Azure с API для управления группами ресурсов Azure и развертыванием приложения в Azure.
Функции и функции:
- Создание проекта локального приложения-функции TypeScript в Visual Studio Code
- Создание стандартного кода API функций в Visual Studio Code
- Развертывание в Функции Azure из Visual Studio Code
- Создание субъекта-службы с помощью интерфейса командной строки Azure
- Настройка параметров локального и удаленного приложения с помощью Visual Studio Code
- Использование DefaultAzureCredential в локальных и удаленных средах для подключений без пароля
- Использование пакетов SDK для управления удостоверениями Azure и Azure Resource Management для управления ресурсами Azure
- использование локальных и облачных API-интерфейсов для создания, удаления и перечисления групп ресурсов в подписке.
Хотя исходный код написан с помощью TypeScript, он является несложным. Если вы комфортно с современным JavaScript с помощью async/await, код будет знаком вам.
Создание новой или использование существующей подписки Azure
Вам потребуется учетная запись Azure с активной подпиской. Создайте ее бесплатно.
Необходимые компоненты
- Node.js LTS 18+ и npm , установленные на локальном компьютере. Ваша локальная версия среды разработки Node.js должна соответствовать одной из доступных версий облачной среды выполнения функции Azure.
- Установите на локальный компьютер Visual Studio Code.
- Расширение функции Azure версии 1.10.4 или более поздней версии.
- Функции Azure Core Tools версии 4.0.5095 или более поздней версии
- Azure Cloud Shell или Azure CLI , установленные на локальном компьютере.
Архитектура приложения
Приложение предоставляет следующие конечные точки API:
Способ | URL | Description |
---|---|---|
POST, DELETE | http://localhost:7071/api/resourcegroup | Добавление или удаление группы ресурсов. При добавлении включите теги (пары "ключ-значение"), чтобы определить назначение группы позже. |
GET | http://localhost:7071/api/resourcegroups | Вывод списка всех групп ресурсов в подписке. |
GET | http://localhost:7071/api/resources | Вывод списка всех ресурсов в подписке или группе ресурсов. |
Хотя эти конечные точки являются общедоступными, перед развертыванием в динамической среде необходимо защитить конечные точки API с помощью проверки подлинности и авторизации.
Это приложение ограничено подпиской, так как это область, указанный при создании субъекта-службы.
1. Подготовка среды
Чтобы использовать пакет SDK для удостоверений Azure, необходимо подготовить локальные и облачные среды.
Вход в Azure CLI
В терминале bash войдите в Azure CLI с помощью следующей команды:
az login
Получение идентификатора подписки Azure
В терминале Bash получите подписки и найдите идентификатор подписки, который вы хотите использовать. Следующий запрос возвращает идентификатор подписки, имя подписки и идентификатор клиента, отсортированный по имени подписки.
az account list --query "sort_by([].{Name:name, SubscriptionId:id, TenantId:tenantId}, &Name)" --output table
Скопируйте идентификатор подписки в предыдущий временный файл. Вам потребуется этот параметр позже.
Создание субъекта-службы Azure
Субъект-служба Azure предоставляет доступ к Azure без использования личных учетных данных пользователя. В этом руководстве субъект-служба может использоваться как в локальных, так и в облачных средах. В корпоративной среде требуется отдельные субъекты-службы для каждой среды.
Определите формат имени субъекта-службы, чтобы потом можно было легко найти субъект-службу. Вот некоторые варианты формата:
- Проект и его владелец:
resource-management-john-smith
. - Ваш отдел и дата:
IT-2021-September
. - Уникальный идентификатор:
00000000-0000-0000-0000-000000000000
.
- Проект и его владелец:
В терминале Bash создайте субъект-службу с помощью az ad sp create-for-rbac. Замените
<SUBSCRIPTION-ID>
идентификатором своей подписки.az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME --role Contributor --scopes /subscriptions/<SUBSCRIPTION-ID>
Скопируйте все выходные данные во временный файл. Эти параметры потребуются позже.
{ "appId": "YOUR-SERVICE-PRINCIPAL-ID", "displayName": "YOUR-SERVICE-PRINCIPAL-NAME", "name": "http://YOUR-SERVICE-PRINCIPAL-NAME", "password": "YOUR-SERVICE-PRINCIPAL-PASSWORD", "tenant": "YOUR-TENANT-ID" }
2. Создание локального приложения-функции Azure в Visual Studio Code
Создайте приложение-функцию Azure в Visual Studio Code для управления группами ресурсов Azure.
Создание приложения-функции
Для создания локального приложения-функции используйте Visual Studio Code.
В терминале Bash создайте новый каталог и перейдите в него:
mkdir my-function-app && cd my-function-app
В терминале Bash откройте Visual Studio Code:
code .
Откройте палитру команд в Visual Studio Code: CTRL + SHIFT + P.
Введите
Azure Functions: create new project
. Для ввода необходимых данных используйте значения из следующей таблицы:Prompt Значение Выберите папку, содержащую проект функции Выберите каталог по умолчанию (current) Выбор языка Выберите TypeScript. Выбор модели программирования TypeScript Выбор модели версии 4 (предварительная версия) Выбор шаблона для первой функции проекта Выберите Триггер HTTP. Создание триггера HTTP Введите имя API resourcegroups
.Уровень авторизации Выберите значение anonymous. Если вы продолжите работу с этим проектом после этой статьи, измените уровень авторизации на функцию. Дополнительные сведения см. в разделе об авторизации на уровне функций. Создается шаблон проекта и устанавливаются зависимости.
Добавление параметров субъекта-службы в файл local.settings.json
Откройте файл в корневом каталоге
./local.settings.json
проекта и добавьте раздел VALUES с пятью следующими переменными среды.{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "FUNCTIONS_WORKER_RUNTIME": "node", "AzureWebJobsFeatureFlags": "EnableWorkerIndexing", "AZURE_CLIENT_ID": "REPLACE-WITH-SERVICE-PRINCIPAL-APPID", "AZURE_CLIENT_SECRET": "REPLACE-WITH-SERVICE-PRINCIPAL-PASSWORD", "AZURE_SUBSCRIPTION_ID":"REPLACE-WITH-SUBSCRIPTION-ID", "AZURE_TENANT_ID":"REPLACE-WITH-SERVICE-PRINCIPAL-TENANT", "NODE_ENV":"development" } }
Чтобы добавить значения, ознакомьтесь с параметрами из предыдущего раздела. Эти переменные среды обязательны для контекста использования DefaultAzureCredential.
AZURE_TENANT_ID
:tenant
из выходных данных вышеуказанного субъекта-службы.AZURE_CLIENT_ID
:appId
из выходных данных вышеуказанного субъекта-службы.AZURE_CLIENT_SECRET
:password
из выходных данных вышеуказанного субъекта-службы.
Кроме того, необходимо указать идентификатор подписки. Для управления ресурсами необходимо использовать пакет SDK Azure.
AZURE_SUBSCRIPTION_ID
— ваша подписка по умолчанию с группами ресурсов.
Этот файл local.settings.json
специально игнорируется локальной версией git, чтобы вы случайно не зафиксировали его в свой исходный код.
Установка зависимостей npm для управления удостоверениями и ресурсами Azure
В интегрированном терминале Bash Visual Studio Code установите зависимости пакета Azure SDK для управления удостоверениями и ресурсами Azure.
npm install @azure/identity @azure/arm-resources
Вывод списка всех групп ресурсов в подписке с помощью JavaScript
Откройте файл
./src/functions/resourcegroups.ts
и замените его содержимое следующим:import { ResourceGroup } from '@azure/arm-resources'; import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions'; import { createResourceGroup, deleteResourceGroup } from '../lib/azure-resource-groups'; import { processError } from '../lib/error'; export async function resourcegroup( request: HttpRequest, context: InvocationContext ): Promise<HttpResponseInit> { try { console.log(JSON.stringify(request.query)); console.log(JSON.stringify(request.params)); const name: string = request.query.get('name'); const location: string = request.query.get('location'); console.log(`name: ${name}`); console.log(`location: ${location}`); switch (request.method) { case 'POST': // wait for create to complete before returning if (!name || !location) { return { body: 'Missing required parameters.', status: 400 }; } if (request.headers.get('content-type') === 'application/json') { // create with tags const body: Record<string, unknown> = (await request.json()) as Record<string, string>; const tags: Record<string, string> = body?.tags ? (body?.tags as Record<string, string>) : null; const resourceGroup: ResourceGroup = await createResourceGroup( name, location, tags ); return { jsonBody: resourceGroup, status: 200 }; } else { // create without tags const resourceGroup: ResourceGroup = await createResourceGroup( name, location, null ); return { jsonBody: resourceGroup, status: 200 }; } case 'DELETE': // wait for delete to complete before returning if (!name) { return { body: 'Missing required parameters.', status: 400 }; } await deleteResourceGroup(name); return { status: 204 }; } } catch (err: unknown) { return processError(err); } } app.http('resourcegroup', { methods: ['DELETE', 'POST'], authLevel: 'anonymous', handler: resourcegroup });
Этот файл отвечает на запросы
/api/resourcegroups
API и возвращает список всех групп ресурсов в подписке.Создайте подкаталог в
src
именованномlib
azure-resource-groups.ts
и создайте новый файл в этом каталоге.Скопируйте в файл
./src/lib/azure-resource-groups.ts
следующий код:// Include npm dependencies import { ResourceGroup, ResourceManagementClient } from '@azure/arm-resources'; import { DefaultAzureCredential } from '@azure/identity'; import { getSubscriptionId } from './environment-vars'; const subscriptionId = getSubscriptionId(); // Create Azure authentication credentials const credentials = new DefaultAzureCredential(); // Create Azure SDK client for Resource Management such as resource groups const resourceManagement = new ResourceManagementClient( credentials, subscriptionId ); // all resources groups in subscription export const listResourceGroups = async (): Promise<{ list: ResourceGroup[]; subscriptionId: string; }> => { const list: ResourceGroup[] = []; for await (const resourceGroup of resourceManagement.resourceGroups.list()) { list.push(resourceGroup); } return { subscriptionId, list }; }; export const createResourceGroup = async ( resourceGroupName: string, location: string, tags: { [propertyName: string]: string } ): Promise<ResourceGroup> => { const resourceGroupParameters = { location: location, tags }; return await resourceManagement.resourceGroups.createOrUpdate( resourceGroupName, resourceGroupParameters ); }; export const deleteResourceGroup = async ( resourceGroupName: string ): Promise<void> => { return await resourceManagement.resourceGroups.beginDeleteAndWait( resourceGroupName ); };
В файле выполняются следующие действия:
- получение идентификатора подписки;
- создание контекста DefaultAzureCredential;
- создание объекта ResourceManagementClient, который требуется для использования пакета SDK управления ресурсами;
- получение списка всех групп ресурсов в подписке.
Создайте файл в каталоге
./src/lib
с именемenvironment-vars.ts
и скопируйте следующий код в этот файл.export const checkAzureAuth = () => { // The following code is only used to check you have environment // variables configured. The DefaultAzureCredential reads your // environment - it doesn't read these variables. const tenantId = process.env['AZURE_TENANT_ID']; if (!tenantId) throw Error('AZURE_TENANT_ID is missing from environment variables.'); const clientId = process.env['AZURE_CLIENT_ID']; if (!clientId) throw Error('AZURE_CLIENT_ID is missing from environment variables.'); const secret = process.env['AZURE_CLIENT_SECRET']; if (!secret) throw Error('AZURE_CLIENT_SECRET is missing from environment variables.'); }; export const getSubscriptionId = (): string => { checkAzureAuth(); // Get subscription from environment variables const subscriptionId = process.env['AZURE_SUBSCRIPTION_ID']; if (!subscriptionId) throw Error('Azure Subscription is missing from environment variables.'); return subscriptionId; };
В этом файле проверяются переменные среды перед возвратом идентификатора подписки.
Создайте файл в каталоге
./src/lib
с именемerror.ts
и скопируйте следующий код в этот файл.export function processError(err: unknown): any { if (typeof err === 'string') { return { body: err.toUpperCase(), status: 500 }; } else if ( err['stack'] && process.env.NODE_ENV.toLowerCase() !== 'production' ) { return { jsonBody: { stack: err['stack'], message: err['message'] } }; } else if (err instanceof Error) { return { body: err.message, status: 500 }; } else { return { body: JSON.stringify(err) }; } }
Этот файл возвращает ошибку 500 с сообщением об ошибке. Стек возвращается, если
NODE_ENV
переменная не заданаproduction
.
Тестирование локальных функций
В интегрированном терминале Visual Studio Code запустите локальный проект:
npm start
Подождите, пока во встроенном терминале Bash отобразится URL-адрес выполняющейся функции.
Откройте второй интегрированный терминал bash в Visual Studio Code, CTRL + SHIFT + 5 и используйте следующую команду GET cURL для использования API:
curl http://localhost:7071/api/resourcegroups
Если в подписке много групп ресурсов, возможно, потребуется передавать выходные данные в файл для упрощения проверки.
curl http://localhost:7071/api/resourcegroups > resourcegroups.json
Ответ включает
subscriptionId
иlist
все группы ресурсов в этой подписке.{ "subscriptionId": "ABC123", "list": [ { "id": "/subscriptions/ABC123/resourceGroups/vmagelo-cloudshell", "name": "jsmith-cloudshell", "type": "Microsoft.Resources/resourceGroups", "properties": { "provisioningState": "Succeeded" }, "location": "westeurope" }, ... REMOVED FOR BREVITY ... ] }
Устранение неполадок
Если вам не удалось выполнить инструкции из этой статьи, ознакомьтесь с проблемами, описанными в следующей таблице. Если возникшая у вас проблема не описана в таблице, сообщите о ней на этой странице документации.
Проблема | Исправление |
---|---|
Приложение не запустилось. | Просмотрите журнал ошибок. Убедитесь, что вы установили необходимые зависимости. |
Приложение запустилось, но вы не можете получить ответ 200. | Убедитесь, что команда cURL запрашивает данные из правильного локального маршрута. |
Интерфейс API вернул ответ 200, но не вернул результаты. | Используйте расширение Visual Studio Code для ресурсов Azure, чтобы убедиться в наличии групп ресурсов в вашей подписке. Если в вашей подписке не окажется ни одной группы ресурсов, не беспокойтесь. В этом руководстве добавлен API для создания и удаления групп ресурсов в подписке. Этот API добавляется после первого развертывания исходного кода в Azure, чтобы вы могли научиться повторно развертывать код. |
3. Создание облачного приложения-функции Azure
В Visual Studio Code щелкните значок Azure, чтобы открыть Обозреватель Azure.
+ Щелкните значок, чтобы создать новое приложение-функцию Azure в облаке Azure.
Выберите "Создать приложение-функцию" в Azure.
Введите глобально уникальное имя нового приложения-функции. Имя должно быть уникальным для всех функций Azure. Например,
jsmith-rg-management
.Выберите ту же среду выполнения Node.js 18+ LTS, которую вы выбрали при создании локального приложения-функции.
Выберите географическое расположение рядом с вами, например западная часть США 3.
Подождите, пока ресурс не будет создан. Дополнительные сведения см. в журнале действий Azure.
4. Настройка облачного приложения-функции Azure
Чтобы подключиться к приложению-функции Azure, необходимо настроить параметры приложения Azure. В локальной среде эти параметры находятся в файле local.settings.json
. При этом эти значения добавляются в облачное приложение.
В Visual Studio Code в обозревателе Azure в разделе "Ресурсы " разверните приложение-функцию и выберите приложение-функцию.
Щелкните правой кнопкой мыши Параметры приложения и выберите Add New Setting (Добавить параметр).
Добавьте четыре значения из файла
local.settings.json
с точно такими же именами и значениями.AZURE_TENANT_ID
:tenant
из выходных данных вышеуказанного субъекта-службы.AZURE_CLIENT_ID
:appId
из выходных данных вышеуказанного субъекта-службы.AZURE_CLIENT_SECRET
:password
из выходных данных вышеуказанного субъекта-службы.AZURE_SUBSCRIPTION_ID
— ваша подписка по умолчанию с группами ресурсов.AzureWebJobsFeatureFlags
:EnableWorkerIndexing
5. Развертывание приложения-функции Resource Manager
Разверните приложение-функцию Azure в Visual Studio Code для управления группами ресурсов Azure.
Использование расширения Visual Studio Code для развертывания среды размещения
В VS Code откройте
local.settings.json
файл, чтобы он был видимым. Это упрощает копирование этих имен и значений.Выберите логотип Azure, чтобы открыть Обозреватель Azure, а затем в разделе "Функции" выберите значок облака для развертывания приложения.
Кроме того, для выполнения развертывания вы можете открыть палитру команд с помощью клавиш CTRL + SHIFT + P, ввести текст
deploy to function app
и выполнить команду Azure Functions: Deploy to Function App.Выберите " Развернуть в приложении-функции".
Выберите имя приложения-функции, созданное в предыдущем разделе.
Если вы хотите развернуть, нажмите кнопку "Развернуть".
Сведения о ходе выполнения отображаются на панели Выходные данные в VS Code в разделе Функции Azure. При развертывании передается все приложение-функция, то есть все изменения отдельных функций будут развернуты одновременно.
Проверка доступности приложения-функции с помощью браузера
Находясь в Visual Studio Code, перейдите к обозревателю Функций Azure, а затем последовательно разверните узел подписки Azure, узел приложения-функции и узел Функции (только для чтения). Щелкните правой кнопкой мыши имя функции и выберите действие Copy Function Url (Копирование URL-адреса функции).
Вставьте URL-адрес в браузер и нажмите клавишу ВВОД , чтобы запросить список групп ресурсов из облачного API.
6. Добавление API-интерфейсов в приложение-функцию и повторное развертывание в Azure
Добавьте следующие API, а затем повторно разверните приложение-функцию Azure в Visual Studio Code:
- Добавление и удаление групп ресурсов
- Вывод списка ресурсов в группе ресурсов или подписке.
На этом этапе учебника вы создали локальное приложение-функцию с одним API для перечисления групп ресурсов подписки и развернули это приложение в Azure. Как разработчику Azure вам может понадобиться создать или удалить группы ресурсов в рамках конвейера автоматизации процессов.
Создание API группы ресурсов для приложения-функции
Используйте расширение Visual Studio Code для Функции Azure, чтобы добавить файлы TypeScript в приложение-функцию для создания и удаления групп ресурсов.
Откройте палитру команд в Visual Studio Code: CTRL + SHIFT + P.
Введите
Azure Functions: Create Function
, затем нажмите клавишу ВВОД, чтобы начать процесс.Используйте следующую таблицу для создания API /api/resourcegroup :
Prompt Значение Выбор шаблона для функции Триггер HTTP Provide a function name (Укажите имя функции) resourcegroup
Уровень авторизации Выберите значение anonymous. Если вы продолжите работу с этим проектом, измените уровень авторизации на функцию. Дополнительные сведения см. в разделе об авторизации на уровне функций. Откройте и замените
./src/functions/resourcegroup.ts
весь файл следующим исходным кодом.import { ResourceGroup } from '@azure/arm-resources'; import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions'; import { createResourceGroup, deleteResourceGroup } from '../lib/azure-resource-groups'; import { processError } from '../lib/error'; export async function resourcegroup( request: HttpRequest, context: InvocationContext ): Promise<HttpResponseInit> { try { console.log(JSON.stringify(request.query)); console.log(JSON.stringify(request.params)); const name: string = request.query.get('name'); const location: string = request.query.get('location'); console.log(`name: ${name}`); console.log(`location: ${location}`); switch (request.method) { case 'POST': // wait for create to complete before returning if (!name || !location) { return { body: 'Missing required parameters.', status: 400 }; } if (request.headers.get('content-type') === 'application/json') { // create with tags const body: Record<string, unknown> = (await request.json()) as Record<string, string>; const tags: Record<string, string> = body?.tags ? (body?.tags as Record<string, string>) : null; const resourceGroup: ResourceGroup = await createResourceGroup( name, location, tags ); return { jsonBody: resourceGroup, status: 200 }; } else { // create without tags const resourceGroup: ResourceGroup = await createResourceGroup( name, location, null ); return { jsonBody: resourceGroup, status: 200 }; } case 'DELETE': // wait for delete to complete before returning if (!name) { return { body: 'Missing required parameters.', status: 400 }; } await deleteResourceGroup(name); return { status: 204 }; } } catch (err: unknown) { return processError(err); } } app.http('resourcegroup', { methods: ['DELETE', 'POST'], authLevel: 'anonymous', handler: resourcegroup });
Файл
./src/lib/azure-resource-groups.ts
уже содержит код для добавления и удаления групп ресурсов.
Создание API ресурсов для приложения-функции
Используйте расширение Visual Studio Code для Функции Azure, чтобы добавить файлы TypeScript в приложение-функцию для перечисления ресурсов в группе ресурсов.
Откройте палитру команд в Visual Studio Code: CTRL + SHIFT + P.
Введите
Azure Functions: Create Function
, затем нажмите клавишу ВВОД, чтобы начать процесс.Используйте следующую таблицу для создания API /api/resources :
Prompt Значение Выбор шаблона для функции Триггер HTTP Provide a function name (Укажите имя функции) resources
Уровень авторизации Выберите значение anonymous. Если вы продолжите работу с этим проектом, измените уровень авторизации на функцию. Дополнительные сведения см. в разделе об авторизации на уровне функций. Откройте и замените
./src/functions/resources.ts
весь файл следующим исходным кодом.import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions'; import { listResourceByResourceGroup, listResourceBySubscription } from '../lib/azure-resource'; import { processError } from '../lib/error'; export async function resources( request: HttpRequest, context: InvocationContext ): Promise<HttpResponseInit> { try { const resourceGroupName: string = request.query.get('resourceGroupName'); context.log(`resourceGroupName: '${resourceGroupName}'`); if (resourceGroupName) { const resourcesByName = await listResourceByResourceGroup( resourceGroupName ); return { jsonBody: resourcesByName }; } else { const resourcesBySubscription = await listResourceBySubscription(); return { jsonBody: resourcesBySubscription }; } } catch (err: unknown) { return processError(err); } } app.http('resources', { methods: ['GET'], authLevel: 'anonymous', handler: resources });
./src/lib/azure-resource.ts
Создайте файл и скопируйте в него следующий код, чтобы вывести список ресурсов в группе ресурсов.// Include npm dependencies import { Resource, ResourceManagementClient } from '@azure/arm-resources'; import { DefaultAzureCredential } from '@azure/identity'; import { getSubscriptionId } from './environment-vars'; const subscriptionId = getSubscriptionId(); // Create Azure authentication credentials const credentials = new DefaultAzureCredential(); // Create Azure SDK client for Resource Management such as resource groups const resourceManagement = new ResourceManagementClient( credentials, subscriptionId ); // all resources groups in subscription export const listResourceBySubscription = async (): Promise<{ list: Resource[]; subscriptionId: string; }> => { const list: Resource[] = []; for await (const resource of resourceManagement.resources.list()) { list.push(resource); } return { subscriptionId, list }; }; // all resources groups in resource group export const listResourceByResourceGroup = async ( resourceGroupName: string ): Promise<{ list: Resource[]; subscriptionId: string; resourceGroupName: string; }> => { const list: Resource[] = []; for await (const resource of resourceManagement.resources.listByResourceGroup( resourceGroupName )) { list.push(resource); } return { subscriptionId, resourceGroupName, list }; };
Запуск локального приложения-функции и проверка нового API
В интегрированном терминале Visual Studio Code запустите локальный проект:
npm start
Подождите, пока во встроенном терминале Bash отобразится URL-адрес выполняющейся функции.
Используйте следующие команды curl в другом интегрированном терминале Bash, чтобы вызвать API, чтобы добавить группу ресурсов в подписку. Чтобы использовать собственные соглашения об именовании, измените имя группы ресурсов.
curl -X POST 'http://localhost:7071/api/resourcegroup?name=my-test-1&location=westus' curl -X POST 'http://localhost:7071/api/resourcegroup?name=my-test-1&location=westus' \ -H 'content-type: application/json' \ -d '{"tags": {"a":"b"}}'
Чтобы увидеть новую группу ресурсов, указанную в подписке, используйте команду cURL, приведенную ниже.
curl http://localhost:7071/api/resource-groups
Чтобы удалить только что добавленную группу ресурсов, используйте команду cURL, приведенную ниже.
curl -X DELETE 'http://localhost:7071/api/resourcegroup?name=my-test-1' \ -H 'Content-Type: application/json'
Повторное развертывание приложения-функции с помощью новых API-интерфейсов в Azure
В VS Code разверните, открыв палитру команд с помощью CTRL + SHIFT + p, введя
deploy to function app
и выполнив команду Функции Azure: развертывание в приложении-функции.Выберите свое приложение-функцию из списка приложений.
Выберите Развернуть во всплывающем окне.
Подождите, пока развертывание завершится.
Проверка API-интерфейсов функций с помощью браузера
Используйте предыдущие команды cURL, заменив адрес localhost именем ресурса функции Azure, http://localhost:7071
например https://myfunction.azurewebsites.net
.
7. Просмотр и запрос журналов приложения-функции
Просмотр и запрос журналов приложений-функций Azure в портал Azure.
Запрашивание журналов Функций Azure
Для просмотра и запроса журналов функций используйте портал Azure.
В VS Code щелкните логотип Azure, чтобы открыть Azure Explorer, а затем в разделе Функции щелкните правой кнопкой мыши нужное приложение-функцию и выберите Открыть на портале.
Откроется страница портала Azure для Функции Azure.
Выберите Application Insights в разделе параметров, а затем щелкните Просмотреть данные Application Insights.
Эта ссылка позволяет перейти к отдельному ресурсу метрик, созданному вместе с Функцией Azure в VS Code.
Щелкните Журналы в разделе мониторинга. Если появится всплывающее окно Запросы, щелкните значок X в правом верхнем углу, чтобы закрыть его.
В области Схема и фильтр на вкладке Таблицы дважды щелкните таблицу traces.
Это действие помещает запрос Kusto
traces
в окно запроса.Измените запрос, чтобы найти вызовы API:
traces | where message startswith "Executing "
Выберите Выполнить.
Если журнал не отображает результаты, это может быть связано с задержкой в течение нескольких минут между HTTP-запросом к функции Azure и доступностью журнала в Kusto. Подождите несколько минут и выполните запрос еще раз.
Так как ресурс приложения Аналитика добавлен для вас при создании приложения-функции Azure, вам не нужно ничего дополнительного, чтобы получить эти сведения для ведения журнала:
- Приложение-функция добавило Application Insights за вас.
- Средство выполнения запросов включено в портал Azure.
- Вы можете выбрать
traces
вместо того, чтобы научиться писать запрос Kusto, чтобы получить даже минимальную информацию из журналов.
8. Очистка ресурсов Azure
Удаление группы ресурсов
В VS Code выберите логотип Azure, чтобы открыть Обозреватель Azure, а затем в разделе "Функции" щелкните правой кнопкой мыши приложение-функцию, а затем выберите "Открыть на портале". Откроется портал Azure функции Azure.
В разделе "Обзор" найдите и выберите имя группы ресурсов. Это действие принимает вас в группу ресурсов в портал Azure.
На странице группы ресурсов перечислены все ресурсы, связанные с этим руководством.
В главном меню выберите Удалить группу ресурсов.
В боковом меню введите имя группы ресурсов и нажмите кнопку "Удалить".
Удаление субъекта-службы
Чтобы удалить субъект-службу, выполните следующую команду. Замените <YOUR-SERVICE-PRINCIPAL-NAME>
именем субъекта-службы.
az ad sp delete --id <YOUR-SERVICE-PRINCIPAL-NAME>
Пример кода
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по