Azure-resourcegroepen beheren met de TypeScript-functie-API
In deze zelfstudie maakt u een lokale TypeScript Azure Function-app met API's voor het beheren van Azure-resourcegroepen en het implementeren van de app in Azure.
Functies en functionaliteit:
- Lokaal TypeScript Azure Function-app-project maken in Visual Studio Code
- Standaardcode voor de functie-API maken in Visual Studio Code
- Implementeren naar Azure Functions vanuit Visual Studio Code
- Service-principal maken met Azure CLI
- Lokale en externe toepassingsinstellingen configureren met Visual Studio Code
- DefaultAzureCredential gebruiken in zowel lokale als externe omgevingen voor verbindingen zonder wachtwoord
- Azure Identity en Azure Resource Management SDK's gebruiken om Azure-resources te beheren
- Gebruik uw lokale API's en cloud-API's om resourcegroepen in uw abonnement te maken, te verwijderen en weer te geven
Hoewel de broncode is geschreven met TypeScript, is de broncode eenvoudig. Als u vertrouwd bent met moderne JavaScript met behulp van async/await, zal de code u bekend zijn.
Een bestaand Azure-abonnement maken of gebruiken
U hebt een Azure-gebruikersaccount met een actief abonnement nodig. Maak gratis een account.
Vereisten
- Node.js LTS 18+ en npm geïnstalleerd op uw lokale computer. De versie van uw lokale ontwikkelomgeving van Node.js moet overeenkomen met een van de beschikbare cloudruntimeversies van Azure Function.
- Visual Studio Code is geïnstalleerd op uw lokale computer.
- Azure Function-extensie v1.10.4 of hoger.
- Azure Functions Core Tools v4.0.5095 of hoger
- Azure Cloud Shell of Azure CLI geïnstalleerd op uw lokale computer.
Toepassingsarchitectuur
De app biedt de volgende API-eindpunten.
Wijze | URL | Beschrijving |
---|---|---|
POST,DELETE | http://localhost:7071/api/resourcegroup | Een resourcegroep toevoegen of verwijderen. Voeg tags (sleutel-waardeparen) toe om het doel van de groep later te identificeren. |
GET | http://localhost:7071/api/resourcegroups | Geef alle resourcegroepen in het abonnement weer. |
GET | http://localhost:7071/api/resources | Geef alle resources in een abonnement of resourcegroep weer. |
Hoewel deze eindpunten openbaar zijn, moet u uw API-eindpunten beveiligen met verificatie en autorisatie voordat u implementeert in uw liveomgeving.
Deze app is beperkt tot een abonnement omdat dit het bereik is dat is opgegeven bij het maken van de service-principal.
1. Uw omgeving voorbereiden
U moet uw lokale en cloudomgevingen voorbereiden om de Azure Identity SDK te kunnen gebruiken.
Aanmelden bij Azure CLI
Meld u in een bash-terminal met de volgende opdracht aan bij de Azure CLI:
az login
id van Azure-abonnement ophalen
Haal in een bash-terminal uw abonnementen op en zoek de abonnements-id die u wilt gebruiken. De volgende query retourneert de abonnements-id, de abonnementsnaam en de tenant-id, gesorteerd op abonnementsnaam.
az account list --query "sort_by([].{Name:name, SubscriptionId:id, TenantId:tenantId}, &Name)" --output table
Kopieer de abonnements-id naar het vorige tijdelijke bestand. U hebt deze instelling later nodig.
Een Azure-service-principal maken
Een Azure-service-principal biedt toegang tot Azure zonder dat u uw persoonlijke gebruikersreferenties hoeft te gebruiken. Voor deze zelfstudie kan de service-principal zowel in uw lokale als in de cloudomgeving worden gebruikt. In een bedrijfsomgeving wilt u afzonderlijke service-principals voor elke omgeving.
Bepaal de indeling van een service-principalnaam, zodat u de service-principal later eenvoudig kunt vinden. Verschillende indelingsideeën zijn bijvoorbeeld:
- Uw project en eigenaar:
resource-management-john-smith
. - Uw afdeling en datum:
IT-2021-September
- Een unieke id:
00000000-0000-0000-0000-000000000000
- Uw project en eigenaar:
Maak in een bash-terminal uw service-principal met az ad sp create-for-rbac. Vervang door
<SUBSCRIPTION-ID>
uw abonnements-id.az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME --role Contributor --scopes /subscriptions/<SUBSCRIPTION-ID>
Kopieer de volledige uitvoerresultaten naar een tijdelijk bestand. U hebt deze instellingen later nodig.
{ "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. Lokale Azure Function-app maken in Visual Studio Code
Maak een Azure Function-app in Visual Studio Code om Azure-resourcegroepen te beheren.
Functie-app maken
Visual Studio Code gebruiken om een lokale functie-app te maken.
Maak en wijzig in een bash-terminal in een nieuwe map:
mkdir my-function-app && cd my-function-app
Open Visual Studio Code in een bash-terminal:
code .
Open het opdrachtenpalet van Visual Studio Code: Ctrl + Shift + p.
Voer
Azure Functions: create new project
in. Gebruik de volgende tabel om de prompts te voltooien:Prompt Weergegeven als Selecteer de map die uw functieproject bevat Selecteer de standaardmap (huidige) Een taal selecteren Selecteer TypeScript. Een TypeScript-programmeermodel selecteren Model V4 selecteren (preview) Selecteer een sjabloon voor de eerste functie van uw project Selecteer HTTP-trigger. Nieuwe HTTP-trigger maken Voer de API-naam van resourcegroups
.Autorisatieniveau Selecteer anoniem. Als u na dit artikel doorgaat met dit project, wijzigt u het autorisatieniveau in de functie. Meer informatie over autorisatie op functieniveau. De standaard voor het project wordt gemaakt en de afhankelijkheden worden geïnstalleerd.
Instellingen voor service-principal toevoegen aan local.settings.json-bestand
Open het bestand in de hoofdmap van het
./local.settings.json
project en voeg de sectie VALUES toe met de vijf volgende omgevingsvariabelen.{ "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" } }
Raadpleeg uw instellingen uit de vorige sectie om de waarden toe te voegen. Deze omgevingsvariabelen zijn VEREIST voor het gebruik van DefaultAzureCredential voor de context.
AZURE_TENANT_ID
:tenant
uit de bovenstaande uitvoer van de service-principal.AZURE_CLIENT_ID
:appId
uit de bovenstaande uitvoer van de service-principal.AZURE_CLIENT_SECRET
:password
uit de bovenstaande uitvoer van de service-principal.
U moet ook de abonnements-id instellen. Het is vereist om de Azure SDK te gebruiken voor resourcebeheer.
AZURE_SUBSCRIPTION_ID
: Uw standaardabonnement met uw resourcegroepen.
Dit local.settings.json
bestand wordt genegeerd door uw lokale Git , zodat u het niet per ongeluk doorvoert in uw broncode.
NPM-afhankelijkheden installeren voor Azure Identity and Resource Management
Installeer in een geïntegreerde bash-terminal van Visual Studio Code de Azure SDK-afhankelijkheden voor Azure Identity and Resource Management.
npm install @azure/identity @azure/arm-resources
Alle resourcegroepen in abonnement weergeven met JavaScript
Open het
./src/functions/resourcegroups.ts
bestand en vervang de inhoud door het volgende: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 });
Dit bestand reageert op API-aanvragen
/api/resourcegroups
en retourneert een lijst met alle resourcegroepen in het abonnement.Maak een submap met
src
de naam enlib
maak een nieuw bestand in die map met de naamazure-resource-groups.ts
.Kopieer de volgende code naar het
./src/lib/azure-resource-groups.ts
bestand:// 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 ); };
Dit bestand voltooit het volgende:
- Hiermee haalt u de abonnements-id op
- Hiermee maakt u de DefaultAzureCredential-context
- Hiermee maakt u de ResourceManagementClient die is vereist voor het gebruik van de Resource Management SDK.
- Hiermee haalt u alle resourcegroepen in het abonnement op.
Maak een nieuw bestand in de map met de
./src/lib
naamenvironment-vars.ts
en kopieer de volgende code naar dat bestand.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; };
Dit bestand controleert de omgevingsvariabelen voordat de abonnements-id wordt geretourneerd.
Maak een nieuw bestand in de map met de
./src/lib
naamerror.ts
en kopieer de volgende code naar dat bestand.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) }; } }
Dit bestand retourneert een 500-fout met het foutbericht. De stack wordt geretourneerd als de
NODE_ENV
variabele niet is ingesteld opproduction
.
Lokale functies testen
Voer in de geïntegreerde Visual Studio Code-terminal het lokale project uit:
npm start
Wacht tot de geïntegreerde bash-terminal de URL van de actieve functie weergeeft.
Open een tweede geïntegreerde bash-terminal in Visual Studio Code, Ctrl + Shift + 5 en gebruik de volgende GET cURL-opdracht om de API te gebruiken:
curl http://localhost:7071/api/resourcegroups
Als u veel resourcegroepen in uw abonnement hebt, kunt u de uitvoer naar een bestand doorsluisen voor een eenvoudigere beoordeling.
curl http://localhost:7071/api/resourcegroups > resourcegroups.json
Het antwoord bevat
subscriptionId
en eenlist
van alle resourcegroepen in dat abonnement.{ "subscriptionId": "ABC123", "list": [ { "id": "/subscriptions/ABC123/resourceGroups/vmagelo-cloudshell", "name": "jsmith-cloudshell", "type": "Microsoft.Resources/resourceGroups", "properties": { "provisioningState": "Succeeded" }, "location": "westeurope" }, ... REMOVED FOR BREVITY ... ] }
Probleemoplossing
Als u dit artikel niet kunt voltooien, raadpleegt u de volgende tabel voor problemen. Als uw probleem niet wordt vermeld in de tabel, opent u een probleem op deze documentatiepagina.
Probleem | Herstellen |
---|---|
De app is niet gestart. | Bekijk de fouten. Zorg ervoor dat u de vereiste afhankelijkheden hebt geïnstalleerd. |
De app is gestart, maar u kunt geen 200-antwoord krijgen. | Zorg ervoor dat de curl-opdracht wordt aangevraagd bij de juiste lokale route. |
De API heeft een 200-antwoord geretourneerd, maar er zijn geen resultaten geretourneerd. | Gebruik de Visual Studio Code-extensie voor Azure-resources om te controleren of uw abonnement resourcegroepen bevat. Als u geen resourcegroepen ziet, hoeft u zich geen zorgen te maken. In deze zelfstudie wordt een API toegevoegd voor het maken en verwijderen van resourcegroepen in uw abonnement. Deze API wordt toegevoegd na de eerste implementatie van de broncode in Azure, zodat u leert hoe u uw code opnieuw kunt implementeren. |
3. Cloudgebaseerde Azure Function-app maken
Selecteer in Visual Studio Code het Azure-pictogram om Azure Explorer te openen.
Selecteer het + pictogram om een nieuwe Azure Function-app te maken in de Azure-cloud.
Selecteer Functie-app maken in Azure.
Voer een wereldwijd unieke naam in voor de nieuwe functie-app. De naam moet uniek zijn in alle Azure-functies. Bijvoorbeeld:
jsmith-rg-management
.Selecteer dezelfde Node.js 18+ LTS-runtime die u hebt geselecteerd toen u de lokale functie-app maakte.
Selecteer een geografische locatie dicht bij u in de buurt, zoals VS - west 3.
Wacht totdat de resource is gemaakt. U kunt het Azure- activiteitenlogboek bekijken voor meer informatie.
4. Cloudgebaseerde Azure Function-app configureren
U moet uw Azure-app-instellingen configureren om verbinding te maken met de Azure Function-app. Lokaal bevinden deze instellingen zich in uw local.settings.json
bestand. Met dit proces worden deze waarden aan uw cloud-app toegevoegd.
Vouw in Visual Studio Code in Azure Explorer, in de sectie Resources, de functie-app uit en selecteer vervolgens uw functie-app.
Klik met de rechtermuisknop op De toepassing Instellingen en selecteer Nieuwe instelling toevoegen.
Voeg de vier waarden van uw
local.settings.json
met exact dezelfde naam en waarden toe.AZURE_TENANT_ID
:tenant
uit de bovenstaande uitvoer van de service-principal.AZURE_CLIENT_ID
:appId
uit de bovenstaande uitvoer van de service-principal.AZURE_CLIENT_SECRET
:password
uit de bovenstaande uitvoer van de service-principal.AZURE_SUBSCRIPTION_ID
: Uw standaardabonnement met uw resourcegroepen.AzureWebJobsFeatureFlags
:EnableWorkerIndexing
5. Resource Manager-functie-app implementeren
Implementeer een Azure Function-app in Visual Studio Code om Azure-resourcegroepen te beheren.
Visual Studio Code-extensie gebruiken om te implementeren in de hostingomgeving
Open in VS Code het
local.settings.json
bestand zodat het zichtbaar is. Hierdoor worden de volgende stappen voor het kopiëren van deze namen en waarden eenvoudiger.Selecteer het Azure-logo om Azure Explorer te openen en selecteer vervolgens onder Functions het cloudpictogram om uw app te implementeren.
U kunt ook implementeren door het opdrachtenpalet te openen met Ctrl + Shift + p, de Azure Functions in te voeren
deploy to function app
en uit te voeren: implementeren naar functie-app-opdracht.Selecteer Implementeren in functie-app.
Selecteer de naam van de functie-app die u in de vorige sectie hebt gemaakt.
Wanneer u wordt gevraagd of u zeker weet dat u wilt implementeren, selecteert u Implementeren.
In het deelvenster VS Code-uitvoer voor Azure Functions wordt de voortgang weergegeven. Bij de implementatie wordt de hele Functions-toepassing geïmplementeerd, zodat wijzigingen in alle afzonderlijke functies tegelijk worden geïmplementeerd.
Controleren of de Functions-app beschikbaar is in de browser
Terwijl u zich nog in Visual Studio Code bevindt, gebruikt u Azure Functions Explorer, vouwt u het knooppunt voor uw Azure-abonnement uit, vouwt u het knooppunt voor uw Functions-app uit en vouwt u Functions uit (alleen-lezen). Klik met de rechtermuisknop op de functienaam en selecteer Functie-URL kopiëren:
Plak de URL in een browser en druk op Enter om de lijst met resourcegroepen aan te vragen vanuit de cloud-API.
6. API's toevoegen aan functie-app en opnieuw implementeren in Azure
Voeg de volgende API's toe en implementeer vervolgens uw Azure Function-app opnieuw in Visual Studio Code:
- Resourcegroepen toevoegen en verwijderen
- Resources weergeven in resourcegroep of abonnement.
Op dit moment in de zelfstudie hebt u een lokale functie-app met één API gemaakt om de resourcegroepen van uw abonnement weer te geven en u die app in Azure hebt geïmplementeerd. Als Azure-ontwikkelaar kunt u resourcegroepen maken of verwijderen als onderdeel van uw procesautomatiseringspijplijn.
Resourcegroup-API maken voor uw functie-app
Gebruik de Visual Studio Code-extensie voor Azure Functions om de TypeScript-bestanden toe te voegen aan uw functie-app om resourcegroepen te maken en te verwijderen.
Open het opdrachtenpalet van Visual Studio Code: Ctrl + Shift + p.
Druk vervolgens op Enter
Azure Functions: Create Function
om het proces te starten.Gebruik de volgende tabel om de /api/resourcegroup-API te maken:
Prompt Weergegeven als Selecteer een sjabloon voor uw functie HTTP-trigger Geef een functienaam op resourcegroup
Autorisatieniveau Selecteer anoniem. Als u doorgaat met dit project, wijzigt u het autorisatieniveau in de functie. Meer informatie over autorisatie op functieniveau. Open het
./src/functions/resourcegroup.ts
bestand en vervang het hele bestand door de volgende broncode.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 });
Het
./src/lib/azure-resource-groups.ts
bestand bevat al de code om resourcegroepen toe te voegen en te verwijderen.
Resources-API maken voor uw functie-app
Gebruik de Visual Studio Code-extensie voor Azure Functions om de TypeScript-bestanden toe te voegen aan uw functie-app om resources in een resourcegroep weer te geven.
Open het opdrachtenpalet van Visual Studio Code: Ctrl + Shift + p.
Druk vervolgens op Enter
Azure Functions: Create Function
om het proces te starten.Gebruik de volgende tabel om de /api/resources-API te maken:
Prompt Weergegeven als Selecteer een sjabloon voor uw functie HTTP-trigger Geef een functienaam op resources
Autorisatieniveau Selecteer anoniem. Als u doorgaat met dit project, wijzigt u het autorisatieniveau in de functie. Meer informatie over autorisatie op functieniveau. Open het
./src/functions/resources.ts
bestand en vervang het hele bestand door de volgende broncode.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 });
Maak het
./src/lib/azure-resource.ts
bestand en kopieer de volgende code erin om de resources in een resourcegroep weer te geven.// 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 }; };
Uw lokale functie-app starten en de nieuwe API testen
Voer in de geïntegreerde Visual Studio Code-terminal het lokale project uit:
npm start
Wacht tot de geïntegreerde bash-terminal de URL van de actieve functie weergeeft.
Gebruik de volgende curl-opdrachten in een andere geïntegreerde bash-terminal om uw API aan te roepen om een resourcegroep toe te voegen aan uw abonnement. Wijzig de naam van de resourcegroep om uw eigen naamconventies te gebruiken.
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"}}'
Gebruik de volgende curl-opdracht om de nieuwe resourcegroep in uw abonnement weer te geven.
curl http://localhost:7071/api/resource-groups
Gebruik de volgende curl-opdracht om de resourcegroep te verwijderen die u zojuist hebt toegevoegd.
curl -X DELETE 'http://localhost:7071/api/resourcegroup?name=my-test-1' \ -H 'Content-Type: application/json'
Uw functie-app opnieuw implementeren met nieuwe API's naar Azure
Implementeer in VS Code door het opdrachtenpalet te openen met Ctrl + Shift + p, de Azure Functions in te voeren
deploy to function app
en uit te voeren: implementeren in functie-app-opdracht.Selecteer uw functie-app in de lijst met apps.
Selecteer Implementeren in het pop-upvenster.
Wacht totdat de implementatie is voltooid.
Functie-API's verifiëren met browser
Gebruik de vorige cURL-opdrachten, waarbij u het localhost-adres vervangt door http://localhost:7071
de naam van uw Azure Function-resource, zoals https://myfunction.azurewebsites.net
.
7. De logboeken van uw functie-app weergeven en er query's op uitvoeren
Azure Function-app-logboeken weergeven en er query's op uitvoeren in Azure Portal.
Query's uitvoeren op uw Azure-functielogboeken
Gebruik Azure Portal om uw functielogboeken weer te geven en er query's op uit te voeren.
Selecteer in VS Code het Azure-logo om Azure Explorer te openen en klik vervolgens onder Functions met de rechtermuisknop op uw functie-app en selecteer Vervolgens Openen in portal.
Hiermee opent u Azure Portal naar uw Azure-functie.
Selecteer Application Insights in de Instellingen en selecteer vervolgens Application Insights-gegevens weergeven.
Met deze koppeling gaat u naar uw afzonderlijke metrische gegevensresource die voor u is gemaakt bij het maken van uw Azure-functie met VS Code.
Selecteer Logboeken in de sectie Bewaking. Als er een pop-upvenster Query's wordt weergegeven, selecteert u de X in de rechterbovenhoek van het pop-upvenster om het venster te sluiten.
Dubbelklik in het deelvenster Schema en Filter op het tabblad Tabellen op de tabel Traceringen .
Hiermee wordt de Kusto-query
traces
ingevoerd in het queryvenster.Bewerk de query om te zoeken naar API-aanroepen:
traces | where message startswith "Executing "
Selecteer Uitvoeren.
Als in het logboek geen resultaten worden weergegeven, kan het zijn dat er een paar minuten vertraging is tussen de HTTP-aanvraag naar de Azure-functie en de beschikbaarheid van logboeken in Kusto. Wacht enkele minuten en voer de query opnieuw uit.
Omdat er een Application Insights-resource voor u is toegevoegd toen u de Azure Function-app maakte, hoeft u niets extra te doen om deze logboekgegevens op te halen:
- De functie-app heeft Application Insights voor u toegevoegd.
- Het queryhulpprogramma is opgenomen in Azure Portal.
- U kunt in
traces
plaats van te leren hoe u een Kusto-query schrijft om zelfs de minimale informatie uit uw logboeken op te halen.
8. Azure-resources opschonen
De resourcegroep verwijderen
Selecteer in VS Code het Azure-logo om Azure Explorer te openen en klik vervolgens onder Functions met de rechtermuisknop op uw functie-app en selecteer Vervolgens Openen in portal. Hiermee opent u Azure Portal naar uw Azure-functie.
Zoek en selecteer in de sectie Overzicht de naam van de resourcegroep. Met deze actie gaat u naar de resourcegroep in Azure Portal.
Op de pagina resourcegroep worden alle resources weergegeven die aan deze zelfstudie zijn gekoppeld.
Selecteer Resourcegroep verwijderen in het bovenste menu.
Voer in het zijmenu de naam van de resourcegroep in en selecteer Verwijderen.
De service-principal verwijderen
Voer de volgende opdracht uit om de service-principal te verwijderen. Vervang door <YOUR-SERVICE-PRINCIPAL-NAME>
de naam van uw service-principal.
az ad sp delete --id <YOUR-SERVICE-PRINCIPAL-NAME>
Voorbeeldcode
Volgende stappen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor