Delen via


Quickstart: Reageren op gebeurtenissen in blobopslag met behulp van Azure Functions

In deze quickstart gebruikt u Visual Studio Code om een app te bouwen die reageert op gebeurtenissen in een Blob Storage-container. Nadat u de code lokaal hebt getest met behulp van een emulator, implementeert u deze in een nieuwe serverloze functie-app die wordt uitgevoerd in een Flex Consumption-abonnement in Azure Functions.

Het project maakt gebruik van de Azure Developer CLI-extensie (azd) met Visual Studio Code om het initialiseren en verifiëren van uw projectcode lokaal te vereenvoudigen en uw code in Azure te implementeren. Deze implementatie volgt de huidige aanbevolen procedures voor veilige en schaalbare Azure Functions-implementaties.

Dit artikel ondersteunt versie 4 van het Node.js programmeermodel voor Azure Functions.

Dit artikel ondersteunt versie 2 van het Python-programmeermodel voor Azure Functions.

Vereiste voorwaarden

  • Een Azure-account met een actief abonnement. Gratis een account maken

  • Visual Studio Code op een van de ondersteunde platforms.

  • De Azure Functions-extensie voor Visual Studio Code. Voor deze extensie zijn Azure Functions Core Tools vereist. Wanneer dit hulpprogramma niet lokaal beschikbaar is, probeert de extensie het te installeren met behulp van een installatieprogramma op basis van een pakket. U kunt het Core Tools-pakket ook installeren of bijwerken door het opdrachtpalet uit te voeren Azure Functions: Install or Update Azure Functions Core Tools . Als u npm of Homebrew niet op uw lokale computer hebt geïnstalleerd, moet u Core Tools handmatig installeren of bijwerken.

  • Node.js 18.x of hoger. Gebruik de opdracht node --version om uw versie te controleren.

Het project initialiseren

Gebruik de azd init opdracht uit het opdrachtenpalet om een lokaal Azure Functions-codeproject te maken op basis van een sjabloon.

  1. Open in Visual Studio Code een map of werkruimte waar u uw project wilt maken.

  2. Druk op F1 om het opdrachtenpalet te openen, de opdracht Azure Developer CLI (azd): Initialize App (init)te zoeken en uit te voeren en vervolgens een sjabloon selecteren te kiezen.

    Er kan een kleine vertraging optreden tijdens azd het initialiseren van de huidige map of werkruimte.

  1. Wanneer u hierom wordt gevraagd, kiest u Selecteer een sjabloon en zoekt en selecteert u Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI.

  2. Wanneer u hierom wordt gevraagd in de terminal, voert u een unieke omgevingsnaam in, zoals blobevents-dotnet.

    Met deze opdracht worden de projectbestanden opgehaald uit de sjabloonopslagplaats en wordt het project geïnitialiseerd in de huidige map of werkruimte.

  1. Wanneer u hierom wordt gevraagd, kiest u Selecteer een sjabloon en zoekt en selecteert u Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI.

  2. Wanneer u hierom wordt gevraagd in de terminal, voert u een unieke omgevingsnaam in, zoals blobevents-python.

    Met deze opdracht worden de projectbestanden opgehaald uit de sjabloonopslagplaats en wordt het project geïnitialiseerd in de huidige map of werkruimte.

  1. Wanneer u hierom wordt gevraagd, kiest u Selecteer een sjabloon en zoekt en selecteert u Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI.

  2. Voer desgevraagd een unieke omgevingsnaam in, zoals blobevents-typescript.

    Met deze opdracht worden de projectbestanden opgehaald uit de sjabloonopslagplaats en wordt het project geïnitialiseerd in de huidige map of werkruimte.

  1. Wanneer u hierom wordt gevraagd, kiest u Selecteer een sjabloon en zoekt en selecteert u Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI.

  2. Voer desgevraagd een unieke omgevingsnaam in, zoals blobevents-java.

    Met deze opdracht worden de projectbestanden opgehaald uit de sjabloonopslagplaats en wordt het project geïnitialiseerd in de huidige map of werkruimte.

  1. Wanneer u hierom wordt gevraagd, kiest u Selecteer een sjabloon en zoekt en selecteert u Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI.

  2. Voer desgevraagd een unieke omgevingsnaam in, zoals blobevents-powershell.

    Met deze opdracht worden de projectbestanden opgehaald uit de sjabloonopslagplaats en wordt het project geïnitialiseerd in de huidige map of werkruimte.

