Share via


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

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

  1. 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
    
  2. 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.

  1. 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
  2. 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>
    
  3. 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.

  1. Maak en wijzig in een bash-terminal in een nieuwe map:

    mkdir my-function-app && cd my-function-app
    
  2. Open Visual Studio Code in een bash-terminal:

    code .
    
  3. Open het opdrachtenpalet van Visual Studio Code: Ctrl + Shift + p.

  4. 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

  1. 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"
      }
    }
    
  2. 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.
  3. 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

  1. 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.

  2. Maak een submap met src de naam en lib maak een nieuw bestand in die map met de naam azure-resource-groups.ts.

  3. 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.
  4. Maak een nieuw bestand in de map met de ./src/lib naam environment-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.

  5. Maak een nieuw bestand in de map met de ./src/lib naam error.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 op production.

Lokale functies testen

  1. Voer in de geïntegreerde Visual Studio Code-terminal het lokale project uit:

    npm start
    
  2. Wacht tot de geïntegreerde bash-terminal de URL van de actieve functie weergeeft.

    Gedeeltelijke schermopname van de geïntegreerde bash-terminal van Visual Studio Code wanneer de Azure-functie lokaal wordt uitgevoerd en de lokale URL voor de API's in de functie-app weergeeft.

  3. 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
    
  4. Het antwoord bevat subscriptionId en een list 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

  1. Selecteer in Visual Studio Code het Azure-pictogram om Azure Explorer te openen.

  2. Selecteer het + pictogram om een nieuwe Azure Function-app te maken in de Azure-cloud.

    Schermopname van Azure Explorer van Visual Studio Code met het pictogram van de Azure Function-app gemarkeerd.

  3. Selecteer Functie-app maken in Azure.

  4. Voer een wereldwijd unieke naam in voor de nieuwe functie-app. De naam moet uniek zijn in alle Azure-functies. Bijvoorbeeld: jsmith-rg-management.

  5. Selecteer dezelfde Node.js 18+ LTS-runtime die u hebt geselecteerd toen u de lokale functie-app maakte.

  6. Selecteer een geografische locatie dicht bij u in de buurt, zoals VS - west 3.

  7. Wacht totdat de resource is gemaakt. U kunt het Azure- activiteitenlogboek bekijken voor meer informatie.

    Schermopname van het Azure-activiteitenlogboek van Visual Studio Code met de status van het maken van resources.

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.

  1. Vouw in Visual Studio Code in Azure Explorer, in de sectie Resources, de functie-app uit en selecteer vervolgens uw functie-app.

  2. Klik met de rechtermuisknop op De toepassing Instellingen en selecteer Nieuwe instelling toevoegen.

  3. 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

Gedeeltelijke schermopname van Azure Explorer van Visual Studio Code met de app-instellingen van de externe/cloudfunctie.

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

  1. 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.

  2. Selecteer het Azure-logo om Azure Explorer te openen en selecteer vervolgens onder Functions het cloudpictogram om uw app te implementeren.

    Schermopname van het lokale werkruimtegebied van Visual Studio Code met het pictogram voor cloudimplementatie gemarkeerd.

    U kunt ook implementeren door het opdrachtenpalet te openen met Ctrl + Shift + p, de Azure Functions in te voeren deploy to function appen uit te voeren: implementeren naar functie-app-opdracht.

  3. Selecteer Implementeren in functie-app.

  4. Selecteer de naam van de functie-app die u in de vorige sectie hebt gemaakt.

  5. Wanneer u wordt gevraagd of u zeker weet dat u wilt implementeren, selecteert u Implementeren.

  6. 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

  1. 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:

    Gedeeltelijke schermopname van Azure Explorer van Visual Studio Code waarin wordt weergegeven waar de URL van de functie moet worden gekopieerd.

  2. 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.

  1. Open het opdrachtenpalet van Visual Studio Code: Ctrl + Shift + p.

  2. Druk vervolgens op Enter Azure Functions: Create Function om het proces te starten.

  3. 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.
  4. 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
    });
    
  5. 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.

  1. Open het opdrachtenpalet van Visual Studio Code: Ctrl + Shift + p.

  2. Druk vervolgens op Enter Azure Functions: Create Function om het proces te starten.

  3. 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.
  4. 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
    });
    
  5. 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

  1. Voer in de geïntegreerde Visual Studio Code-terminal het lokale project uit:

    npm start
    
  2. Wacht tot de geïntegreerde bash-terminal de URL van de actieve functie weergeeft.

    Gedeeltelijke schermopname van de geïntegreerde bash-terminal van Visual Studio Code wanneer de Azure-functie lokaal wordt uitgevoerd en de lokale URL's voor de API's in de functie-app weergeeft.

  3. 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"}}'
    
  4. Gebruik de volgende curl-opdracht om de nieuwe resourcegroep in uw abonnement weer te geven.

    curl http://localhost:7071/api/resource-groups
    
  5. 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

  1. Implementeer in VS Code door het opdrachtenpalet te openen met Ctrl + Shift + p, de Azure Functions in te voeren deploy to function appen uit te voeren: implementeren in functie-app-opdracht.

  2. Selecteer uw functie-app in de lijst met apps.

  3. Selecteer Implementeren in het pop-upvenster.

  4. 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.

  1. 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.

  2. Selecteer Application Insights in de Instellingen en selecteer vervolgens Application Insights-gegevens weergeven.

    Schermopname van de browser met menuopties. 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.

  3. 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.

  4. Dubbelklik in het deelvenster Schema en Filter op het tabblad Tabellen op de tabel Traceringen .

    Hiermee wordt de Kusto-querytraces ingevoerd in het queryvenster.

  5. Bewerk de query om te zoeken naar API-aanroepen:

    traces 
    | where message startswith "Executing "
    
  6. 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.

    Schermopname van azure Portal Kusto-queryresultaat voor traceringstabel.

    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

  1. 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.

  2. Zoek en selecteer in de sectie Overzicht de naam van de resourcegroep. Met deze actie gaat u naar de resourcegroep in Azure Portal.

  3. Op de pagina resourcegroep worden alle resources weergegeven die aan deze zelfstudie zijn gekoppeld.

  4. Selecteer Resourcegroep verwijderen in het bovenste menu.

  5. 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