Megosztás a következőn keresztül:


Azure-erőforráscsoportok kezelése a TypeScript függvény API-val

Ebben az oktatóanyagban egy helyi TypeScript Azure-függvényalkalmazást fog létrehozni API-kkal az Azure-erőforráscsoportok kezeléséhez és az alkalmazás Azure-ban való üzembe helyezéséhez.

Funkciók és funkciók:

  • Helyi TypeScript Azure-függvényalkalmazás-projekt létrehozása a Visual Studio Code-ban
  • Függvény API-sablonkód létrehozása a Visual Studio Code-ban
  • Üzembe helyezés az Azure Functionsben a Visual Studio Code-ból
  • Egyszerű szolgáltatás létrehozása az Azure parancssori felületével
  • Helyi és távoli alkalmazásbeállítások konfigurálása a Visual Studio Code-tal
  • A DefaultAzureCredential használata helyi és távoli környezetekben is jelszó nélküli kapcsolatokhoz
  • Azure-erőforrások kezelése az Azure Identity és az Azure Resource Management SDK-k használatával
  • Erőforráscsoportok létrehozása, törlése és listázása helyi és felhőalapú API-k használatával az előfizetésben

Míg a forráskód TypeScripttel van megírva, a forráskód egyszerű. Ha jól ismeri a modern JavaScriptet az async/await használatával, a kód ismerős lesz.

Meglévő Azure-előfizetés létrehozása vagy használata

Aktív előfizetéssel rendelkező Azure-felhasználói fiókra lesz szüksége. Hozzon létre egyet ingyen.

Előfeltételek

Alkalmazásarchitektúra

Az alkalmazás a következő API-végpontokat biztosítja.

Metódus URL-cím Leírás
POST,DELETE http://localhost:7071/api/resourcegroup Erőforráscsoport hozzáadása vagy törlése. Hozzáadáskor adjon hozzá címkéket (kulcs/érték párok) a csoport céljának későbbi azonosításához.
KAP http://localhost:7071/api/resourcegroups Az előfizetésben lévő összes erőforráscsoport listázása.
KAP http://localhost:7071/api/resources Az előfizetésben vagy erőforráscsoportban lévő összes erőforrás listázása.

Bár ezek a végpontok nyilvánosak, az élő környezetben való üzembe helyezés előtt hitelesítéssel és engedélyezéssel kell biztosítania az API-végpontokat.

Ez az alkalmazás előfizetésre korlátozódik, mert ez a szolgáltatásnév létrehozásakor megadott hatókör.

1. A környezet előkészítése

Elő kell készítenie a helyi és a felhőbeli környezeteket az Azure Identity SDK használatára.

Bejelentkezés az Azure CLI-be

Bash-terminálban jelentkezzen be az Azure CLI-be a következő paranccsal:

az login

Az Azure-előfizetés azonosítóinak lekérése

  1. Egy bash-terminálban kérje le az előfizetéseit, és keresse meg a használni kívánt előfizetés-azonosítót. Az alábbi lekérdezés az előfizetés azonosítóját, az előfizetés nevét és a bérlőazonosítót adja vissza az előfizetés neve szerint rendezve.

    az account list --query "sort_by([].{Name:name, SubscriptionId:id, TenantId:tenantId}, &Name)" --output table
    
  2. Másolja az előfizetés azonosítóját az előző ideiglenes fájlba. Erre a beállításra később lesz szüksége.

Azure-szolgáltatásnév létrehozása

