Administración de grupos de recursos de Azure con TypeScript Function API
En este tutorial, creará una aplicación de función de Azure TypeScript local con API para administrar grupos de recursos de Azure e implementar la aplicación en Azure.
Características y funcionalidades:
- Creación de un proyecto de aplicación de funciones de Azure TypeScript local en Visual Studio Code
- Creación de código reutilizable de api de función en Visual Studio Code
- Implementación en Azure Functions desde Visual Studio Code
- Creación de una entidad de servicio con la CLI de Azure
- Configuración de las opciones de aplicación local y remota con Visual Studio Code
- Uso de DefaultAzureCredential en entornos locales y remotos para conexiones sin contraseña
- Uso de los SDK de Azure Identity y Azure Resource Management para administrar recursos de Azure
- Uso de las API locales y en la nube para crear, eliminar y enumerar los grupos de recursos de la suscripción
El código fuente es sencillo aunque se escriba con TypeScript. Si está familiarizado con JavaScript moderno mediante async/await, el código le resultará familiar.
Creación o uso de una suscripción de Azure existente
Necesitará una cuenta de usuario de Azure con una suscripción activa. cree una de forma gratuita.
Requisitos previos
- Node.js LTS 18+ y npm instalados en el equipo local. La versión del entorno de desarrollo local de Node.js debe coincidir con una de las versiones disponibles del entorno de ejecución en la nube de Azure Functions.
- Visual Studio Code instalado en la máquina local.
- Extensión de azure Function v1.10.4 o posterior.
- Azure Functions Core Tools v4.0.5095 o posterior
- Azure Cloud Shell o la CLI de Azure instaladas en la máquina local.
Arquitectura de la aplicación
La aplicación proporciona los siguientes puntos de conexión de API.
Método | URL | Descripción |
---|---|---|
POST, DELETE | http://localhost:7071/api/resourcegroup | Agregue o elimine un grupo de recursos. Al agregar, incluya etiquetas (pares clave-valor) para identificar el propósito del grupo más adelante. |
GET | http://localhost:7071/api/resourcegroups | Enumeración de todos los grupos de recursos en una suscripción. |
GET | http://localhost:7071/api/resources | Enumeración de todos los recursos en una suscripción o grupo de recursos. |
Aunque estos puntos de conexión son públicos, debe proteger los puntos de conexión de API con autenticación y autorización antes de implementarlos en el entorno activo.
Esta aplicación está limitada a una suscripción porque es el ámbito especificado al crear la entidad de servicio.
1. Preparación del entorno
Debe preparar los entornos locales y en la nube para usar el SDK de Azure Identity.
Inicio de sesión en la CLI de Azure
En un terminal de Bash, inicie sesión en la CLI de Azure con el comando siguiente:
az login
Obtención del identificador de la suscripción a Azure
En un terminal de Bash, obtenga las suscripciones y busque el identificador de suscripción que desea usar. La consulta siguiente devuelve el identificador de suscripción, el nombre de la suscripción y el identificador de inquilino ordenados por nombre de suscripción.
az account list --query "sort_by([].{Name:name, SubscriptionId:id, TenantId:tenantId}, &Name)" --output table
Copie el identificador de suscripción en el archivo temporal anterior. Necesitará esta configuración más adelante.
Creación de una entidad de servicio de Azure
Una entidad de servicio de Azure proporciona acceso a Azure sin tener que usar sus credenciales de usuario personales. En este tutorial, la entidad de servicio se puede usar tanto en los entornos locales como en la nube. En un entorno empresarial, desearía entidades de servicio independientes para cada entorno.
Determine un formato de nombre de entidad de servicio para que pueda encontrar fácilmente la entidad de servicio más adelante. Por ejemplo, varias ideas de formato son:
- El proyecto y el propietario:
resource-management-john-smith
. - Su departamento y fecha:
IT-2021-September
- Un identificador único:
00000000-0000-0000-0000-000000000000
- El proyecto y el propietario:
En un terminal de Bash, cree la entidad de servicio con az ad sp create-for-rbac. Reemplace
<SUBSCRIPTION-ID>
con el Id. de suscripción.az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME --role Contributor --scopes /subscriptions/<SUBSCRIPTION-ID>
Copie los resultados de salida completos en un archivo temporal. Necesitará esta configuración más adelante.
{ "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. Creación de una aplicación de funciones local de Azure en Visual Studio Code
Cree una aplicación de funciones de Azure en Visual Studio Code para administrar grupos de recursos de Azure.
Creación de una instancia de Function App
Use Visual Studio Code para crear una aplicación de funciones local.
En un terminal de Bash, cree un nuevo directorio y cambie a él:
mkdir my-function-app && cd my-function-app
En un terminal de Bash, abra Visual Studio Code:
code .
Abra la paleta de comandos de Visual Studio Code: Ctrl + Mayús + p.
Escriba
Azure Functions: create new project
. Utilice la siguiente tabla para responder a los mensajes:Prompt Valor Seleccione la carpeta que contendrá el proyecto de función. Seleccione el directorio predeterminado (actual) Selección de un idioma Seleccione TypeScript. Selección de un modelo de programación de TypeScript Selección del modelo V4 (versión preliminar) Seleccionar una plantilla para la primera función de su proyecto Seleccione Desencadenador HTTP. Creación de un desencadenador HTTP Escriba el nombre de la API de resourcegroups
.Nivel de autorización Seleccione anónimo. Si continúa con este proyecto después de este artículo, cambie el nivel de autorización a la función. Obtenga más información sobre la autorización en el nivel de función. El proyecto reutilizable se crea y se instalan las dependencias.
Adición de la configuración de la entidad de servicio al archivo local.settings.json
Abra el
./local.settings.json
archivo en el directorio raíz del proyecto y agregue la sección VALUES con las cinco variables de entorno siguientes.{ "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" } }
Consulte la configuración de la sección anterior para agregar los valores. Estas variables de entorno son NECESARIAS para que el contexto use DefaultAzureCredential.
AZURE_TENANT_ID
: valor detenant
de la salida de la entidad de servicio anterior.AZURE_CLIENT_ID
: valor deappId
de la salida de la entidad de servicio anterior.AZURE_CLIENT_SECRET
: valor depassword
de la salida de la entidad de servicio anterior.
También debe establecer el identificador de suscripción. Es necesario usar el SDK de Azure para la administración de recursos.
AZURE_SUBSCRIPTION_ID
: la suscripción predeterminada que contiene los grupos de recursos.
El git local omite este archivo local.settings.json
a propósito, para que no lo confirme accidentalmente en el código fuente.
Instalación de dependencias de npm para la administración de recursos e identidades de Azure
En un terminal de Bash integrado de Visual Studio Code, instale las dependencias del SDK de Azure para la administración de recursos e identidades de Azure.
npm install @azure/identity @azure/arm-resources
Enumeración de todos los grupos de recursos en una suscripción con JavaScript
Abra el archivo
./src/functions/resourcegroups.ts
y reemplace el contenido por lo siguiente: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 });
Este archivo responde a las solicitudes de API a
/api/resourcegroups
y devuelve una lista de todos los grupos de recursos de la suscripción.Cree un subdirectorio con
src
nombrelib
y cree un nuevo archivo en ese directorio denominadoazure-resource-groups.ts
.Copie el código siguiente en el archivo
./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 ); };
El archivo hace lo siguiente:
- Obtiene el identificador de la suscripción.
- Crea el contexto DefaultAzureCredential.
- Crea el cliente ResourceManagementClient necesario para usar el SDK de administración de recursos.
- Obtiene todos los grupos de recursos en la suscripción.
Cree un nuevo archivo en el
./src/lib
directorio denominadoenvironment-vars.ts
y copie el código siguiente en ese archivo.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; };
Este archivo comprueba las variables de entorno antes de devolver el identificador de suscripción.
Cree un nuevo archivo en el
./src/lib
directorio denominadoerror.ts
y copie el código siguiente en ese archivo.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) }; } }
Este archivo devuelve un error 500 con el mensaje de error. La pila se devuelve si la
NODE_ENV
variable no está establecidaproduction
en .
Prueba de funciones locales
En el terminal integrado de Visual Studio Code, ejecute el proyecto local:
npm start
Espere hasta que el terminal de Bash integrado muestre la dirección URL de la función en ejecución.
Abra un segundo terminal de Bash integrado en Visual Studio Code, Ctrl + Mayús + 5 y use el siguiente comando GET cURL para usar la API:
curl http://localhost:7071/api/resourcegroups
Si tiene muchos grupos de recursos en su suscripción, puede que desee canalizar la salida a un archivo para facilitar su revisión.
curl http://localhost:7071/api/resourcegroups > resourcegroups.json
La respuesta incluye
subscriptionId
y unlist
de todos los grupos de recursos de esa suscripción.{ "subscriptionId": "ABC123", "list": [ { "id": "/subscriptions/ABC123/resourceGroups/vmagelo-cloudshell", "name": "jsmith-cloudshell", "type": "Microsoft.Resources/resourceGroups", "properties": { "provisioningState": "Succeeded" }, "location": "westeurope" }, ... REMOVED FOR BREVITY ... ] }
Solución de problemas
Si no pudo completar este artículo, consulte la tabla siguiente para ver si hay problemas. Si el problema no aparece en la tabla, abra una incidencia en esta página de documentación.
Problema | Revisión |
---|---|
La aplicación no se inició. | Revise los errores. Asegúrese de que ha instalado las dependencias necesarias. |
La aplicación se inició, pero no se puede obtener una respuesta 200. | Asegúrese de que el comando curl solicita desde la ruta local correcta. |
La API devolvió una respuesta 200, pero no devolvió ningún resultado. | Use la extensión de Visual Studio Code para recursos de Azure para comprobar que la suscripción tiene grupos de recursos. Si no ve ningún grupo de recursos, no se preocupe. En este tutorial se agrega una API para crear y eliminar grupos de recursos en la suscripción. Esta API se agrega después de la primera implementación del código fuente en Azure, para que aprenda cómo volver a implementar el código. |
3. Creación de una aplicación de funciones de Azure basada en la nube
En Visual Studio Code, seleccione el icono de Azure para abrir Azure Explorer.
Seleccione el + icono para crear una nueva aplicación de funciones de Azure en la nube de Azure.
Seleccione Crear aplicación de funciones en Azure.
Escriba un nombre único global para la nueva aplicación de funciones. El nombre debe ser único en todas las funciones de Azure. Por ejemplo,
jsmith-rg-management
.Seleccione la misma Node.js tiempo de ejecución de 18+ LTS que seleccionó al crear la aplicación de funciones local.
Seleccione una ubicación geográfica cerca de usted, como Oeste de EE. UU. 3.
Espere hasta que se valide el recurso. Puede ver Azure : Registro de actividad para obtener más información.
4. Configuración de una aplicación de funciones de Azure basada en la nube
Debe configurar las opciones de la aplicación de Azure para conectarse a la aplicación de funciones de Azure. Localmente, esta configuración se encuentra en el archivo local.settings.json
. Este proceso agrega esos valores a la aplicación en la nube.
En Visual Studio Code, en el explorador de Azure, en la sección Recursos , expanda Aplicación de funciones y, a continuación, seleccione la aplicación de funciones.
Haga clic con el botón derecho en Configuración de la aplicación y seleccione Agregar nueva configuración.
Agregue los cuatro valores del archivo
local.settings.json
con el mismo nombre y valores.AZURE_TENANT_ID
: valor detenant
de la salida de la entidad de servicio anterior.AZURE_CLIENT_ID
: valor deappId
de la salida de la entidad de servicio anterior.AZURE_CLIENT_SECRET
: valor depassword
de la salida de la entidad de servicio anterior.AZURE_SUBSCRIPTION_ID
: la suscripción predeterminada que contiene los grupos de recursos.AzureWebJobsFeatureFlags
:EnableWorkerIndexing
5. Implementación de la aplicación de funciones de Resource Manager
Implemente una aplicación de funciones de Azure en Visual Studio Code para administrar grupos de recursos de Azure.
Uso de la extensión de Visual Studio Code para la implementación en el entorno de hospedaje
En VS Code, abra el
local.settings.json
archivo para que esté visible. Esto hará que los pasos siguientes de copiar esos nombres y valores sean más fáciles.Seleccione el logotipo de Azure para abrir el Explorador de Azure y, después, en Functions, seleccione el icono de nube para implementar la aplicación.
De forma alternativa, puede realizar la implementación abriendo la paleta de comandos con Ctrl + Mayús + p, escribiendo
deploy to function app
y ejecutando el comando Azure Functions: Deploy to Function App.Seleccione Implementar en la aplicación de funciones.
Seleccione el nombre de function App que creó en la sección anterior.
Cuando se le pregunte si está seguro de que desea implementar, seleccione Implementar.
En el panel Salida de VS Code para Azure Functions aparece el progreso. En la implementación se implementa toda la aplicación de funciones, por lo que los cambios en todas las funciones individuales se implementan al mismo tiempo.
Comprobación de que la aplicación de funciones está disponible con el explorador
Todavía en Visual Studio Code, use el explorador de Azure Functions, expanda el nodo de la suscripción de Azure, expanda el nodo de la aplicación de funciones y, a continuación, expanda Functions (read only) [Functions (solo lectura)]. Haga clic con el botón derecho en el nombre de la función y seleccione Copy Function Url (Copiar la dirección URL de la función):
Pegue la dirección URL en un explorador y presione Entrar para solicitar la lista de grupos de recursos de la API en la nube.
6. Incorporación de API a la aplicación de funciones y reimplementación en Azure
Agregue las SIGUIENTES API y vuelva a implementar la aplicación de funciones de Azure en Visual Studio Code:
- Adición y eliminación de grupos de recursos
- Enumera los recursos en el grupo de recursos o la suscripción.
En este punto del tutorial, ha creado una aplicación de funciones local con una API para enumerar los grupos de recursos de la suscripción y ha implementado esa aplicación en Azure. Como desarrollador de Azure, puede crear o eliminar grupos de recursos como parte de la canalización de automatización de procesos.
Creación de una API de grupo de recursos para la aplicación de funciones
Use la extensión de Visual Studio Code para Azure Functions para agregar los archivos TypeScript a la aplicación de funciones para crear y eliminar grupos de recursos.
Abra la paleta de comandos de Visual Studio Code: Ctrl + Mayús + p.
Escriba
Azure Functions: Create Function
y presione Entrar para comenzar el proceso.Use la tabla siguiente para crear la API /api/resourcegroup :
Prompt Value Seleccionar una plantilla para la función Desencadenador HTTP Proporcionar un nombre de función resourcegroup
Nivel de autorización Seleccione anónimo. Si continúa con este proyecto, cambie el nivel de autorización a la función. Obtenga más información sobre la autorización en el nivel de función. ./src/functions/resourcegroup.ts
Abra y reemplace todo el archivo por el código fuente siguiente.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 });
El
./src/lib/azure-resource-groups.ts
archivo ya contiene el código para agregar y eliminar grupos de recursos.
Creación de la API de recursos para la aplicación de funciones
Use la extensión de Visual Studio Code para Azure Functions para agregar los archivos TypeScript a la aplicación de funciones para enumerar los recursos de un grupo de recursos.
Abra la paleta de comandos de Visual Studio Code: Ctrl + Mayús + p.
Escriba
Azure Functions: Create Function
y presione Entrar para comenzar el proceso.Use la tabla siguiente para crear la API /api/resources :
Prompt Value Seleccionar una plantilla para la función Desencadenador HTTP Proporcionar un nombre de función resources
Nivel de autorización Seleccione anónimo. Si continúa con este proyecto, cambie el nivel de autorización a la función. Obtenga más información sobre la autorización en el nivel de función. ./src/functions/resources.ts
Abra y reemplace todo el archivo por el código fuente siguiente.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 });
Cree el archivo y copie el
./src/lib/azure-resource.ts
código siguiente en él para enumerar los recursos de un grupo de recursos.// 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 }; };
Inicio de la aplicación de funciones local y prueba de la nueva API
En el terminal integrado de Visual Studio Code, ejecute el proyecto local:
npm start
Espere hasta que el terminal de Bash integrado muestre la dirección URL de la función en ejecución.
Use los siguientes comandos curl en un terminal de Bash integrado diferente para llamar a la API para agregar un grupo de recursos a la suscripción. Cambie el nombre del grupo de recursos para usar sus propias convenciones de nomenclatura.
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"}}'
Use el siguiente comando curl para ver el nuevo grupo de recursos en la suscripción.
curl http://localhost:7071/api/resource-groups
Use el siguiente comando curl para eliminar el grupo de recursos que acaba de agregar.
curl -X DELETE 'http://localhost:7071/api/resourcegroup?name=my-test-1' \ -H 'Content-Type: application/json'
Reimplementación de la aplicación de funciones con nuevas API en Azure
En VS Code, abra la paleta de comandos con Ctrl + Mayús + p, escriba
deploy to function app
y ejecute el comando Azure Functions: Deploy to Function App .Seleccione la aplicación de funciones en la lista de aplicaciones.
Seleccione Implementar en la ventana emergente.
Espere hasta que se complete la implementación.
Comprobación de las API de Functions con el explorador
Use los comandos cURL anteriores, reemplazando la dirección localhost, por el nombre del recurso de Azure Function, http://localhost:7071
como https://myfunction.azurewebsites.net
.
7. Visualización y consulta de los registros de la aplicación de funciones
Vea y consulte los registros de la aplicación de funciones de Azure en Azure Portal.
Consulta de los registros de Azure Functions
Use Azure Portal para ver y consultar los registros de la función.
En VS Code, seleccione el logotipo de Azure para abrir Azure Explorer y luego, en Functions, haga clic con el botón derecho en la aplicación de funciones y seleccione Abrir en el portal.
Así se abre Azure Functions en Azure Portal.
Seleccione Application Insights en Configuración y, después, seleccione Ver datos de Application Insights.
Este vínculo le lleva a un recurso de métricas independiente creado automáticamente al crear una instancia de Azure Functions con VS Code.
Seleccione Registros en la sección Supervisión. Si aparece la ventana emergente Consultas, seleccione la X en la esquina superior derecha del menú emergente para cerrarlo.
En el panel Esquema y filtro, en la pestaña Tablas, haga doble clic en la tabla Seguimientos.
Así se especifica la consulta de Kusto,
traces
en la ventana de consulta.Edite la consulta para buscar llamadas API:
traces | where message startswith "Executing "
Seleccione Ejecutar.
Si el registro no muestra ningún resultado, puede deberse a que hay unos minutos de retraso entre la solicitud HTTP a la función de Azure y la disponibilidad del registro en Kusto. Espere unos minutos y vuelva a ejecutar la consulta.
Dado que se agregó un recurso de Application Ideas automáticamente al crear la aplicación de funciones de Azure, no era necesario hacer nada adicional para obtener esta información de registro:
- La aplicación de funciones agregó Application Insights automáticamente.
- La herramienta de consulta está incluida en Azure Portal.
- Puede seleccionar
traces
en lugar de tener que aprender a escribir una consulta de Kusto para obtener incluso la información mínima de los registros.
8. Limpieza de recursos de Azure
Eliminar el grupo de recursos
En VS Code, seleccione el logotipo de Azure para abrir Azure Explorer y, después, en Functions, haga clic con el botón derecho en la aplicación de funciones y, a continuación, seleccione Abrir en el portal. Se abrirá Azure Portal en la función de Azure.
En la sección Información general , busque y seleccione el nombre del grupo de recursos. Esta acción le lleva al grupo de recursos en Azure Portal.
En la página del grupo de recursos se enumeran todos los recursos asociados a este tutorial.
En el menú superior, seleccione Eliminar grupo de recursos.
En el menú lateral, escriba el nombre del grupo de recursos y seleccione Eliminar.
Eliminación de la entidad de servicio
Para eliminar la entidad de servicio, ejecute el siguiente comando. Reemplace por <YOUR-SERVICE-PRINCIPAL-NAME>
el nombre de la entidad de servicio.
az ad sp delete --id <YOUR-SERVICE-PRINCIPAL-NAME>
Código de ejemplo
Pasos siguientes
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de