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


Azure-függvény futtatása blobrehidratálási eseményre válaszul

Az archív szinten lévő blob olvasásához először rehidratálnia kell a blobot a gyakori vagy ritka elérésű szintre. A rehidratálási folyamat több órát is igénybe vehet. A rehidratálási művelet állapotának ismételt lekérdezése helyett konfigurálhatja az Azure Event Gridet, hogy a blobrehidratálási művelet befejeződésekor eseményt aktiváljon, és kezelje az eseményt az alkalmazásban.

Esemény bekövetkezésekor az Event Grid egy végponton keresztül küldi el az eseményt egy eseménykezelőnek. Számos Azure-szolgáltatás szolgálhat eseménykezelőként, beleértve az Azure Functionst is. Az Azure-függvények olyan kódblokkok, amelyek egy eseményre reagálva hajthatók végre. Ez az útmutató végigvezeti egy Azure-függvény fejlesztésének folyamatán, majd konfigurálja az Event Gridet a függvény futtatására egy blob rehidratálásakor bekövetkező eseményre válaszul.

Ez a cikk bemutatja, hogyan hozhat létre és tesztelhet Azure-függvényeket a Visual Studióból a .NET használatával. Az Azure Functionst számos helyi fejlesztési környezetből és különböző programozási nyelvek használatával hozhatja létre. Az Azure Functions támogatott nyelveivel kapcsolatos további információkért lásd : Támogatott nyelvek az Azure Functionsben. Az Azure Functions fejlesztési lehetőségeiről további információt az Azure Functions helyi kóddal és tesztelésével kapcsolatban talál.

További információ a blobok archív rétegből való rehidratálásáról: A blobrehidratálás áttekintése az archív rétegből.

Előfeltételek

Ez a cikk bemutatja, hogyan fejleszthet Azure-függvényeket a Visual Studio 2019-ben vagy újabb verzióiban a .NET-tel. A Visual Studio Community ingyenesen telepíthető. Győződjön meg arról, hogy a Visual Studio for Azure Developmentet a .NET-tel konfigurálja.

  • Telepítsen vagy használjon olyan eszközt, amely HTTP-kéréseket küldhet a megoldás teszteléséhez, például:

    Figyelemfelhívás

    Olyan helyzetekben, ahol bizalmas adatokkal rendelkezik, például hitelesítő adatokkal, titkos kódokkal, hozzáférési jogkivonatokkal, API-kulcsokkal és más hasonló információkkal, mindenképpen használjon olyan eszközt, amely a szükséges biztonsági funkciókkal védi az adatokat, offline vagy helyileg működik, nem szinkronizálja az adatokat a felhőbe, és nem követeli meg, hogy online fiókba jelentkezzen be. Így csökkentheti a bizalmas adatok nyilvános közzétételével járó kockázatokat.

Azure-előfizetésre van szükség. Ha még nem rendelkezik fiókkal, a kezdés előtt hozzon létre egy ingyenes fiókot .

Kiépített Microsoft Entra ID biztonsági tag , amely a Storage Blob Data Közreműködő szerepkörhöz lett hozzárendelve, hatóköre a tárfiókra, a szülő erőforráscsoportra vagy az előfizetésre terjed ki. Lásd: Szerepkörök hozzárendelése a Microsoft Entra felhasználói fiókjához.

Azure-függvényalkalmazás létrehozása

A függvényalkalmazások olyan Azure-erőforrások, amelyek tárolóként szolgálnak az Azure Functions számára. A cikkben ismertetett lépések végrehajtásához használhat egy új vagy meglévő függvényalkalmazást.