In azdde omgeving wordt een unieke implementatiecontext voor uw app onderhouden en kunt u meer dan één definiëren. Het maakt ook deel uit van de naam van de resourcegroep die u in Azure maakt.

Het local.settings.json-bestand toevoegen

Functions heeft het local.settings.json-bestand nodig om de host te configureren wanneer deze lokaal wordt uitgevoerd.

  1. Voer dit commando uit om naar de src app-map te gaan:

    cd src
    
  1. Maak een bestand met de naam local.settings.json in de src map die deze JSON-gegevens bevat:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Maak een bestand met de naam local.settings.json in de src map die deze JSON-gegevens bevat:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Maak een bestand met de naam local.settings.json in de src map die deze JSON-gegevens bevat:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Maak een bestand met de naam local.settings.json in de src map die deze JSON-gegevens bevat:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Maak een bestand met de naam local.settings.json in de src map die deze JSON-gegevens bevat:

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

Een virtuele omgeving maken en activeren

In de map src voert u deze opdrachten uit om een virtuele omgeving genaamd .venv te maken en te activeren:

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

Als Python het venv-pakket niet installeert in uw Linux-distributie, voert u de volgende opdracht uit:

sudo apt-get install python3-venv

Lokale opslagemulator instellen

Gebruik de Azurite-emulator om uw codeproject lokaal uit te voeren voordat u Azure-resources maakt en gebruikt.

  1. Als u dat nog niet hebt gedaan, installeert u Azurite.

  2. Druk op F1. Zoek en voer in het opdrachtenpalet de opdracht Azurite: Start uit om de lokale opslagemulator te starten.

  3. Vouw in het Azure-gebiedWerkruimte>Gekoppelde opslagaccounts>Lokale emulator uit, klik met de rechtermuisknop (Ctrl-klik op Mac) op Blobcontainers, selecteer Maak Blobcontainer..., en maak deze twee blobopslagcontainers in de lokale emulator.

    • unprocessed-pdf: container die door de trigger wordt bewaakt voor opslag gebeurtenissen.
    • processed-pdf: container waarin de functie verwerkte blobs als uitvoer verzendt.
  4. Vouw BlobContainers uit, klik met de rechtermuisknop (Ctrl-klik op Mac) niet-verwerkt-pdf, selecteer Bestanden uploaden..., druk op Enter om de hoofdmap te accepteren en upload de PDF-bestanden uit de data projectmap.

Wanneer u lokaal werkt, kunt u REST gebruiken om de functie te activeren door te simuleren dat de functie een bericht ontvangt van een gebeurtenisabonnement.

De functie lokaal uitvoeren

Visual Studio Code kan worden geïntegreerd met Azure Functions Core-hulpprogramma's , zodat u dit project kunt uitvoeren op uw lokale ontwikkelcomputer met behulp van de Emulator Van Azurite. De PDFProcessorSTORAGE omgevingsvariabele definieert de verbinding met het opslagaccount. Deze wordt ook ingesteld "UseDevelopmentStorage=true" in het local.settings.json-bestand wanneer het lokaal wordt uitgevoerd.

  1. Voer deze opdracht uit vanuit de src projectmap in een terminal of opdrachtprompt:

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

    Wanneer de Functions-host wordt gestart, worden de naam van de trigger en het triggertype naar de terminaluitvoer geschreven. In Functions bevat de hoofdmap van het project het host.json-bestand.

  2. Als Core Tools nog steeds wordt uitgevoerd in Terminal, opent u het test.http bestand in uw project en selecteert u Aanvraag verzenden om de ProcessBlobUpload functie te activeren door een test-blob-gebeurtenis naar de webhook van de blob-gebeurtenis te verzenden.

    Met deze stap wordt het ontvangen van een gebeurtenis van een gebeurtenisabonnement gesimuleerd wanneer deze lokaal wordt uitgevoerd. U ziet dan de aanvraag- en verwerkte bestandsgegevens die in de logboeken zijn geschreven. Als u geen REST-client gebruikt, moet u een ander beveiligd REST-hulpprogramma gebruiken om het eindpunt aan te roepen met de nettolading in test.http.

  3. Vouw in het Werkruimte-gebied voor de blobcontainer-instelling verwerkte-pdf uit en controleer of het PDF-bestand door de functie is verwerkt en is gekopieerd met een prefix.

  4. Wanneer u klaar bent, drukt u op Ctrl+C in het terminalvenster om het func.exe hostproces te stoppen.