Egy Azure-szolgáltatásnév anélkül biztosít hozzáférést az Azure-hoz, hogy személyes felhasználói hitelesítő adatait kellene használnia. Ebben az oktatóanyagban a szolgáltatásnév mind a helyi, mind a felhőbeli környezetben használható. Vállalati környezetben minden környezethez külön szolgáltatásnevekre van szüksége.

  1. Határozza meg a szolgáltatásnév névformátumát, hogy később könnyen megtalálhassa a szolgáltatásnevet. Számos formátumötlet például a következő:

    • A projekt és a tulajdonos: resource-management-john-smith.
    • Az Ön részlege és dátuma: IT-2021-September
    • Egyedi azonosító: 00000000-0000-0000-0000-000000000000
  2. Bash-terminálban hozza létre szolgáltatásnevét az az ad sp create-for-rbac használatával. Cserélje le <SUBSCRIPTION-ID> az előfizetés azonosítóját.

    az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME --role Contributor --scopes /subscriptions/<SUBSCRIPTION-ID>
    
  3. Másolja a teljes kimeneti eredményt egy ideiglenes fájlba. Ezekre a beállításokra később szüksége lesz.

    {
      "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. Helyi Azure-függvényalkalmazás létrehozása a Visual Studio Code-ban

Azure-függvényalkalmazás létrehozása a Visual Studio Code-ban az Azure-erőforráscsoportok kezeléséhez.

Függvényalkalmazás létrehozása

Helyi függvényalkalmazás létrehozása a Visual Studio Code használatával.

  1. Bash-terminálban hozzon létre és váltson át egy új könyvtárra:

    mkdir my-function-app && cd my-function-app
    
  2. Bash-terminálban nyissa meg a Visual Studio Code-ot:

    code .
    
  3. Nyissa meg a Visual Studio Code parancskatalógusát: Ctrl + Shift + p.

  4. Írja be Azure Functions: create new project. A következő táblázat segítségével fejezze be a kéréseket:

    Felszólítás Érték
    Válassza ki a függvényprojektet tartalmazó mappát Válassza ki az alapértelmezett (aktuális) könyvtárat
    Válasszon nyelvet Válassza a TypeScript lehetőséget.
    TypeScript programozási modell kiválasztása Modell V4 kiválasztása (előzetes verzió)
    Sablon kiválasztása a projekt első függvényéhez Válassza a HTTP-eseményindító lehetőséget.
    Új HTTP-eseményindító létrehozása Adja meg a következő API-nevét resourcegroups: .
    Engedélyszint Válassza a névtelen lehetőséget. Ha a cikk után folytatja ezt a projektet, módosítsa az engedélyezési szintet a függvényre. További információ a függvényszintű engedélyezésről.

    Létrejön a projektkazánlemez, és a függőségek telepítve vannak.

Egyszerű szolgáltatásbeállítások hozzáadása local.settings.json fájlhoz

  1. Nyissa meg a ./local.settings.json fájlt a projekt gyökérkönyvtárában, és adja hozzá a VALUES szakaszt az alábbi öt környezeti változóval.

    {
      "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. Az értékek hozzáadásához tekintse meg az előző szakasz beállításait. Ezek a környezeti változók KÖTELEZŐek ahhoz, hogy a környezet a DefaultAzureCredential értéket használja.

    • AZURE_TENANT_ID: tenant a szolgáltatásnév fenti kimenetéből.
    • AZURE_CLIENT_ID: appId a szolgáltatásnév fenti kimenetéből.
    • AZURE_CLIENT_SECRET: password a szolgáltatásnév fenti kimenetéből.
  3. Az előfizetés azonosítóját is be kell állítania. Az Azure SDK-t kell használnia az erőforrás-kezeléshez.

    • AZURE_SUBSCRIPTION_ID: Az erőforráscsoportokat tartalmazó alapértelmezett előfizetés.

Ezt local.settings.json a fájlt a helyi git szándékosan figyelmen kívül hagyja, így nem véglegesíti véletlenül a forráskódban.

NPM-függőségek telepítése az Azure Identity and Resource Managementhez

A Visual Studio Code integrált bash-termináljában telepítse az Azure Identity és az Erőforrás-kezelés Azure SDK-függőségeit.

npm install @azure/identity @azure/arm-resources

Az előfizetésben lévő összes erőforráscsoport listázása JavaScript használatával

  1. Nyissa meg a ./src/functions/resourcegroups.ts fájlt, és cserélje le a tartalmat a következőre:

    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
    });
    

    Ez a fájl válaszol az API-kérésekre, /api/resourcegroups és visszaadja az előfizetés összes erőforráscsoportjának listáját.

  2. Hozzon létre egy alkönyvtárat nevesített lib fájlbansrc, és hozzon létre egy új fájlt a névvel ellátott azure-resource-groups.tskönyvtárban.

  3. Másolja a következő kódot a ./src/lib/azure-resource-groups.ts fájlba:

    // 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
      );
    };
    

    Ez a fájl a következőket hajtja végre:

    • Lekéri az előfizetés azonosítóját
    • A DefaultAzureCredential környezet létrehozása
    • Létrehozza az Erőforrás-kezelési SDK használatához szükséges ResourceManagementClient-et.
    • Lekéri az előfizetés összes erőforráscsoportját.
  4. Hozzon létre egy új fájlt a ./src/lib névvel ellátott environment-vars.ts könyvtárban, és másolja a következő kódot a fájlba.

    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;
    };
    

    Ez a fájl az előfizetés-azonosító visszaadása előtt ellenőrzi a környezeti változókat.

  5. Hozzon létre egy új fájlt a ./src/lib névvel ellátott error.ts könyvtárban, és másolja a következő kódot a fájlba.

    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) };
      }
    }
    

    Ez a fájl egy 500-os hibát ad vissza a hibaüzenettel. A verem akkor lesz visszaadva, ha a NODE_ENV változó nincs beállítva production.