Ha új függvényalkalmazást szeretne létrehozni az Azure Portalon, kövesse az alábbi lépéseket:

  1. Az Azure Portalon keresse meg a függvényalkalmazást. Válassza a Függvényalkalmazás ikont az előfizetésben található függvényalkalmazások listájához való navigáláshoz.

  2. Új függvényalkalmazás létrehozásához kattintson a Létrehozás gombra.

  3. Az Alapok lapon adjon meg egy erőforráscsoportot, és adjon meg egy egyedi nevet az új függvényalkalmazásnak.

  4. Győződjön meg arról, hogy a Közzététel beállítás Kód értékre van állítva.

  5. A Futtatókörnyezet verem legördülő listájában válassza a .NET lehetőséget. A Rendszer automatikusan kitölti a Verzió mezőt a .NET Core legújabb verziójának használatához.

  6. Válassza ki az új függvényalkalmazás régióját.

    Képernyőkép egy új függvényalkalmazás azure-beli létrehozásáról – Alapszintű beállítások lap

  7. Miután elvégezte az Alapszintű beállítások lapot, lépjen az Üzemeltetés lapra.

  8. Az Üzemeltetés lapon válassza ki azt a tárfiókot, amelyben az Azure-függvényt tárolni fogja. Választhat egy meglévő tárfiókot, vagy létrehozhat egy újat.

  9. Győződjön meg arról, hogy az operációs rendszer mezője Windowsra van állítva.

  10. A Terv típusa mezőben válassza a Használat (Kiszolgáló nélküli) lehetőséget. A csomaggal kapcsolatos további információkért tekintse meg az Azure Functions Consumption-csomag üzemeltetését.

    Képernyőkép egy új függvényalkalmazás azure-beli létrehozásáról – Üzemeltetés lap

  11. Válassza a Véleményezés + Létrehozás lehetőséget az új függvényalkalmazás létrehozásához.

A függvényalkalmazás konfigurálásával kapcsolatos további információkért tekintse meg a függvényalkalmazás kezelését az Azure Functions dokumentációjában.

Azure-függvény létrehozása Event Grid-eseményindítóként