De code bekijken (optioneel)

U kunt de code bekijken die de Event Grid-blobtrigger definieert in het ProcessBlobUpload.cs projectbestand. De functie laat zien hoe:

  • Gebruiken BlobTrigger met Source = BlobTriggerSource.EventGrid voor bijna realtime verwerking
  • Binden aan BlobClient voor de bron-blob en BlobContainerClient voor de bestemming
  • Blob-inhoud verwerken en naar een andere container kopiëren met behulp van streams

U kunt de code bekijken die de Event Grid-blobtrigger definieert in het function_app.py projectbestand. De functie laat zien hoe:

  • Gebruiken @app.blob_trigger met source="EventGrid" voor bijna realtime verwerking
  • Blob-inhoud openen met behulp van de InputStream parameter
  • Verwerkte bestanden naar de doelcontainer kopiëren met behulp van de Azure Storage SDK

U kunt de code bekijken die de Event Grid-blobtrigger definieert in het processBlobUpload.ts projectbestand. De functie laat zien hoe:

  • Gebruiken app.storageBlob() met source: 'EventGrid' voor bijna realtime verwerking
  • Toegang tot blob-inhoud met behulp van de Node.js Azure Storage SDK
  • Bestanden asynchroon verwerken en kopiëren naar de doelcontainer

U kunt de code bekijken die de Event Grid-blobtrigger definieert in het ProcessBlobUpload.java projectbestand. De functie laat zien hoe:

  • Gebruiken @BlobTrigger met source = "EventGrid" voor bijna realtime verwerking
  • Blob-inhoud openen met behulp van BlobInputStream parameter
  • Verwerkte bestanden kopiëren naar de doelcontainer met behulp van Azure Storage SDK voor Java

U kunt de code bekijken waarmee de Event Grid-blobtrigger wordt gedefinieerd in het projectbestand ProcessBlobUpload/run.ps1 en de bijbehorende function.json. De functie laat zien hoe:

  • Blob Trigger configureren met "source": "EventGrid" in function.json voor bijna realtime verwerking
  • Toegang tot blob-inhoud met behulp van PowerShell Azure Storage-cmdlets
  • Bestanden verwerken en kopiëren naar de doelcontainer met behulp van Azure PowerShell-modules

Nadat u uw functiecode lokaal hebt beoordeeld en gecontroleerd, is het tijd om het project te publiceren op Azure.

Azure-resources maken en implementeren

