Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud chcete číst objekt blob, který je v archivní vrstvě, musíte ho nejprve dosazovat na horkou nebo studenou úroveň. Proces dosazování může trvat několik hodin. Místo opakovaného dotazování na stav operace dosazování můžete nakonfigurovat Azure Event Grid tak, aby po dokončení operace dosazování objektů blob vyvolal událost a zpracoval tuto událost ve vaší aplikaci.
Když dojde k události, Event Grid odešle událost obslužné rutině události prostřednictvím koncového bodu. Řada služeb Azure může sloužit jako obslužné rutiny událostí, včetně Azure Functions. Funkce Azure Functions je blok kódu, který se může spustit v reakci na událost. Tento návod vás provede procesem vývoje funkce Azure Functions a následnou konfigurací služby Event Grid tak, aby se funkce spustila v reakci na událost, ke které dojde při dosazování objektu blob.
V tomto článku se dozvíte, jak vytvořit a otestovat funkci Azure Functions pomocí .NET ze sady Visual Studio. Azure Functions můžete vytvářet z různých místních vývojových prostředí a pomocí řady různých programovacích jazyků. Další informace o podporovaných jazycích pro Azure Functions najdete v tématu Podporované jazyky v Azure Functions. Další informace o možnostech vývoje pro Azure Functions najdete v tématu Místní kódování a testování Azure Functions.
Další informace o dosazování objektů blob z archivní úrovně najdete v tématu Přehled dosazování objektů blob z archivní úrovně.
Požadavky
V tomto článku se dozvíte, jak pomocí sady Visual Studio 2019 nebo novější vyvíjet funkci Azure Functions pomocí .NET. Visual Studio Community si můžete nainstalovat zdarma. Ujistěte se, že jste nakonfigurovali Visual Studio pro vývoj pro Azure pomocí .NET.
Nainstalujte nebo použijte nástroj, který může odesílat požadavky HTTP k otestování vašeho řešení, například:
- Visual Studio Code s rozšířením z Webu Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge – nástroj konzoly sítě
- Bruno
- kudrna
Upozornění
V situacích, kdy máte citlivá data, jako jsou přihlašovací údaje, tajné kódy, přístupové tokeny, klíče rozhraní API a další podobné informace, nezapomeňte použít nástroj, který chrání vaše data pomocí nezbytných funkcí zabezpečení. Nástroj by měl fungovat offline nebo místně a nevyžaduje přihlášení k online účtu nebo synchronizaci dat do cloudu. Při použití nástroje s těmito charakteristikami snížíte riziko zveřejnění citlivých dat veřejnosti.
Vyžaduje se předplatné Azure . Pokud ještě účet nemáte, vytvořte si ho ještě před tím, než začnete.
Zřízený zaregistrovaný objekt zabezpečení Microsoft Entra ID, kterému byla přiřazena role Přispěvatel dat v objektech blob služby Storage , vymezená na účet úložiště, nadřazenou skupinu prostředků nebo předplatné. Viz Přiřazení rolí k uživatelskému účtu Microsoft Entra.
Vytvoření aplikace Azure Function App
Aplikace funkcí je prostředek Azure, který slouží jako kontejner pro vaše Azure Functions. K dokončení kroků popsaných v tomto článku můžete použít novou nebo stávající aplikaci funkcí.
Pokud chcete vytvořit novou aplikaci funkcí v Azure Portal, postupujte takto:
V Azure Portal vyhledejte aplikaci funkcí. Výběrem ikony aplikace funkcí přejděte na seznam aplikací funkcí ve vašem předplatném.
Výběrem tlačítka Vytvořit vytvořte novou aplikaci funkcí.
Na kartě Základy zadejte skupinu prostředků a zadejte jedinečný název nové aplikace funkcí.
Ujistěte se, že je možnost Publikovat nastavená na Kód.
V rozevíracím seznamu Zásobník modulu runtime vyberte možnost .NET. Pole Verze se automaticky vyplní tak, aby používalo nejnovější verzi .NET Core.
Vyberte oblast pro novou aplikaci funkcí.
Po dokončení karty Základy přejděte na kartu Hostování .
Na kartě Hosting vyberte účet úložiště, ve kterém se bude funkce Azure Functions ukládat. Můžete zvolit existující účet úložiště nebo vytvořit nový.
Ujistěte se, že je v poli Operační systém nastavena hodnota Windows.
V poli Typ plánu vyberte možnost Spotřeba (bez serveru). Další informace o tomto plánu najdete v tématu Hostování plánu Azure Functions Consumption.
Vyberte Zkontrolovat + Vytvořit a vytvořte novou aplikaci funkcí.
Další informace o konfiguraci aplikace funkcí najdete v tématu Správa aplikace funkcí v dokumentaci k Azure Functions.
Vytvoření funkce Azure Functions jako triggeru Event Gridu
Dále vytvořte funkci Azure, která se spustí při dosazování objektu blob v konkrétním účtu úložiště. Pomocí těchto kroků vytvořte funkci Azure Functions v sadě Visual Studio pomocí jazyka C# a .NET Core:
Spusťte Visual Studio 2019. Pak se přihlaste a připojte kód aplikace k Azure pomocí DefaultAzureCredential.
Vytvořte nový projekt Azure Functions. Podrobnosti najdete v pokynech popsaných v tématu Vytvoření projektu aplikace funkcí.
V kroku Vytvořit novou aplikaci Azure Functions vyberte následující hodnoty:
- Ve výchozím nastavení je modul runtime Azure Functions nastavený na Azure Functions v3 (.NET Core). Microsoft doporučuje používat tuto verzi modulu runtime Azure Functions.
- Ze seznamu možných spouštěčů vyberte možnost Trigger Event Gridu. Další informace o tom, proč je trigger Event Gridu doporučeným typem triggeru pro zpracování události služby Blob Storage pomocí funkce Azure Functions, najdete v tématu Použití funkce jako obslužné rutiny události Event Gridu.
- Nastavení účtu úložiště označuje, kde se bude funkce Azure Functions ukládat. Můžete vybrat existující účet úložiště nebo vytvořit nový.
Vyberte Vytvořit a vytvořte nový projekt v aplikaci Visual Studio.
Dále přejmenujte třídu a funkci Azure Functions, jak je popsáno v tématu Přejmenování funkce. Zvolte název, který je vhodný pro váš scénář.
V aplikaci Visual Studio vyberte Nástroje | Správce balíčků | NuGetKonzola správce balíčků a poté z konzoly nainstalujte následující balíčky:
Install-Package Azure.Storage.Blobs Install-Package Microsoft.ApplicationInsights.WorkerService Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights
Do souboru třídy pro funkci Azure Functions vložte následující příkazy using:
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;
Vyhledejte metodu Run v souboru třídy. Jedná se o metodu, která se spustí, když dojde k události. Vložte následující kód do těla metody Run . Nezapomeňte nahradit zástupné hodnoty v hranatých závorkách vlastními hodnotami:
// 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; } }
Další informace o vývoji Azure Functions najdete v tématu Pokyny k vývoji Azure Functions.
Další informace o informacích, které jsou zahrnuty při publikování události služby Blob Storage do obslužné rutiny události, najdete v tématu Azure Blob Storage jako zdroj Event Gridu.
Místní spuštění funkce Azure Functions v ladicím programu
Pokud chcete kód Azure Functions otestovat místně, musíte ručně odeslat požadavek HTTP, který událost aktivuje. Žádost můžete odeslat pomocí nástrojů, jako jsou ty, které jsou popsány v části Předpoklady v tomto článku.
V horní části souboru třídy pro funkci Azure Functions je koncový bod adresy URL, který můžete použít k testování v místním prostředí. Odesláním požadavku s touto adresou URL se událost spustí v místním prostředí, abyste mohli ladit svůj kód. Adresa URL je v následujícím formátu:
http://localhost:7071/runtime/webhooks/EventGrid?functionName={functionname}
Požadavek, který odešlete do tohoto koncového bodu, je simulovaný požadavek. Neodesílá ani nepřijímá data z vašeho účtu Azure Storage.
Odešlete požadavek na tento koncový bod pomocí nástroje HTTP a jeho pokynů. Nezapomeňte zástupný {functionname}
symbol nahradit názvem funkce (například Get http://localhost:7071/runtime/webhooks/EventGrid?functionName=BlobRehydrateEventHandler
).
- V aplikaci Visual Studio umístěte do kódu všechny požadované zarážky a stisknutím klávesy F5 spusťte ladicí program.
- V nástroji pro žádosti HTTP odešlete požadavek do koncového bodu.
Když odešlete požadavek, Event Grid zavolá vaši funkci Azure Functions a můžete ji normálně ladit. Další informace a příklady najdete v tématu Ruční odeslání žádosti v dokumentaci ke službě Azure Functions.
Požadavek, který událost aktivuje, je simulovaný, ale funkce Azure, která se spustí při aktivaci události, zapisuje informace protokolu do nového objektu blob ve vašem účtu úložiště. Obsah objektu blob můžete ověřit a zobrazit čas jeho poslední změny v Azure Portal, jak je znázorněno na následujícím obrázku:
Publikování funkce Azure Functions
Po místním otestování funkce Azure Functions je dalším krokem publikování funkce Azure Functions do aplikace Azure Function App, kterou jste vytvořili dříve. Funkce musí být publikovaná, abyste mohli nakonfigurovat službu Event Grid tak, aby odesílala události, ke kterým dojde v účtu úložiště, do koncového bodu funkce.
Funkci publikujte následujícím způsobem:
V Průzkumníku řešení vyberte a podržte (nebo klikněte pravým tlačítkem) svůj projekt Azure Functions a zvolte Publikovat.
V okně Publikovat vyberte jako cíl Azure a pak zvolte Další.
Jako konkrétní cíl vyberte Azure Function App (Windows) a pak zvolte Další.
Na kartě Instance služby vyberte v rozevírací nabídce své předplatné a pak v seznamu dostupných aplikací funkcí vyhledejte svou aplikaci Azure Function App.
Ujistěte se, že je zaškrtnuté políčko Spustit ze souboru balíčku .
Výběrem možnosti Dokončit se připravte na publikování funkce.
Na stránce Publikovat ověřte, zda je konfigurace správná. Pokud se zobrazí upozornění, že závislost služby na Application Insights není nakonfigurovaná, můžete ji nakonfigurovat na této stránce.
Výběrem tlačítka Publikovat zahájíte publikování funkce Azure Functions do aplikace Azure Function App, kterou jste vytvořili dříve.
Pokaždé, když provedete změny kódu ve službě Azure Functions, musíte aktualizovanou funkci publikovat do Azure.
Přihlášení k odběru událostí dosazování objektů blob z účtu úložiště
Nyní máte aplikaci funkcí, která obsahuje funkci Azure, která může být spuštěna v reakci na událost. Dalším krokem je vytvoření odběru událostí z vašeho účtu úložiště. Odběr událostí konfiguruje účet úložiště tak, aby publikoval událost prostřednictvím Event Gridu v reakci na operaci s objektem blob ve vašem účtu úložiště. Event Grid pak odešle událost do koncového bodu obslužné rutiny události, který jste zadali. V tomto případě je obslužnou rutinou události funkce Azure, kterou jste vytvořili v předchozí části.
Při vytváření odběru událostí můžete filtrovat, které události se odesílají do obslužné rutiny události. Události, které se mají zachytit při dosazování objektu blob z archivní úrovně, jsou Microsoft.Storage.BlobTierChanged, což odpovídá operaci Set Blob Tier , a Microsoft.Storage.BlobCreated události, které odpovídají operaci Copy Blob . V závislosti na vašem scénáři můžete chtít zpracovat pouze jednu z těchto událostí.
Chcete-li vytvořit odběr události, postupujte takto:
V Azure Portal přejděte k účtu úložiště, který obsahuje objekty blob, které chcete dosazovat z archivní úrovně.
Vyberte nastavení Události v levém navigačním panelu.
Na stránce Události vyberte Další možnosti.
Vyberte možnost Vytvořit odběr události.
Na stránce Vytvořit odběr události zadejte v části Podrobnosti o odběru události název odběru události.
V části Podrobnosti tématu zadejte název systémového tématu. Systémové téma představuje jednu nebo více událostí publikovaných službou Azure Storage. Další informace o systémových tématech najdete v tématu Systémová témata v Azure Event Grid.
V části Typy událostí vyberte události Vytvořen objekt blob a Změněna úroveň objektu blob . V závislosti na tom, jak se rozhodnete dosazovat objekt blob z archivní úrovně, se aktivuje jedna z těchto dvou událostí.
V části Podrobnosti o koncovém bodu vyberte z rozevírací nabídky možnost Azure Functions .
Zvolte Vybrat koncový bod a určete funkci, kterou jste vytvořili v předchozí části. V dialogovém okně Vybrat funkci Azure zvolte předplatné, skupinu prostředků a aplikaci funkcí pro vaši funkci Azure Functions. Nakonec z rozevíracího seznamu vyberte název funkce a zvolte Potvrdit výběr.
Kliknutím na tlačítko Vytvořit vytvořte odběr událostí a začněte odesílat události do obslužné rutiny události funkce Azure.
Další informace o odběrech událostí najdete v tématu Koncepty Azure Event Gridu.
Testování obslužné rutiny události funkce Azure Functions
Pokud chcete funkci Azure Functions otestovat, můžete aktivovat událost v účtu úložiště, který obsahuje odběr události. Odběr událostí, který jste vytvořili dříve, filtruje podle dvou událostí, Microsoft.Storage.BlobCreated a Microsoft.Storage.BlobTierChanged. Když se některá z těchto událostí aktivuje, aktivuje se funkce Azure Functions.
Funkce Azure zobrazená v tomto článku zapisuje do objektu blob protokolu ve dvou scénářích:
- Pokud je událost Microsoft.Storage.BlobCreated a operace rozhraní API je Copy Blob.
- Pokud je událost Microsoft.Storage.BlobTierChanged a operace rozhraní API je Nastavit úroveň objektů blob.
Informace o tom, jak otestovat funkci dosazováním objektu blob, najdete v jednom z těchto dvou postupů:
Po dokončení dosazování se objekt blob protokolu zapíše do stejného kontejneru jako objekt blob, který jste dosazovali. Například po dosazování objektu blob pomocí operace kopírování můžete v Azure Portal vidět, že původní zdrojový objekt blob zůstává v archivní vrstvě, plně dosazovaný cílový objekt blob se zobrazí v cílové online vrstvě a v seznamu se zobrazí také objekt blob protokolu vytvořený funkcí Azure.
Mějte na paměti, že dosazování objektu blob může trvat až 15 hodin v závislosti na nastavení priority dosazování. Pokud nastavíte prioritu dosazování na Vysoká, může dosazování dokončit za méně než jednu hodinu u objektů blob o velikosti menší než 10 GB. Dosazování s vysokou prioritou však vyžaduje vyšší náklady. Další informace najdete v tématu Přehled obnovy objektů blob z archivní úrovně.
Návod
I když je cílem tohoto postupu zpracovat tyto události v kontextu dosazování objektů blob, pro účely testování může být také užitečné sledovat tyto události v reakci na nahrání objektu blob nebo změnu úrovně online objektu blob (tj. z horké na studenou), protože událost se aktivuje okamžitě.
Další informace o filtrování událostí ve službě Event Grid najdete v tématu Filtrování událostí pro Azure Event Grid.