Sdílet prostřednictvím


Spuštění funkce Azure Functions v reakci na událost dosazování objektů blob

Pokud chcete přečíst objekt blob, který je v archivní úrovni, musíte objekt blob nejprve dosadit na horkou nebo studenou úroveň. Dokončení procesu dosazování může trvat několik hodin. Místo opakovaného dotazování na stav operace dosazování můžete službu Azure Event Grid nakonfigurovat tak, aby aktivovalo událost při dokončení operace dosazování objektů blob a zpracování této události ve vaší aplikaci.

Když dojde k události, Event Grid událost odešle 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 je blok kódu, který se může spustit v reakci na událost. Tento postup vás provede procesem vývoje funkce Azure Functions a následnou konfigurací event Gridu tak, aby funkci spustila v reakci na událost, ke které dochází při rehydraci 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 používat různé programovací jazyky. Další informace o podporovaných jazycích pro Azure Functions najdete v tématu Podporované jazyky ve službě Azure Functions. Další informace o možnostech vývoje pro Azure Functions najdete v tématu Kód a místní 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 s .NET. Visual Studio Community si můžete zdarma nainstalovat. Ujistěte se, že jste pomocí .NET nakonfigurovali Visual Studio pro vývoj pro Azure.

  • Nainstalujte nebo použijte nástroj, který může odesílat požadavky HTTP k otestování vašeho řešení, například:

    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í potřebných funkcí zabezpečení, funguje offline nebo místně, nesynchronizuje vaše data do cloudu a nevyžaduje, abyste se přihlásili k online účtu. Tímto způsobem 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ý objekt zabezpečení Microsoft Entra ID, který má přiřazenou roli Přispěvatel dat objektů 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 službu Azure Functions. K dokončení kroků popsaných v tomto článku můžete použít novou nebo existující aplikaci funkcí.

Pokud chcete vytvořit novou aplikaci funkcí na webu Azure Portal, postupujte takto:

  1. Na webu Azure Portal vyhledejte aplikaci funkcí. Výběrem ikony Aplikace funkcí přejděte do seznamu aplikací funkcí ve vašem předplatném.

  2. Výběrem tlačítka Vytvořit vytvořte novou aplikaci funkcí.

  3. Na kartě Základy zadejte skupinu prostředků a zadejte jedinečný název nové aplikace funkcí.

  4. Ujistěte se, že je možnost Publikovat nastavená na Kód.

  5. V rozevíracím seznamu zásobníku modulu runtime vyberte .NET. Pole Verze se vyplní automaticky, aby používalo nejnovější verzi .NET Core.

  6. Vyberte oblast nové aplikace funkcí.

    Snímek obrazovky znázorňující, jak vytvořit novou aplikaci funkcí v Azure – karta Základy

  7. Po dokončení karty Základy přejděte na kartu Hostování .

  8. Na kartě Hostování vyberte účet úložiště, do kterého se uloží vaše funkce Azure Functions. Můžete zvolit existující účet úložiště nebo vytvořit nový.

  9. Ujistěte se, že je pole Operační systém nastavené na Windows.

  10. V poli Typ plánu vyberte Consumption (Bezserverová verze). Další informace o tomto plánu najdete v tématu Hostování plánu Consumption služby Azure Functions.

    Snímek obrazovky znázorňující, jak vytvořit novou aplikaci funkcí v Azure – karta Hostování

  11. Vyberte Zkontrolovat a vytvořit novou aplikaci funkcí.

Další informace o konfiguraci aplikace funkcí najdete v tématu Správa aplikace funkcí v dokumentaci ke službě Azure Functions.

Vytvoření funkce Azure Functions jako triggeru Event Gridu

