Azure SDK-k használata JavaScripthez és TypeScripthez

Az Azure-szolgáltatások programozott eléréséhez használja a JavaScripthez készült Azure SDK-kat. Ezek az SDK-k általában az Azure-sdk által közzétett @azure npm-csomag hatókörével vannak hatókörben.

Az SDK-k és a REST API-k közötti különbségek

Az alábbi információk segítségével megtudhatja, hogy mikor érdemes használni a hozzáférési mechanizmus típusát.

  • Az Azure-szolgáltatás elérésének előnyben részesített módja az Azure SDK-k használata. Az Azure SDK-k elvonják a felhőalapú Azure-platform REST-kéréseinek, például a hitelesítéshez, az újrapróbálkozásokhoz és a naplózáshoz szükséges sablonkódot.
  • Az Azure REST API-k az előnyben részesített módszer, ha a következők:
    • Olyan előzetes verziójú szolgáltatások használata, amelyekhez nem érhetők el Azure SDK-k. Tekintsük előzetes verziónak a kódot, amelyet frissíteni kell, ha a szolgáltatás általánosan elérhető az SDK-kkal.
    • Közvetlenül szeretne REST-hívásokat kezdeményezni, mert nem szeretné, hogy a teljes SDK egyetlen REST API-t használjon, vagy mélyebben szeretné szabályozni a HTTP-kérelmeket.

Azure-ügyfél- és felügyeleti kódtárak

Az Azure SDK-kiadások a következő módon érhetők el:

  • Felügyeleti SDK-k: A felügyeleti kódtárak lehetővé teszik az Azure-erőforrások kiépítését és kezelését az Azure Resource Manager (ARM) használatával. Ezeket a kódtárakat a csomagnevük alapján @azure/arm- ismerheti fel.
  • Ügyféloldali SDK-k: Mivel egy Azure-erőforrás már létezik, az ügyfélkódtárak használatával használhatja fel és használhatja azt.
    • Minden csomag README.md tartalmazza a dokumentációt és a mintákat.

Azure npm-csomagok telepítése

Az Azure SDK-k szabadon elérhetők az NPM-ből. Egyéni SDK-k telepítése szükséges. Minden SDK TypeScript-definíciókat biztosít.

Az ügyfél-/böngészőhasználathoz Azure SDK-kat kell hozzáadni a csomagküldő folyamathoz.

Azure npm-csomagmintakód használata

Minden csomag tartalmaz dokumentációt a csomag használatának gyors megkezdéséhez. A használatuk megismeréséhez tekintse meg azokat az NPM-csomagokat, amelyeket használ.

Hitelesítési hitelesítő adatok megadása

Az Azure SDK-knak hitelesítő adatokra van szükségük az Azure-platformon való hitelesítéshez. Az @azure/identitás által biztosított hitelesítő osztályok számos előnnyel járnak:

  • Gyors előkészítés
  • Legbiztonságosabb módszer
  • Válassza el a hitelesítési mechanizmust a kódtól. Ez lehetővé teszi, hogy ugyanazt a kódot helyileg és az Azure-platformon használja, miközben a hitelesítő adatok eltérőek.
  • Láncolt hitelesítés biztosítása, hogy több mechanizmus is rendelkezésre álljon

SDK-ügyfél és hívási metódusok létrehozása

Miután programozott módon létrehozott egy hitelesítő adatot, adja át a hitelesítő adatokat az Azure SDK-ügyfélnek. Az ügyfél további információkat igényelhet, például előfizetés-azonosítót vagy szolgáltatás URL-címet. Ezek az értékek az Azure Portalon érhetők el az erőforráshoz.

Listázhatja azokat az előfizetéseket, amelyekhez ez a hitelesítőadat olvasási hozzáféréssel rendelkezik.

const {
  ClientSecretCredential,
  DefaultAzureCredential,
} = require("@azure/identity");
const { SubscriptionClient } = require("@azure/arm-subscriptions");
require("dotenv").config();

let credentials = null;

const tenantId = process.env["AZURE_TENANT_ID"];
const clientId = process.env["AZURE_CLIENT_ID"];
const secret = process.env["AZURE_CLIENT_SECRET"];

if (process.env.NODE_ENV && process.env.NODE_ENV === "production") {
  // production
  credentials = new DefaultAzureCredential();
} else {
  // development
  if (tenantId && clientId && secret) {
    console.log("development");
    credentials = new ClientSecretCredential(tenantId, clientId, secret);
  } else {
    credentials = new DefaultAzureCredential();
  }
}

async function listSubscriptions() {
  try {
    // use credential to authenticate with Azure SDKs
    const client = new SubscriptionClient(credentials);

    // get details of each subscription
    for await (const item of client.subscriptions.list()) {
      const subscriptionDetails = await client.subscriptions.get(
        item.subscriptionId
      );
      /* 
        Each item looks like:
      
        {
          id: '/subscriptions/123456',
          subscriptionId: '123456',
          displayName: 'YOUR-SUBSCRIPTION-NAME',
          state: 'Enabled',
          subscriptionPolicies: {
            locationPlacementId: 'Internal_2014-09-01',
            quotaId: 'Internal_2014-09-01',
            spendingLimit: 'Off'
          },
          authorizationSource: 'RoleBased'
        },
    */
      console.log(subscriptionDetails);
    }
  } catch (err) {
    console.error(JSON.stringify(err));
  }
}

