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:
- Visual Studio Code a Visual Studio Marketplace bővítményével
- PowerShell Invoke-RestMethod
- Microsoft Edge – Hálózati konzol eszköz
- Bruno
- csavarodik
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:
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.
Új függvényalkalmazás létrehozásához kattintson a Létrehozás gombra.
Az Alapok lapon adjon meg egy erőforráscsoportot, és adjon meg egy egyedi nevet az új függvényalkalmazásnak.
Győződjön meg arról, hogy a Közzététel beállítás Kód értékre van állítva.
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.
Válassza ki az új függvényalkalmazás régióját.
Miután elvégezte az Alapszintű beállítások lapot, lépjen az Üzemeltetés lapra.
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.
Győződjön meg arról, hogy az operációs rendszer mezője Windowsra van állítva.
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.
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:
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.
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.
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.
A Létrehozás gombra kattintva hozza létre az új projektet a Visual Studióban.
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.
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
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;
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
).
- 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.
- 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:
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:
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.
A Közzététel ablakban válassza az Azure-t célként, majd válassza a Tovább gombot.
Válassza az Azure-függvényalkalmazást (Windows) az adott célként, majd válassza a Tovább gombot.
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.
Győződjön meg arról, hogy a Futtatás csomagfájlból jelölőnégyzet be van jelölve.
A Befejezés gombra kattintva előkészítheti a függvény közzétételét.
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.
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.
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:
Az Azure Portalon keresse meg azt a tárfiókot, amely blobokat tartalmaz az archív rétegből való rehidratáláshoz.
Válassza az Események beállítást a bal oldali navigációs panelen.
Az Események lapon válassza a További beállítások lehetőséget.
Válassza az Esemény-előfizetés létrehozása lehetőséget.
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.
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.
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.
A Végpont részletei szakaszban válassza az Azure-függvényt a legördülő menüből.
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.
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.
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.