Dále vytvořte funkci Azure Functions, která se spustí při dosazování objektu blob v konkrétním účtu úložiště. Pomocí následujícího postupu vytvořte funkci Azure Functions v sadě Visual Studio s C# a .NET Core:

  1. Spusťte Visual Studio 2019. Pak se přihlaste a připojte kód aplikace k Azure pomocí DefaultAzureCredential.

  2. Vytvořte nový projekt Azure Functions. Podrobnosti najdete v pokynech popsaných v tématu Vytvoření projektu aplikace funkcí.

  3. V kroku Vytvořit novou aplikaci Azure Functions vyberte následující hodnoty:

    • Modul runtime Azure Functions je standardně nastavený na Azure Functions v3 (.NET Core). Microsoft doporučuje používat tuto verzi modulu runtime Azure Functions.
    • V seznamu možných triggerů vyberte 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, najdete v tématu Použití funkce jako obslužné rutiny událostí pro události Event Gridu.
    • Nastavení účtu úložiště označuje, kde se vaše funkce Azure Functions uloží. Můžete vybrat existující účet úložiště nebo vytvořit nový.
  4. Vyberte Vytvořit a vytvořte nový projekt v sadě Visual Studio.

  5. V dalším kroku přejmenujte třídu a funkci Azure, jak je popsáno v části Přejmenovat funkci. Zvolte název, který je vhodný pro váš scénář.

  6. V sadě Visual Studio vyberte nástroje | NuGet Správce balíčků | Správce balíčků konzolu a pak 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
    
  7. 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;
    
  8. Vyhledejte metodu Run v souboru třídy. Jedná se o metodu, která se spouští při výskytu události. Do těla metody Run vložte následující kód. 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 pokynech k vývoji Azure Functions.

Další informace o informacích, které jsou zahrnuté při publikování události 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 funkce Azure Functions otestovat místně, musíte ručně odeslat požadavek HTTP, který událost aktivuje. Žádost můžete publikovat pomocí nástroje, jako jsou ty, které jsou popsány v části požadavky tohoto článku.