Helyi függvények tesztelése

  1. A Visual Studio Code integrált termináljában futtassa a helyi projektet:

    npm start
    
  2. Várjon, amíg az integrált bash-terminál megjeleníti a futó függvény URL-címét.

    Részleges képernyőkép a Visual Studio Code integrált Bash-termináljáról, amikor az Azure-függvény helyileg fut, és megjeleníti az API-k helyi URL-címét a függvényalkalmazásban.

  3. Nyisson meg egy második integrált Bash-terminált a Visual Studio Code-ban, a Ctrl Shift 5 billentyűkombinációt + + , és használja a következő GET cURL parancsot az API használatához:

    curl http://localhost:7071/api/resourcegroups
    

    Ha az előfizetésben számos erőforráscsoport található, érdemes lehet a kimenetet egy fájlba csövezni a könnyebb áttekintés érdekében.

    curl http://localhost:7071/api/resourcegroups > resourcegroups.json
    
  4. A válasz tartalmazza subscriptionId az előfizetés összes erőforráscsoportját és egy list részét.

    {
      "subscriptionId": "ABC123",
      "list": [
            {
              "id": "/subscriptions/ABC123/resourceGroups/vmagelo-cloudshell",
              "name": "jsmith-cloudshell",
              "type": "Microsoft.Resources/resourceGroups",
              "properties": {
                "provisioningState": "Succeeded"
              },
              "location": "westeurope"
            },
            ... REMOVED FOR BREVITY ...
        ]
    }
    

Hibaelhárítás

Ha nem tudta befejezni ezt a cikket, tekintse meg a következő táblázatot a problémákért. Ha a probléma nem szerepel a táblázatban, nyisson meg egy problémát ezen a dokumentációs lapon.

Probléma Javítás
Az alkalmazás nem indult el. Tekintse át a hibákat. Győződjön meg arról, hogy telepítette a szükséges függőségeket.
Az alkalmazás elindult, de nem kaphat 200 választ. Győződjön meg arról, hogy a curl parancs a megfelelő helyi útvonalról kéri.
Az API 200-ra adott vissza választ, de nem adott eredményül. Az Azure-erőforrásokhoz készült Visual Studio Code-bővítmény használatával ellenőrizze, hogy az előfizetés rendelkezik-e erőforráscsoportokkal. Ha nem lát erőforráscsoportokat, ne aggódjon. Ez az oktatóanyag hozzáad egy API-t az erőforráscsoportok létrehozásához és törléséhez az előfizetésben. Ez az API a forráskód Azure-ba való első üzembe helyezése után lesz hozzáadva, így megtudhatja, hogyan helyezheti üzembe újra a kódot.

3. Felhőalapú Azure-függvényalkalmazás létrehozása

  1. A Visual Studio Code-ban válassza az Azure-ikont az Azure Explorer megnyitásához.

  2. + Az ikont választva új Azure-függvényalkalmazást hozhat létre az Azure-felhőben.

    Képernyőkép a Visual Studio Code Azure Exploreréről, kiemelt Azure-függvényalkalmazás ikonnal.

  3. Válassza a Függvényalkalmazás létrehozása az Azure-ban lehetőséget.

  4. Adjon meg egy globálisan egyedi nevet az új függvényalkalmazásnak. A névnek minden Azure-függvényben egyedinek kell lennie. Például: jsmith-rg-management.

  5. Válassza ki ugyanazt a Node.js 18+ LTS-futtatókörnyezetet , amelyet a helyi függvényalkalmazás létrehozásakor választott ki.

  6. Válasszon egy Önhöz közeli földrajzi helyet, például az USA 3. nyugati régióját.

  7. Várjon, amíg létrejön az erőforrás. A részletekért tekintse meg az Azure: Tevékenységnaplót .

    Képernyőkép a Visual Studio Code Azure-tevékenységnaplóról, amelyen az erőforrás-létrehozás állapota látható.

