Snabbstart: Svara på bloblagringshändelser med hjälp av Azure Functions

I den här snabbstarten använder du Visual Studio Code för att skapa en app som svarar på händelser i en Blob Storage-container. När du har testat koden lokalt med hjälp av en emulator distribuerar du den till en ny serverlös funktionsapp som körs i en Flex Consumption-plan i Azure Functions.

Projektet använder Azure Developer CLI-tillägget (azd) med Visual Studio Code för att förenkla initieringen och verifieringen av projektkoden lokalt samt för att distribuera koden till Azure. Den här distributionen följer aktuella metodtips för säkra och skalbara Azure Functions-distributioner.

Den här artikeln stöder version 4 av Node.js programmeringsmodellen för Azure Functions.

Den här artikeln stöder version 2 av Python-programmeringsmodellen för Azure Functions.

Förutsättningar

  • Node.js 18.x eller senare. Använd kommandot node --version för att kontrollera din version.

Initiera projektet

azd init Använd kommandot från kommandopaletten för att skapa ett lokalt Azure Functions-kodprojekt från en mall.

  1. Öppna en mapp eller arbetsyta i Visual Studio Code där du vill skapa projektet.

  2. Tryck på F1 för att öppna kommandopaletten, sök efter och kör kommandot Azure Developer CLI (azd): Initialize App (init)och välj sedan Välj en mall.

    Det kan uppstå en liten fördröjning medan azd initierar den aktuella mappen eller arbetsytan.

  1. När du uppmanas, välj Välj en mall och sök sedan efter och välj Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI.

  2. När du uppmanas i terminalen anger du ett unikt miljönamn, till exempel blobevents-dotnet.

    Det här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i den aktuella mappen eller arbetsytan.

  1. När du uppmanas, välj Välj en mall och sök sedan efter och välj Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI.

  2. När du uppmanas i terminalen anger du ett unikt miljönamn, till exempel blobevents-python.

    Det här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i den aktuella mappen eller arbetsytan.

  1. När du uppmanas, välj Välj en mall och sök sedan efter och välj Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI.

  2. När du uppmanas till det anger du ett unikt miljönamn, till exempel blobevents-typescript.

    Det här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i den aktuella mappen eller arbetsytan.

  1. När du uppmanas, välj Välj en mall och sök sedan efter och välj Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI.

  2. När du uppmanas till det anger du ett unikt miljönamn, till exempel blobevents-java.

    Det här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i den aktuella mappen eller arbetsytan.

  1. När du uppmanas, välj Välj en mall och sök sedan efter och välj Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI.

  2. När du uppmanas till det anger du ett unikt miljönamn, till exempel blobevents-powershell.

    Det här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i den aktuella mappen eller arbetsytan.

I azdbehåller miljön en unik distributionskontext för din app och du kan definiera mer än en. Det är också en del av namnet på den resursgrupp som du skapar i Azure.

Lägg till filen local.settings.json

Funktionen kräver filen local.settings.json för att konfigurera värddatorn när den körs lokalt.

  1. Kör det här kommandot för att gå till appmappen src :

    cd src
    
  1. Skapa en fil med namnet local.settings.json i src mappen som innehåller dessa JSON-data:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Skapa en fil med namnet local.settings.json i src mappen som innehåller dessa JSON-data:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Skapa en fil med namnet local.settings.json i src mappen som innehåller dessa JSON-data:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Skapa en fil med namnet local.settings.json i src mappen som innehåller dessa JSON-data:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Skapa en fil med namnet local.settings.json i src mappen som innehåller dessa JSON-data:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    

Skapa och aktivera en virtuell miljö

I mappen src kör du dessa kommandon för att skapa och aktivera en virtuell miljö med namnet .venv:

python3 -m venv .venv
source .venv/bin/activate

Om Python inte installerar venv-paketet på Linux-distributionen kör du följande kommando:

sudo apt-get install python3-venv

Konfigurera lokal lagringsemulator