Ezután hozzon létre egy Azure-függvényt, amely egy blob egy adott tárfiókban való rehidratálásakor fog futni. Kövesse az alábbi lépéseket egy Azure-függvény létrehozásához a Visual Studióban a C# és a .NET Core használatával:

  1. Indítsa el a Visual Studio 2019-et. Ezután jelentkezzen be, és csatlakoztassa az alkalmazáskódot az Azure-hoz a DefaultAzureCredential használatával.

  2. Hozzon létre egy új Azure Functions-projektet. A részletekért kövesse a Függvényalkalmazás-projekt létrehozása című témakörben leírt utasításokat.

  3. Az új Azure Functions-alkalmazás létrehozása lépésben válassza ki a következő értékeket:

    • Alapértelmezés szerint az Azure Functions-futtatókörnyezet azure Functions v3 (.NET Core) értékre van állítva. A Microsoft az Azure Functions-futtatókörnyezet ezen verziójának használatát javasolja.
    • A lehetséges eseményindítók listájában válassza az Event Grid-eseményindítót. További információ arról, hogy az Event Grid-eseményindító miért ajánlott eseményindító egy Blob Storage-esemény Azure-függvényekkel való kezeléséhez, lásd : Függvény használata eseménykezelőként az Event Grid-eseményekhez.
    • A Tárfiók beállítás jelzi az Azure-függvény tárolási helyét. Kiválaszthat egy meglévő tárfiókot, vagy létrehozhat egy újat.
  4. A Létrehozás gombra kattintva hozza létre az új projektet a Visual Studióban.

  5. Ezután nevezze át az osztályt és az Azure-függvényt a függvény átnevezésében leírtak szerint. Válasszon egy, a forgatókönyvnek megfelelő nevet.

  6. A Visual Studióban válassza a Tools | NuGet Csomagkezelő | Csomagkezelő Console lehetőséget, majd telepítse a következő csomagokat a konzolról:

    Install-Package Azure.Storage.Blobs
    Install-Package Microsoft.ApplicationInsights.WorkerService
    Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights
    
  7. Az Azure-függvény osztályfájljában illessze be a következő utasításokat:

    using System;
    using System.IO;
    using System.Text;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.EventGrid.Models;
    using Microsoft.Azure.WebJobs.Extensions.EventGrid;
    using Microsoft.Extensions.Logging;
    using Azure;
    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
  8. Keresse meg a Run metódust az osztályfájlban. Ez az a metódus, amely esemény bekövetkezésekor fut. Illessze be a következő kódot a Run metódus törzsébe. Ne felejtse el lecserélni a szögletes zárójelek helyőrző értékeit a saját értékeire:

    // When either Microsoft.Storage.BlobCreated or Microsoft.Storage.BlobTierChanged
    // event occurs, write the event details to a log blob in the same container
    // as the event subject (the blob for which the event occurred).
    
    // Create a unique name for the log blob.
    string logBlobName = string.Format("function-log-{0}.txt", DateTime.UtcNow.Ticks);
    
    // Get data from the event.
    dynamic data = eventGridEvent.Data;
    string eventBlobUrl = Convert.ToString(data.url);
    string eventApi = Convert.ToString(data.api);
    
    // Build string containing log information.
    StringBuilder eventInfo = new StringBuilder();
    eventInfo.AppendLine(string.Format("{0} operation occurred.", eventApi));
    eventInfo.AppendLine(string.Format("Blob URL: {0}", eventBlobUrl));
    eventInfo.AppendLine($@"Additional event details:
        Id=[{eventGridEvent.Id}]
        EventType=[{eventGridEvent.EventType}]
        EventTime=[{eventGridEvent.EventTime}]
        Subject=[{eventGridEvent.Subject}]
        Topic=[{eventGridEvent.Topic}]");
    
    // If event was BlobCreated and API call was CopyBlob, respond to the event.
    bool copyBlobEventOccurred = (eventGridEvent.EventType == "Microsoft.Storage.BlobCreated") &&
                                 (eventApi == "CopyBlob");
    
    // If event was BlobTierChanged and API call was SetBlobTier, respond to the event.
    bool setTierEventOccurred = (eventGridEvent.EventType == "Microsoft.Storage.BlobTierChanged") &&
                                (eventApi == "SetBlobTier");
    
    // If one of these two events occurred, write event info to a log blob.
    if (copyBlobEventOccurred | setTierEventOccurred)
    {
        // Create log blob in same account and container.
        BlobUriBuilder logBlobUriBuilder = new BlobUriBuilder(new Uri(eventBlobUrl))
        {
            BlobName = logBlobName
        };
    
        TokenCredential credential = new DefaultAzureCredential();
    
        string blobUri = "https://" + accountName + ".blob.core.windows.net/" + logBlobUriBuilder.BlobContainerName + "/" + logBlobName;
    
        BlobClient logBlobClient = new BlobClient(new Uri(blobUri), credential);
    
        byte[] byteArray = Encoding.ASCII.GetBytes(eventInfo.ToString());
    
        try
        {
            // Write the log info to the blob.
            // Overwrite if the blob already exists.
            using (MemoryStream memoryStream = new MemoryStream(byteArray))
            {
                BlobContentInfo blobContentInfo =
                    logBlobClient.Upload(memoryStream, overwrite: true);
            }
        }
        catch (RequestFailedException e)
        {
            Console.WriteLine(e.Message);
            throw;
        }
    }
    

Az Azure Functions fejlesztésével kapcsolatos további információkért tekintse meg az Azure Functions fejlesztésére vonatkozó útmutatót.

Ha többet szeretne megtudni a Blob Storage-események eseménykezelőben való közzétételekor megjelenő információkról, tekintse meg az Azure Blob Storage mint Event Grid-forrást.

Az Azure-függvény helyi futtatása a hibakeresőben

Az Azure-függvénykód helyi teszteléséhez manuálisan kell elküldenie egy HTTP-kérést, amely elindítja az eseményt. A kérést közzéteheti a jelen cikk előfeltételként szolgáló szakaszában ismertetett eszközökkel.

Az Azure-függvény osztályfájljának tetején található egy URL-végpont, amelyet a helyi környezetben történő teszteléshez használhat. Ha ezzel az URL-címmel teszi közzé a kérést, a helyi környezetben aktiválja az eseményt, így hibakeresést végezhet a kódban. Az URL-cím formátuma a következő:

http://localhost:7071/runtime/webhooks/EventGrid?functionName={functionname}

Az erre a végpontra küldött kérés szimulált kérés. Nem küld és nem fogad adatokat az Azure Storage-fiókból.

Küldjön egy kérést erre a végpontra a HTTP-kérési eszközzel és annak utasításaival. Ügyeljen arra, hogy a helyőrzőt {functionname} helyettesítse a függvény nevével (például Get http://localhost:7071/runtime/webhooks/EventGrid?functionName=BlobRehydrateEventHandler).

  1. A Visual Studióban helyezze el a kívánt töréspontokat a kódban, és nyomja le az F5 billentyűt a hibakereső futtatásához.
  2. A HTTP-kérési eszközben küldje el a kérelmet a végpontnak.

A kérés elküldésekor az Event Grid meghívja az Azure-függvényt, és a hibakeresést a szokásos módon végezheti el. További információkért és példákért tekintse meg a kérés manuális közzétételét az Azure Functions dokumentációjában.

Az eseményt kiváltó kérés szimulálva van, de az esemény aktiválásakor futó Azure-függvény naplóadatokat ír egy új blobba a tárfiókban. Ellenőrizheti a blob tartalmát, és megtekintheti az utolsó módosítás időpontját az Azure Portalon az alábbi képen látható módon:

Képernyőkép a naplóblob tartalmáról az Azure Portalon

Az Azure-függvény közzététele

Miután helyileg tesztelte az Azure-függvényt, a következő lépés az Azure-függvény közzététele a korábban létrehozott Azure-függvényalkalmazásban. A függvényt közzé kell tenni, hogy konfigurálhassa az Event Gridet, hogy a tárfiókban bekövetkező eseményeket a függvényvégpontra küldje.

A függvény közzétételéhez kövesse az alábbi lépéseket:

  1. A Megoldáskezelő válassza ki és tartsa lenyomva az Azure Functions-projektet (vagy kattintson rá a jobb gombbal), és válassza a Közzététel lehetőséget.

  2. A Közzététel ablakban válassza az Azure-t célként, majd válassza a Tovább gombot.

  3. Válassza az Azure-függvényalkalmazást (Windows) az adott célként, majd válassza a Tovább gombot.

  4. A Functions-példány lapon válassza ki az előfizetését a legördülő menüből, majd keresse meg az Azure-függvényalkalmazást az elérhető függvényalkalmazások listájában.

  5. Győződjön meg arról, hogy a Futtatás csomagfájlból jelölőnégyzet be van jelölve.

  6. A Befejezés gombra kattintva előkészítheti a függvény közzétételét.

  7. A Közzététel lapon ellenőrizze, hogy a konfiguráció helyes-e. Ha figyelmeztetés jelenik meg arról, hogy az Application Insights szolgáltatásfüggősége nincs konfigurálva, ezen a lapon konfigurálhatja.

  8. A Közzététel gombra kattintva megkezdheti az Azure-függvény közzétételét a korábban létrehozott Azure-függvényalkalmazásban.

    Képernyőkép az Azure-függvény Visual Studióból való közzétételére vonatkozó oldalról

Amikor módosítja az Azure-függvény kódját, közzé kell tennie a frissített függvényt az Azure-ban.

Feliratkozás blobrehidratálási eseményekre egy tárfiókból

Most már rendelkezik egy olyan függvényalkalmazással, amely egy Azure-függvényt tartalmaz, amely egy eseményre válaszul futtatható. A következő lépés egy esemény-előfizetés létrehozása a tárfiókból. Az esemény-előfizetés úgy konfigurálja a tárfiókot, hogy az Eseményrácson keresztül tegyen közzé egy eseményt a tárfiókban lévő blobon végrehajtott műveletre válaszul. Az Event Grid ezután elküldi az eseményt a megadott eseménykezelő végpontnak. Ebben az esetben az eseménykezelő az előző szakaszban létrehozott Azure-függvény.

Az esemény-előfizetés létrehozásakor szűrheti, hogy mely eseményeket küldi el a rendszer az eseménykezelőnek. A blobok archiválási rétegből való rehidratálásakor rögzítendő események a Microsoft.Storage.BlobTierChanged, amely egy Blobréteg beállítása műveletnek felel meg, és a Blob másolása műveletnek megfelelő Microsoft.Storage.BlobCreated események. A forgatókönyvtől függően előfordulhat, hogy csak az egyik ilyen eseményt szeretné kezelni.

Az esemény-előfizetés létrehozásához kövesse az alábbi lépéseket:

  1. Az Azure Portalon keresse meg azt a tárfiókot, amely blobokat tartalmaz az archív rétegből való rehidratáláshoz.

  2. Válassza az Események beállítást a bal oldali navigációs panelen.

  3. Az Események lapon válassza a További beállítások lehetőséget.

  4. Válassza az Esemény-előfizetés létrehozása lehetőséget.

  5. Az Esemény-előfizetés létrehozása lapon, az Esemény-előfizetés részletei szakaszban adja meg az esemény-előfizetés nevét.

  6. A Témakör részletei szakaszban adja meg a rendszertéma nevét. A rendszertéma egy vagy több, az Azure Storage által közzétett eseményt jelöl. A rendszertémakörökről további információt az Azure Event Grid rendszertémakörökben talál.

  7. Az Eseménytípusok szakaszban válassza ki a Blob Által létrehozott és a Blobrétegben módosított eseményeket. Attól függően, hogy hogyan rehidratál egy blobot az archív rétegből, a két esemény egyike aktiválódik.

    Képernyőkép a blobrehidratálási események eseménytípusainak kiválasztásáról az Azure Portalon

  8. A Végpont részletei szakaszban válassza az Azure-függvényt a legördülő menüből.

  9. Válassza a Végpont kiválasztása lehetőséget az előző szakaszban létrehozott függvény megadásához. Az Azure-függvény kiválasztása párbeszédpanelen válassza ki az Azure-függvény előfizetését, erőforráscsoportját és függvényalkalmazását. Végül válassza ki a függvény nevét a legördülő listában, és válassza a Kijelölés megerősítése lehetőséget.

    Képernyőkép egy Azure-függvény Event Grid-előfizetés végpontjaként való kiválasztásáról

  10. A Létrehozás gombra kattintva létrehozhatja az esemény-előfizetést, és megkezdheti az események küldését az Azure Function eseménykezelőjének.

Az esemény-előfizetésekkel kapcsolatos további információkért tekintse meg az Azure Event Grid alapelveit.

Az Azure-függvény eseménykezelőjének tesztelése

Az Azure-függvény teszteléséhez aktiválhat egy eseményt az esemény-előfizetést tartalmazó tárfiókban. A korábban létrehozott esemény-előfizetés két eseményre szűr: Microsoft.Storage.BlobCreated és Microsoft.Storage.BlobTierChanged. Ha valamelyik esemény aktiválódik, az aktiválja az Azure-függvényt.

A cikkben bemutatott Azure-függvény két forgatókönyvben ír egy naplóblobba:

  • Ha az esemény Microsoft.Storage.BlobCreated, és az API-művelet a Blob másolása.
  • Ha az esemény Microsoft.Storage.BlobTierChanged, és az API-művelet blobszint beállítása.

Ha meg szeretné tudni, hogyan tesztelheti a függvényt egy blob rehidratálásával, tekintse meg az alábbi két eljárás egyikét:

A rehidratálás befejezése után a naplóblob ugyanarra a tárolóra lesz írva, mint a rehidratált blob. Ha például másolási művelettel rehidratál egy blobot, az Azure Portalon láthatja, hogy az eredeti forrásblob az archív szinten marad, a teljesen rehidratált célblob megjelenik a célzott online szinten, és az Azure-függvény által létrehozott naplóblob is megjelenik a listában.

Képernyőkép az eredeti blobról az archív szinten, a rehidratált blob a gyakori elérésű rétegben, valamint az eseménykezelő által írt naplóblob.

Ne feledje, hogy a blob rehidratálása a rehidratálás prioritási beállításától függően akár 15 órát is igénybe vehet. Ha magasra állítja a rehidratálási prioritást, a rehidratálás egy órán belül befejeződhet a 10 GB-nál kisebb méretű blobok esetében. A magas prioritású rehidratálás azonban nagyobb költséggel jár. További információ: A blob rehidratációjának áttekintése az archív rétegből.

Tipp.

Bár ennek az útmutatónak az a célja, hogy ezeket az eseményeket a blobrehidratálás kontextusában kezelje, tesztelési célokból hasznos lehet ezeket az eseményeket megfigyelni egy blob feltöltése vagy egy online blob szintjének módosításakor (azaz a gyakori elérésűtől a ritka elérésűig), mert az esemény azonnal aktiválódik.

Az Események szűrése az Event Gridben című témakörben talál további információt az Események szűrése az Azure Event Gridben című témakörben.

Lásd még