4. Felhőalapú Azure-függvényalkalmazás konfigurálása

Konfigurálnia kell az Azure-alkalmazás beállításait az Azure-függvényalkalmazáshoz való csatlakozáshoz. Ezek a beállítások helyileg a fájlban local.settings.json találhatók. Ez a folyamat hozzáadja ezeket az értékeket a felhőalkalmazáshoz.

  1. A Visual Studio Code-ban az Azure Explorer Erőforrások szakaszában bontsa ki a Függvényalkalmazást, majd válassza ki a függvényalkalmazást.

  2. Kattintson a jobb gombbal az Alkalmazás Gépház elemre, és válassza az Új beállítás hozzáadása lehetőséget.

  3. Adja hozzá a négy értéket a saját nevével local.settings.json és értékeivel.

    • AZURE_TENANT_ID: tenant a szolgáltatásnév fenti kimenetéből.
    • AZURE_CLIENT_ID: appId a szolgáltatásnév fenti kimenetéből.
    • AZURE_CLIENT_SECRET: password a szolgáltatásnév fenti kimenetéből.
    • AZURE_SUBSCRIPTION_ID: Az erőforráscsoportokat tartalmazó alapértelmezett előfizetés.
    • AzureWebJobsFeatureFlags:EnableWorkerIndexing

Részleges képernyőkép a Visual Studio Code Azure Exploreréről, amelyen a távoli/felhőbeli függvény alkalmazásbeállításai láthatók.

5. Resource Manager-függvényalkalmazás üzembe helyezése

Azure-függvényalkalmazás üzembe helyezése a Visual Studio Code-ban az Azure-erőforráscsoportok kezeléséhez.

A Visual Studio Code bővítmény használata az üzemeltetési környezetben való üzembe helyezéshez

  1. A VS Code-ban nyissa meg a local.settings.json fájlt, hogy látható legyen. Ez megkönnyíti a nevek és értékek másolásának következő lépéseit.

  2. Válassza az Azure-emblémát az Azure Explorer megnyitásához, majd a Functions területen válassza ki a felhő ikont az alkalmazás üzembe helyezéséhez.

    Képernyőkép a Visual Studio Code helyi munkaterületi területéről a felhőbeli üzembe helyezés ikon kiemelésével.

    Másik lehetőségként a Parancskatalógus ctrl shift + p billentyűkombinációval való megnyitásával, az Azure Functions: Üzembe helyezés függvényalkalmazásban parancs beírásával deploy to function appés futtatásával + is üzembe helyezhető.

  3. Válassza az Üzembe helyezés függvényalkalmazásban lehetőséget.

  4. Válassza ki az előző szakaszban létrehozott függvényalkalmazás nevét.

  5. Amikor a rendszer megkérdezi, hogy biztosan üzembe kívánja-e helyezni az üzembe helyezést, válassza az Üzembe helyezés lehetőséget.

  6. Az Azure Functions VS Code Output panelje megjeleníti az előrehaladást. Üzembe helyezéskor a teljes Functions-alkalmazás üzembe lesz helyezve, így az egyes függvények módosításai egyszerre lesznek üzembe helyezve.

Annak ellenőrzése, hogy a Functions alkalmazás elérhető-e a böngészőben

  1. Amíg a Visual Studio Code-ban van, használja az Azure Functions Explorert, bontsa ki az Azure-előfizetés csomópontját, bontsa ki a Functions-alkalmazás csomópontját, majd bontsa ki a Függvényeket (csak olvasható). Kattintson a jobb gombbal a függvény nevére, és válassza a Függvény URL-címének másolása lehetőséget:

    Részleges képernyőkép a Visual Studio Code Azure Exploreréről, amelyen látható, hogy hová másolja a függvény URL-címét.

  2. Illessze be az URL-címet egy böngészőbe, és az Enter billentyűt lenyomva kérje le az erőforráscsoport-listát a felhő API-ból.

6. API-k hozzáadása a függvényalkalmazáshoz, és ismételt üzembe helyezés az Azure-ban

Adja hozzá a következő API-kat, majd telepítse újra az Azure-függvényalkalmazást a Visual Studio Code-ban:

  • Erőforráscsoportok hozzáadása és törlése
  • Erőforrások listázása erőforráscsoportban vagy előfizetésben.