listSubscriptions()
  .then(() => {
    console.log("done");
  })
  .catch((ex) => {
    console.log(ex);
  });

Eredmények aszinkron lapozása

Az SDK-metódusok aszinkron iterátort ( PagedAsyncIterableIterator) adhatnak vissza az aszinkron eredmények engedélyezéséhez. Az eredmények lapozási és folytatási jogkivonatokkal bonthatják fel az eredményhalmazokat.

Az alábbi JavaScript-példa az aszinkron lapozást mutatja be. A kód egy 2-es, mesterségesen rövid lapozási méretet állít be, hogy gyorsan és vizuálisan szemléltethesse a folyamatot, amikor hibakeresésben futtatja a mintakódot.

const { BlobServiceClient } = require("@azure/storage-blob");

const blobAccountConnectionString = "REPLACE-WITH-YOUR-STORAGE-CONNECTION-STRING";
const blobAccountContainerName = "REPLACE-WITH-YOUR-STORAGE-CONTAINER-NAME";

const pageSize = 2;

const list = async () => {

  console.log(`List`);

  let continuationToken = "";
  let currentPage = 1;
  let containerClient=null;
  let currentItem = 1;

  // Get Blob Container - need to have items in container before running this code
  const blobServiceClient = BlobServiceClient.fromConnectionString(blobAccountConnectionString);
  containerClient = blobServiceClient.getContainerClient(blobAccountContainerName);

  do {

    // Get Page of Blobs
    iterator = (continuationToken != "") 
      ? containerClient.listBlobsFlat().byPage({ maxPageSize: pageSize, continuationToken }) 
      : containerClient.listBlobsFlat().byPage({ maxPageSize: pageSize });
    
    page = (await iterator.next()).value;

    // Display list
    if (page.segment?.blobItems) {
      console.log(`\tPage [${currentPage}] `);
      for (const blob of page.segment.blobItems) {
        console.log(`\t\tItem [${currentItem++}] ${blob.name}`);
      }
    };

    // Move to next page
    continuationToken = page.continuationToken;
    if (continuationToken) {
      currentPage++;
    }

  } while (continuationToken != "")
}

list(() => {
  console.log("done");
}).catch((ex) =>
  console.log(ex)
);

További információ az Azure lapozásáról és iterátorairól:

Hosszú ideig futó műveletek

Az SDK-metódusok hosszú ideig futó műveletet (LRO) adhatnak vissza. Ez a válasz többek között a következőket tartalmazza:

  • A kérés befejeződött
  • A kérés még folyamatban van

Az alábbi JavaScript-példa bemutatja, hogyan várhatja meg az LRO befejezését a .pollUntildone()folytatás előtt.

const { BlobServiceClient } = require("@azure/storage-blob");

const blobAccountConnectionString = "REPLACE-WITH-YOUR-STORAGE-CONNECTION-STRING";
const blobAccountContainerName = `test-${Date.now().toString()}`;

const files = [
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/README.md",
    "fileName": "README.md"
  },
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/gulpfile.ts",
    "fileName": "gulpfile.ts"
  },
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/rush.json",
    "fileName": "rush.json"
  },  
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/package.json",
    "fileName": "package.json"
  },
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/tsdoc.json",
    "fileName": "tsdoc.json"
  },
];

const upload = async() => {

  // get container client
  const blobServiceClient = BlobServiceClient.fromConnectionString(blobAccountConnectionString);

  // get container's directory client
  const containerClient = blobServiceClient.getContainerClient(blobAccountContainerName);

  files.forEach(async(file) =>{
    await (

      await containerClient
        .getBlobClient(file.fileName)
        .beginCopyFromURL(file.url)
  
    ).pollUntilDone();
  })
}

upload(() => {
  console.log("done");
}).catch((ex) =>
  console.log(ex)
);

További információ a hosszú ideig futó műveletekről az Azure-ban:

Aszinkron műveletek megszakítása

A @azure/abort-controller csomag AbortController és AbortSignal osztályokat biztosít. Az AbortController használatával hozzon létre egy AbortSignalt, amelyet aztán átadhat az Azure SDK-műveleteknek a függőben lévő munka megszakításához. Az Azure SDK-műveletek a következőek lehetnek:

  • Megszakítva a saját logikája alapján
  • Időtúllépési korlát alapján megszakítva
  • Megszakítva egy szülőfeladat jelzése alapján
  • Megszakítva egy szülőtevékenység jelzése vagy időtúllépési korlátja alapján

További információ:

Részletes naplózás az SDK-ból

Azure SDK használata esetén előfordulhat, hogy hibakeresést kell végeznie az alkalmazáson.

  • A naplózás buildidőben történő engedélyezéséhez állítsa a AZURE_LOG_LEVEL környezeti változót a következőreinfo: .

  • Ha futásidőben szeretné engedélyezni a naplózást, használja a @azure/logger csomagot:

    import { setLogLevel } from "@azure/logger";
    
    setLogLevel("info");
    

Csomagban

További információ az Azure SDK-val való összekapcsolásról:

Következő lépések