Gebruik de azd up opdracht om de functie-app te maken in een Flex Consumption-abonnement, samen met andere vereiste Azure-resources, inclusief het gebeurtenisabonnement. Nadat de infrastructuur gereed is, azd implementeert u ook uw projectcode in de nieuwe functie-app in Azure.

  1. Druk in Visual Studio Code op F1 om het opdrachtenpalet te openen. Zoek en voer de opdracht Azure Developer CLI (azd): Sign In with Azure Developer CLIuit en meld u aan met uw Azure-account.

  2. Druk in de hoofdmap van het project op F1 om het opdrachtenpalet te openen. Zoek en voer de opdracht Azure Developer CLI (azd): Provision and Deploy (up) uit om de vereiste Azure-resources te maken en uw code te implementeren.

  3. Wanneer u hierom wordt gevraagd in het terminalvenster, geeft u de volgende vereiste implementatieparameters op:

    Snel Description
    Selecteer een Azure-abonnement dat u wilt gebruiken Kies het abonnement waarin u uw resources wilt maken.
    Omgevingsnaam Een omgeving die wordt gebruikt voor het onderhouden van een unieke implementatiecontext voor uw app.
    Azure-locatie Azure-regio waarin de resourcegroep wordt gemaakt die de nieuwe Azure-resources bevat. Alleen regio's die momenteel ondersteuning bieden voor het Flex Consumption-abonnement, worden weergegeven.

    De azd up opdracht gebruikt uw antwoorden op deze prompts met de Bicep-configuratiebestanden om deze vereiste Azure-resources te maken en te configureren, volgens de meest recente aanbevolen procedures:

    • Flex Consumption-abonnement en functie-app
    • Azure Storage-account met blobcontainers
    • Application Insights (aanbevolen)
    • Toegangsbeleid en rollen voor uw account
    • Event Grid-abonnement voor blob-gebeurtenissen
    • Service-naar-service-verbindingen met behulp van beheerde identiteiten (in plaats van opgeslagen verbindingsreeksen)

    Nadat de opdracht is voltooid, wordt uw app uitgevoerd in Azure met een gebeurtenisabonnement dat is geconfigureerd om uw functie te activeren wanneer blobs worden toegevoegd aan de unprocessed-pdf container.

  4. Noteer de AZURE_STORAGE_ACCOUNT_NAME en AZURE_FUNCTION_APP_NAME in de uitvoer. Deze namen zijn respectievelijk uniek voor uw opslagaccount en functie-app in Azure.

De geïmplementeerde functie controleren

  1. Druk in Visual Studio Code op F1. Zoek en voer de opdracht Azure Storage: Upload Files...uit in het opdrachtenpalet. Accepteer de hoofdmap en upload net als voorheen een of meer PDF-bestanden uit de data projectmap.

  2. Wanneer u hierom wordt gevraagd, selecteert u de naam van uw nieuwe opslagaccount (van AZURE_STORAGE_ACCOUNT_NAME). Selecteer Blob Containers>unprocessed-pdf.

  3. Druk op F1. Zoek en voer de opdracht Azure Storage: Open in Exploreruit in het opdrachtenpalet. Selecteer hetzelfde opslagaccount >>verwerkt-pdf en open vervolgens in het nieuwe venster.

  4. Controleer in Explorer of de PDF-bestanden die u hebt geüpload, door uw functie zijn verwerkt. De uitvoer wordt met een processed-pdf voorvoegsel naar de processed- container geschreven.

De Event Grid-blobtrigger verwerkt bestanden binnen enkele seconden na het uploaden. Deze snelheid demonstreert de bijna realtime mogelijkheden van deze benadering vergeleken met traditionele op polling gebaseerde blobtriggers.

Uw code opnieuw implementeren

Voer de azd up opdracht zo vaak uit als nodig is om uw Azure-resources in te richten en code-updates te implementeren voor uw functie-app.

Opmerking

Geïmplementeerde codebestanden worden altijd overschreven door het nieuwste implementatiepakket.

Uw eerste antwoorden op azd prompts en eventuele omgevingsvariabelen die worden azd gegenereerd, worden lokaal opgeslagen in uw benoemde omgeving. Gebruik de azd env get-values opdracht om alle variabelen in uw omgeving te controleren die zijn gebruikt bij het maken van Azure-resources.

De hulpbronnen opschonen

Wanneer u klaar bent met het werken met uw functie-app en gerelateerde resources, gebruikt u deze opdracht om de functie-app en de bijbehorende resources uit Azure te verwijderen. Met deze actie voorkomt u verdere kosten:

azd down --no-prompt

Opmerking

Met de --no-prompt optie krijgt u de opdracht azd om uw resourcegroep te verwijderen zonder een bevestiging van u.

Deze opdracht heeft geen invloed op uw lokale codeproject.