Az oktatóanyag ezen pontján létrehozott egy helyi függvényalkalmazást egy API-val az előfizetés erőforráscsoportjainak listázásához, és üzembe helyezte az alkalmazást az Azure-ban. Azure-fejlesztőként érdemes lehet erőforráscsoportokat létrehozni vagy törölni a folyamatautomatizálási folyamat részeként.

ResourceGroup API létrehozása a függvényalkalmazáshoz

Az Azure Functions Visual Studio Code bővítményével adja hozzá a TypeScript-fájlokat a függvényalkalmazáshoz erőforráscsoportok létrehozásához és törléséhez.

  1. Nyissa meg a Visual Studio Code parancskatalógusát: Ctrl + Shift + p.

  2. A folyamat megkezdéséhez nyomja le Azure Functions: Create Function az Enter billentyűt.

  3. Az /api/resourcegroup API létrehozásához használja az alábbi táblázatot:

    Felszólítás Érték
    Sablon kiválasztása a függvényhez HTTP-eseményindító
    Függvénynév megadása resourcegroup
    Engedélyszint Válassza a névtelen lehetőséget. Ha folytatja ezt a projektet, módosítsa az engedélyezési szintet a függvényre. További információ a függvényszintű engedélyezésről.
  4. Nyissa meg a ./src/functions/resourcegroup.ts teljes fájlt, és cserélje le a következő forráskódra.

    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. A ./src/lib/azure-resource-groups.ts fájl már tartalmazza az erőforráscsoportok hozzáadására és törlésére vonatkozó kódot.

Erőforrások API létrehozása a függvényalkalmazáshoz

Az Azure Functions Visual Studio Code bővítményével adja hozzá a TypeScript-fájlokat a függvényalkalmazáshoz az erőforráscsoport erőforrásainak listázásához.

  1. Nyissa meg a Visual Studio Code parancskatalógusát: Ctrl + Shift + p.

  2. A folyamat megkezdéséhez nyomja le Azure Functions: Create Function az Enter billentyűt.

  3. Az /api/resources API létrehozásához használja az alábbi táblázatot:

    Felszólítás Érték
    Sablon kiválasztása a függvényhez HTTP-eseményindító
    Függvénynév megadása resources
    Engedélyszint Válassza a névtelen lehetőséget. Ha folytatja ezt a projektet, módosítsa az engedélyezési szintet a függvényre. További információ a függvényszintű engedélyezésről.
  4. Nyissa meg a ./src/functions/resources.ts teljes fájlt, és cserélje le a következő forráskódra.

    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. Hozza létre a ./src/lib/azure-resource.ts fájlt, és másolja be a következő kódot az erőforráscsoport erőforrásainak listázásához.

    // 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
      };
    };
    

Indítsa el a helyi függvényalkalmazást, és tesztelje az új API-t

  1. A Visual Studio Code integrált termináljában futtassa a helyi projektet:

    npm start
    
  2. Várjon, amíg az integrált bash-terminál megjeleníti a futó függvény URL-címét.

    Részleges képernyőkép a Visual Studio Code integrált Bash-termináljáról, amikor az Azure-függvény helyileg fut, és megjeleníti az API-k helyi URL-címét a függvényalkalmazásban.

  3. Az alábbi curl-parancsokkal egy másik integrált Bash-terminálban hívhatja meg az API-t, hogy hozzáadjon egy erőforráscsoportot az előfizetéshez. Módosítsa az erőforráscsoport nevét saját elnevezési konvenciók használatára.

    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. Az alábbi curl paranccsal megtekintheti az előfizetésében szereplő új erőforráscsoportot.

    curl http://localhost:7071/api/resource-groups
    
  5. Az alábbi curl paranccsal törölheti az imént hozzáadott erőforráscsoportot.

    curl -X DELETE 'http://localhost:7071/api/resourcegroup?name=my-test-1' \
      -H 'Content-Type: application/json'
    

Függvényalkalmazás ismételt üzembe helyezése új API-kkal az Azure-ban

  1. A VS Code-ban az üzembe helyezéshez nyissa meg a Parancskatalógust a Ctrl + Shift + p billentyűkombinációval, írja be deploy to function appés futtassa az Azure Functions: Deploy to Function App parancsot.

  2. Válassza ki a függvényalkalmazást az alkalmazások listájából.

  3. Válassza az Üzembe helyezés lehetőséget az előugró ablakban.

  4. Várjon, amíg az üzembe helyezés befejeződik.