V horní části souboru třídy pro vaši funkci Azure Je koncový bod adresy URL, který můžete použít k testování v místním prostředí. Odeslání požadavku pomocí této adresy URL aktivuje událost v místním prostředí, abyste mohli kód ladit. 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 do tohoto koncového bodu požadavek pomocí nástroje požadavku HTTP a jeho pokynů. Nezapomeňte zástupný symbol nahradit {functionname} názvem vaší funkce (například Get http://localhost:7071/runtime/webhooks/EventGrid?functionName=BlobRehydrateEventHandler).

  1. V sadě Visual Studio umístěte do kódu všechny požadované zarážky a stisknutím klávesy F5 spusťte ladicí program.
  2. V nástroji pro požadavek HTTP odešlete požadavek do koncového bodu.

Když odešlete požadavek, Event Grid zavolá funkci Azure Functions a můžete ji normálně ladit. Další informace a příklady najdete v tématu Ruční publikování požadavku v dokumentaci ke službě Azure Functions.

Požadavek, který událost aktivuje, se simuluje, ale funkce Azure Functions, 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 jeho čas poslední změny na webu Azure Portal, jak je znázorněno na následujícím obrázku:

Snímek obrazovky zobrazující obsah objektu blob protokolu na webu Azure Portal

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 funkcí Azure, kterou jste vytvořili dříve. Funkce musí být publikovaná, abyste mohli službu Event Grid nakonfigurovat tak, aby odesílala události, ke kterým došlo v účtu úložiště, do koncového bodu funkce.

Pokud chcete funkci publikovat, postupujte takto:

  1. V Průzkumník řešení vyberte projekt Azure Functions a podržte ho (nebo na to klikněte pravým tlačítkem) a zvolte Publikovat.

  2. V okně Publikovat vyberte Jako cíl Azure a pak zvolte Další.

  3. Jako konkrétní cíl vyberte aplikaci Funkcí Azure (Windows) a pak zvolte Další.

  4. Na kartě Instance služby Functions vyberte své předplatné z rozevírací nabídky a pak v seznamu dostupných aplikací funkcí vyhledejte svou aplikaci Funkcí Azure.

  5. Ujistěte se, že je zaškrtnuté políčko Spustit ze souboru balíčku.

  6. Vyberte Dokončit a připravte se na publikování funkce.

  7. Na stránce Publikovat ověřte správnost konfigurace. Pokud se zobrazí upozornění, že závislost služby na Application Insights není nakonfigurovaná, můžete ji nakonfigurovat z této stránky.

  8. Výběrem tlačítka Publikovat zahájíte publikování funkce Azure Functions do aplikace Funkcí Azure, kterou jste vytvořili dříve.

    Snímek obrazovky se stránkou pro publikování funkce Azure Functions ze sady Visual Studio

Kdykoli ve funkci Azure Functions provedete změny kódu, musíte aktualizovanou funkci publikovat do Azure.

Přihlášení k odběru událostí dosazování objektů blob z účtu úložiště

Teď máte aplikaci funkcí, která obsahuje funkci Azure, která se dá spustit v reakci na událost. Dalším krokem je vytvoření odběru událostí z účtu úložiště. Odběr událostí nakonfiguruje účet úložiště tak, aby událost publikoval prostřednictvím Služby Event Grid 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žná rutina události funkcí 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, odpovídající operaci Set Blob Tier a Microsoft.Storage.BlobCreated události odpovídající operaci kopírování objektu blob. V závislosti na vašem scénáři můžete chtít zpracovat pouze jednu z těchto událostí.

Pokud chcete vytvořit odběr události, postupujte takto:

  1. Na webu Azure Portal přejděte do účtu úložiště, který obsahuje objekty blob, které se mají dosadit z archivní úrovně.

  2. V levém navigačním podokně vyberte nastavení Události .

  3. Na stránce Události vyberte Další možnosti.

  4. Vyberte Vytvořit odběr událostí.

  5. Na stránce Vytvořit odběr události v části Podrobnosti odběru událostí zadejte název odběru události.

  6. 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 ve službě Azure Event Grid.

  7. V části Typy událostí vyberte události Blob Created (Vytvořené objekty blob) a Blob Tier Changed (Změněné úrovně objektů blob). V závislosti na tom, jak se rozhodnete dosadit objekt blob z archivní úrovně, se aktivuje jedna z těchto dvou událostí.

    Snímek obrazovky znázorňující výběr typů událostí pro události dosazování objektů blob na webu Azure Portal

  8. V části Podrobnosti o koncovém bodu vyberte v rozevírací nabídce funkci Azure Functions.

  9. 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 funkci Azure Functions. Nakonec v rozevíracím seznamu vyberte název funkce a zvolte Potvrdit výběr.

    Snímek obrazovky znázorňující výběr funkce Azure Functions jako koncového bodu pro odběr Event Gridu

  10. Výběrem tlačítka Vytvořit vytvořte odběr události a začněte odesílat události do obslužné rutiny události funkce Azure Functions.

Další informace o odběrech událostí najdete v tématu Koncepty služby Azure Event Grid.

Testování obslužné rutiny událostí 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 dvě události: Microsoft.Storage.BlobCreated a Microsoft.Storage.BlobTierChanged. Když se aktivuje některé z těchto událostí, aktivuje se vaše funkce Azure Functions.

Funkce Azure functions 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 Kopírovat objekt blob.
  • Pokud je událost Microsoft.Storage.BlobTierChanged a operace rozhraní API je nastavena na úroveň objektu blob.

Pokud chcete zjistit, jak funkci otestovat dosazováním objektu blob, podívejte se na jeden 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 s operací kopírování uvidíte na webu Azure Portal, že původní zdrojový objekt blob zůstane v archivní úrovni, plně rehydrovaný cílový objekt blob se zobrazí v cílové online vrstvě a objekt blob protokolu vytvořený funkcí Azure Functions se zobrazí také v seznamu.

Snímek obrazovky s původním objektem blob v archivní vrstvě, rehydrovaným objektem blob v horké vrstvě a objektem blob protokolu napsaným obslužnou rutinou události

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 hodnotu Vysoká, může se dosazování dokončit do jedné hodiny pro objekty blob, které mají velikost menší než 10 GB. Při dosazování s vysokou prioritou se však účtují vyšší náklady. Další informace najdete v tématu Přehled dosazování objektů blob z archivní úrovně.

Tip

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 se událost okamžitě aktivuje.

Další informace o filtrování událostí v Event Gridu najdete v tématu Jak filtrovat události pro Azure Event Grid.

Viz také