Använd Azurite-emulatorn för att köra kodprojektet lokalt innan du skapar och använder Azure-resurser.

  1. Om du inte redan har gjort det installerar du Azurite.

  2. Tryck på F1. I kommandopaletten söker du efter och kör kommandot Azurite: Start för att starta den lokala lagringsemulatorn.

  3. I Azure-området expanderar du arbetsytoranslutna lagringskonton, högerklickar (Ctrl-klickar på Mac) på >, väljer Skapa blobcontainer... och skapar de två bloblagringscontainrarna i den lokala emulatorn:

    • unprocessed-pdf: container som utlösaren övervakar för lagringshändelser.
    • processed-pdf: container där funktionen skickar bearbetade blobar som utdata.
  4. Expandera Blobcontainrar, högerklicka (Ctrl-klicka på Mac) unprocessed-pdf, välj Ladda upp filer..., tryck på Retur för att acceptera rotkatalogen och ladda upp PDF-filerna från projektmappen data .

När du kör lokalt kan du använda REST för att utlösa funktionen genom att simulera funktionen som tar emot ett meddelande från en händelseprenumeration.

Kör funktionen lokalt

Visual Studio Code integreras med Azure Functions Core-verktyg så att du kan köra det här projektet på din lokala utvecklingsdator med hjälp av Azurite-emulatorn. Miljövariabeln PDFProcessorSTORAGE definierar anslutningen till lagringskontot, som också anges till "UseDevelopmentStorage=true" i local.settings.json-filen när den körs lokalt.

  1. Kör det här kommandot från projektmappen src i en terminal eller kommandotolk:

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    När Functions host startar skriver den namnet på triggern och typ av trigger till terminalutdata. I Functions innehåller projektrotmappen den host.json filen.

  2. När Core Tools fortfarande körs i Terminal öppnar test.http du filen i projektet och väljer Skicka begäran för att utlösa ProcessBlobUpload funktionen genom att skicka en testblobhändelse till blobhändelsens webhook.

    Det här steget simulerar mottagandet av en händelse från en händelseprenumeration när den körs lokalt, och du bör se den begärda och bearbetade filinformationen som skrivits i loggarna. Om du inte använder REST-klienten måste du använda ett annat säkert REST-verktyg för att anropa slutpunkten med nyttolasten i test.http.

  3. I området Arbetsyta för blobcontainern expanderar du processed-pdf och kontrollerar att funktionen bearbetade PDF-filen och kopierade den med ett processed- prefix.

  4. När du är klar trycker du på Ctrl+C i terminalfönstret för att stoppa func.exe värdprocessen.

Granska koden (valfritt)

Du kan granska koden som definierar Event Grid-blobutlösaren i ProcessBlobUpload.cs-projektfilen. Funktionen visar hur du:

  • Använd BlobTrigger med Source = BlobTriggerSource.EventGrid för bearbetning i nära realtid
  • Bind till BlobClient för källbloben och BlobContainerClient för målet
  • Bearbeta blobinnehåll och kopiera det till en annan container med hjälp av strömmar

Du kan granska koden som definierar Event Grid-blobutlösaren i function_app.py-projektfilen. Funktionen visar hur du:

  • Använd @app.blob_trigger med source="EventGrid" för bearbetning i nära realtid
  • Få åtkomst till blobinnehåll med hjälp av parametern InputStream
  • Kopiera bearbetade filer till målcontainern med hjälp av Azure Storage SDK

Du kan granska koden som definierar Event Grid-blobutlösaren i processBlobUpload.ts-projektfilen. Funktionen visar hur du:

  • Använd app.storageBlob() med source: 'EventGrid' för bearbetning i nära realtid
  • Få åtkomst till blobinnehåll med hjälp av Node.js Azure Storage SDK
  • Bearbeta och kopiera filer till målcontainern asynkront

Du kan granska koden som definierar Event Grid-blobutlösaren i ProcessBlobUpload.java-projektfilen. Funktionen visar hur du:

  • Använd @BlobTrigger med source = "EventGrid" för bearbetning i nära realtid
  • Få åtkomst till blobinnehåll med hjälp av BlobInputStream parametern
  • Kopiera bearbetade filer till målcontainern med Hjälp av Azure Storage SDK för Java

Du kan granska koden som definierar Event Grid-blobutlösaren i projektfilen ProcessBlobUpload/run.ps1 och motsvarande function.json. Funktionen visar hur du:

  • Konfigurera blobutlösare med "source": "EventGrid" i function.json för bearbetning i nära realtid
  • Få åtkomst till blobinnehåll med PowerShell Azure Storage-cmdletar
  • Bearbeta och kopiera filer till målcontainern med hjälp av Azure PowerShell-moduler

När du har granskat och verifierat funktionskoden lokalt är det dags att publicera projektet till Azure.