Függvény API-k ellenőrzése böngészővel

Használja az előző cURL-parancsokat, és cserélje le a localhost címet az Azure Function-erőforrás nevére, http://localhost:7071 például https://myfunction.azurewebsites.net.

7. A függvényalkalmazás naplóinak megtekintése és lekérdezése

Az Azure-függvényalkalmazás naplóinak megtekintése és lekérdezése az Azure Portalon.

Azure-függvénynaplók lekérdezése

Az Azure Portal használatával megtekintheti és lekérdezheti a függvénynaplókat.

  1. A VS Code-ban válassza az Azure-emblémát az Azure Explorer megnyitásához, majd a Függvények területen kattintson a jobb gombbal a függvényalkalmazásra, majd válassza a Megnyitás a Portálon lehetőséget.

    Ezzel megnyitja az Azure Portalt az Azure-függvényhez.

  2. Válassza az Alkalmazás Elemzések lehetőséget a Gépház, majd válassza az Alkalmazás Elemzések adatok megtekintése lehetőséget.

    A böngésző képernyőképe a menüválasztásról. Válassza az Alkalmazás Elemzések lehetőséget a Gépház, majd válassza az Alkalmazás Elemzések adatok megtekintése lehetőséget.

    Ez a hivatkozás az Azure-függvény VS Code-tal való létrehozásakor létrehozott különálló metrikák erőforrására vezet.

  3. Válassza a Naplók lehetőséget a Figyelés szakaszban. Ha megjelenik egy Lekérdezések előugró ablak, az előugró ablak jobb felső sarkában lévő X elemet választva zárja be.

  4. A Séma és szűrő panel Táblák lapján kattintson duplán a nyomkövetési táblára.

    Ez beírja a Kusto-lekérdezésttraces a lekérdezési ablakba.

  5. A lekérdezés szerkesztése API-hívások kereséséhez:

    traces 
    | where message startswith "Executing "
    
  6. Válassza a Futtatás lehetőséget.

    Ha a napló nem jelenít meg semmilyen eredményt, előfordulhat, hogy néhány perc késés van az Azure-függvénynek küldött HTTP-kérés és a Napló rendelkezésre állása között a Kusto-ban. Várjon néhány percet, és futtassa újra a lekérdezést.

    A Trace-tábla Azure Portal Kusto lekérdezési eredményét megjelenítő böngésző képernyőképe.

    Mivel az Azure-függvényalkalmazás létrehozásakor egy alkalmazás-Elemzések erőforrás lett hozzáadva Önhöz, a naplózási adatok beszerzéséhez nem kellett semmit sem tennie:

    • A függvényalkalmazás alkalmazás-Elemzések hozzáadott Önnek.
    • A Lekérdezés eszközt az Azure Portal tartalmazza.
    • traces Választhatja ahelyett, hogy meg kellene tanulnia Kusto-lekérdezést írni, hogy még a minimális információkat is lekérje a naplókból.

8. Azure-erőforrások eltávolítása

Az erőforráscsoport törlése

  1. A VS Code-ban válassza az Azure-emblémát az Azure Explorer megnyitásához, majd a Függvények területen kattintson a jobb gombbal a függvényalkalmazásra, majd válassza a Megnyitás a Portálon lehetőséget. Ezzel megnyitja az Azure Portalt az Azure-függvényhez.

  2. Az Áttekintés szakaszban keresse meg és válassza ki az erőforráscsoport nevét. Ez a művelet az Azure Portal erőforráscsoportját nyitja meg.

  3. Az erőforráscsoport lap felsorolja az oktatóanyaghoz társított összes erőforrást.

  4. A felső menüben válassza az Erőforráscsoport törlése lehetőséget.

  5. Az oldalsó menüben adja meg az erőforráscsoport nevét, majd válassza a Törlés lehetőséget.

A szolgáltatásnév törlése

A szolgáltatásnév törléséhez futtassa a következő parancsot. Cserélje le <YOUR-SERVICE-PRINCIPAL-NAME> a szolgáltatásnév nevére.

az ad sp delete --id <YOUR-SERVICE-PRINCIPAL-NAME>

Mintakód

Következő lépések