Skapa Azure-resurser och distribuera

azd up Använd kommandot för att skapa funktionsappen i en Flex Consumption-plan tillsammans med andra nödvändiga Azure-resurser, inklusive händelseprenumerationen. När infrastrukturen är klar azd distribuerar du även projektkoden till den nya funktionsappen i Azure.

  1. I Visual Studio Code trycker du på F1 för att öppna kommandopaletten. Sök efter och kör kommandot Azure Developer CLI (azd): Sign In with Azure Developer CLIoch logga sedan in med ditt Azure-konto.

  2. I projektroten trycker du på F1 för att öppna kommandopaletten. Sök efter och kör kommandot Azure Developer CLI (azd): Provision and Deploy (up) för att skapa nödvändiga Azure-resurser och distribuera koden.

  3. När du uppmanas att göra det i terminalfönstret anger du följande nödvändiga distributionsparametrar:

    Omedelbar Description
    Välj en Azure-prenumeration som ska användas Välj den prenumeration där du vill skapa dina resurser.
    Miljönamn En miljö som används för att upprätthålla en unik distributionskontext för din app.
    Azure-lokalisering Azure-region där du kan skapa resursgruppen som innehåller de nya Azure-resurserna. Endast regioner som för närvarande stöder Flex Consumption-planen visas.

    Kommandot azd up använder dina svar till dessa frågor med Bicep-konfigurationsfilerna för att skapa och konfigurera de nödvändiga Azure-resurserna enligt de senaste metodtipsen:

    • Flex Consumption-plan och funktionsapp
    • Azure Storage-konto med blobcontainrar
    • Application Insights (rekommenderas)
    • Åtkomstprinciper och roller för ditt konto
    • Event Grid-prenumeration för blobhändelser
    • Tjänst-till-tjänst-anslutningar med hjälp av hanterade identiteter (i stället för lagrade anslutningssträngar)

    När kommandot har slutförts körs appen i Azure med en händelseprenumeration konfigurerad för att utlösa funktionen när blobar läggs till i containern unprocessed-pdf .

  4. Anteckna AZURE_STORAGE_ACCOUNT_NAME och AZURE_FUNCTION_APP_NAME i resultatet. De här namnen är unika för ditt lagringskonto respektive din funktionsapp i Azure.

Verifiera den implementerade funktionen

  1. Tryck på F1 i Visual Studio Code. I kommandopaletten söker du efter och kör kommandot Azure Storage: Upload Files.... Acceptera rotkatalogen och ladda som tidigare upp en eller flera PDF-filer från projektmappen data .

  2. När du uppmanas till det väljer du namnet på ditt nya lagringskonto (från AZURE_STORAGE_ACCOUNT_NAME). Välj Blob-behållare>unprocessed-pdf.

  3. Tryck på F1. I kommandopaletten söker du efter och kör kommandot Azure Storage: Open in Explorer. Välj samma lagringskonto >blobcontainrar>processed-pdf och sedan Öppna i nytt fönster.

  4. I Utforskaren kontrollerar du att PDF-filerna som du laddade upp bearbetades av funktionen. Utdata skrivs till containern processed-pdf med ett processed- prefix.

Event Grid-blobutlösaren bearbetar filer inom några sekunder efter uppladdningen. Den här hastigheten visar metodens nästan realtidskapabiliteter jämfört med traditionella polling-baserade blobutlösare.

Distribuera om koden

azd up Kör kommandot så många gånger du behöver både etablera dina Azure-resurser och distribuera koduppdateringar till funktionsappen.

Anmärkning

Distribuerade kodfiler skrivs alltid över av det senaste distributionspaketet.

Dina första svar på azd frågor och eventuella miljövariabler som genereras av azd lagras lokalt i din namngivna miljö. azd env get-values Använd kommandot för att granska alla variabler i din miljö som användes när du skapade Azure-resurser.

Rensa resurser

När du är klar med funktionsappen och relaterade resurser använder du det här kommandot för att ta bort funktionsappen och dess relaterade resurser från Azure. Den här åtgärden hjälper dig att undvika ytterligare kostnader:

azd down --no-prompt

Anmärkning

Alternativet --no-prompt instruerar azd dig att ta bort resursgruppen utan någon bekräftelse från dig.

Det här kommandot påverkar inte ditt lokala kodprojekt.