Esercitazione: Attivare Funzioni di Azure in contenitori BLOB usando una sottoscrizione di eventi

Le versioni precedenti del trigger di Archiviazione BLOB di Funzioni di Azure eseguano il polling del contenitore di archiviazione per le modifiche. La versione più recente dell'estensione di archiviazione BLOB (5.x+) usa invece una sottoscrizione di eventi di Griglia di eventi nel contenitore. Questa sottoscrizione di eventi riduce la latenza attivando immediatamente la funzione quando si verificano modifiche nel contenitore sottoscritto.

Questo articolo illustra come creare una funzione eseguita in base agli eventi generati quando un BLOB viene aggiunto a un contenitore. Si usa Visual Studio Code per lo sviluppo locale e per convalidare il codice prima di distribuire il progetto in Azure.

  • Creare una funzione attivata da Archiviazione BLOB basata su eventi in un nuovo progetto.
  • Convalidare localmente in Visual Studio Code usando l'emulatore Azurite.
  • Creare un contenitore di archiviazione BLOB in un nuovo account di archiviazione in Azure.
  • Creare un'app per le funzioni nel piano A consumo flessibile (anteprima).
  • Creare una sottoscrizione di eventi al nuovo contenitore BLOB.
  • Distribuire e convalidare il codice della funzione in Azure.

Questo articolo supporta la versione 4 del modello di programmazione Node.js per Funzioni di Azure.

Questo articolo supporta la versione 2 del modello di programmazione Python per Funzioni di Azure.

Questo articolo crea un'app C# eseguita in modalità di lavoro isolata, che supporta .NET 8.0.

Importante

Questa esercitazione include l'uso del piano A consumo flessibile, attualmente disponibile in anteprima. Il piano A consumo flessibile supporta solo la versione basata su eventi del trigger di archiviazione BLOB. È possibile completare questa esercitazione usando qualsiasi altro piano di hosting per l'app per le funzioni.

Prerequisiti

Nota

L'estensione Archiviazione di Azure per Visual Studio Code è attualmente in anteprima.

Creare una funzione attivata dal BLOB

Quando si crea una funzione trigger di archiviazione BLOB usando Visual Studio Code, si crea anche un nuovo progetto. È necessario modificare la funzione per utilizzare una sottoscrizione di eventi come origine, anziché usare il normale contenitore sottoposto a polling.

  1. In Visual Studio Code aprire l'app per le funzioni.

  2. Premere F1 per aprire il riquadro comandi, immettere Azure Functions: Create Function...e selezionare Crea nuovo progetto.

  3. Per l'area di lavoro del progetto, selezionare il percorso della directory. Assicurarsi di creare una nuova cartella o scegliere una cartella vuota per l'area di lavoro del progetto.

    Non scegliere una cartella di progetto che fa già parte di un'area di lavoro.

  4. Quando richiesto, immettere le informazioni seguenti:

    Richiesta Azione
    Selezionare una lingua Selezionare C#.
    Selezionare un runtime .NET Selezionare .NET 8.0 Isolated LTS.
    Selezionare un modello per la prima funzione del progetto Selezionare Azure Blob Storage trigger (using Event Grid).
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Specificare uno spazio dei nomi Immetti My.Functions.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare la sottoscrizione Selezionare la propria sottoscrizione.
    Selezionare un account di archiviazione Usare l'emulatore Azurite per l'archiviazione locale.
    Percorso nell'account di archiviazione che verrà monitorato dal trigger Accettare il valore predefinito samples-workitems.
    Selezionare come si vuole aprire il progetto Selezionare Open in current window.
    Richiesta Azione
    Selezionare una lingua Selezionare Python.
    Selezionare l'interprete Python per creare un ambiente virtuale Selezionare l'interprete Python preferito. Se un'opzione non viene visualizzata, inserire il percorso completo del file binario di Python.
    Selezionare un modello per la prima funzione del progetto Selezionare Azure Blob Storage trigger (using Event Grid).
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare la sottoscrizione Selezionare la propria sottoscrizione.
    Selezionare un account di archiviazione Usare l'emulatore Azurite per l'archiviazione locale.
    Percorso nell'account di archiviazione che verrà monitorato dal trigger Accettare il valore predefinito samples-workitems.
    Selezionare come si vuole aprire il progetto Selezionare Open in current window.
    Richiesta Azione
    Selezionare una lingua Selezionare Java.
    Selezionare una versione di Java Selezionare Java 11 o Java 8, la versione Java in cui vengono eseguite le funzioni in Azure e che sono state verificate in locale.
    Specificare un ID gruppo Selezionare com.function.
    Specificare un ID artefatto Selezionare BlobTriggerEventGrid.
    Specificare una versione Selezionare 1.0-SNAPSHOT.
    Specificare un nome di pacchetto Selezionare com.function.
    Specificare un nome di app Accettare il nome generato a partire da BlobTriggerEventGrid.
    Selezionare lo strumento di compilazione per il progetto Java Selezionare Maven.
    Selezionare come si vuole aprire il progetto Selezionare Open in current window.
    Richiesta Azione
    Selezionare un linguaggio per il progetto di funzione Selezionare TypeScript.
    Selezionare un modello di programmazione TypeScript Selezionare Model V4.
    Selezionare un modello per la prima funzione del progetto Selezionare Azure Blob Storage trigger (using Event Grid).
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare la sottoscrizione Selezionare la propria sottoscrizione.
    Selezionare un account di archiviazione Usare l'emulatore Azurite per l'archiviazione locale.
    Percorso nell'account di archiviazione che verrà monitorato dal trigger Accettare il valore predefinito samples-workitems.
    Selezionare come si vuole aprire il progetto Selezionare Open in current window.
    Richiesta Azione
    Selezionare un linguaggio per il progetto di funzione Selezionare JavaScript.
    Selezionare un modello di programmazione JavaScript Selezionare Model V4.
    Selezionare un modello per la prima funzione del progetto Selezionare Azure Blob Storage trigger (using Event Grid).
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare la sottoscrizione Selezionare la propria sottoscrizione.
    Selezionare un account di archiviazione Usare l'emulatore Azurite per l'archiviazione locale.
    Percorso nell'account di archiviazione che verrà monitorato dal trigger Accettare il valore predefinito samples-workitems.
    Selezionare come si vuole aprire il progetto Selezionare Open in current window.
    Richiesta Azione
    Selezionare un linguaggio per il progetto di funzione Selezionare PowerShell.
    Selezionare un modello per la prima funzione del progetto Selezionare Azure Blob Storage trigger (using Event Grid).
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare la sottoscrizione Selezionare la propria sottoscrizione.
    Selezionare un account di archiviazione Usare l'emulatore Azurite per l'archiviazione locale.
    Percorso nell'account di archiviazione che verrà monitorato dal trigger Accettare il valore predefinito samples-workitems.
    Selezionare come si vuole aprire il progetto Selezionare Open in current window.

Aggiornare l'estensione di archiviazione

Per usare il trigger di archiviazione BLOB basato su Griglia di eventi, è necessario avere almeno la versione 5.x dell'estensione Archiviazione funzioni di Azure.

Per aggiornare il progetto con la versione dell'estensione richiesta, nella finestra Terminale eseguire questo comando dotnet add package:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 
  1. Aprire il file di progetto host.json ed esaminare l'elemento extensionBundle.

  2. Se extensionBundle.version non è almeno 3.3.0 , sostituire l'elemento extensionBundle con questa versione:

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
    

Preparare l'emulazione dell'archiviazione locale

Visual Studio Code usa Azurite per emulare i servizi di Archiviazione di Azure durante l'esecuzione in locale. Si usa Azurite per emulare il servizio archiviazione BLOB di Azure durante lo sviluppo e il test locali.

  1. Se non è già stato fatto, installare l'estensione Azurite v3 per Visual Studio Code.

  2. Verificare che il file local.settings.json abbia "UseDevelopmentStorage=true" impostato per AzureWebJobsStorage, che indica a Core Tools di usare Azurite invece di una connessione dell'account di archiviazione reale durante l'esecuzione in locale.

  3. Premere F1 per aprire il riquadro comandi, digitare Azurite: Start Blob Service e premere INVIO, che avvia l'emulatore del servizio di archiviazione BLOB di Azure.

  4. Selezionare l'icona di Azure nella barra delle attività, espandere Area di lavoro>Account di archiviazione collegati>Emulatore locale, fare clic con il pulsante destro del mouse su Contenitori BLOB, selezionare Crea contenitore BLOB...,immettere il nome samples-workitems e premere Invio.

    Screenshot che mostra come selezionare Crea contenitore BLOB nell'emulazione locale in Visual Studio Code.

  5. Espandere Contenitori BLOB>samples-workitems e selezionare Carica file....

    Screenshot che mostra come selezionare Carica file nel contenitore samples-workitems nell'emulazione locale in Visual Studio Code.

  6. Scegliere un file da caricare nel contenitore emulato in locale. Questo file viene elaborato in un secondo momento dalla funzione per verificare ed eseguire il debug del codice della funzione. Un file di testo potrebbe funzionare meglio con il codice del modello di trigger BLOB.

Eseguire la funzione in locale

Con un file nell'archiviazione emulata, è possibile eseguire la funzione per simulare un evento generato da una sottoscrizione di Griglia di eventi. Le informazioni sull'evento passate al trigger dipendono dal file aggiunto al contenitore locale.

  1. Impostare eventuali punti di interruzione e premere F5 per avviare il progetto per il debug locale. Gli strumenti di base di Funzioni di Azure devono essere in esecuzione nella finestra del terminale.

  2. Nell'area di Azure espandere Area di lavoro>Progetto locale>Funzioni, fare clic con il pulsante destro del mouse sulla funzione e selezionare Esegui funzione ora.....

    Screenshot che mostra come selezionare il pulsante Esegui funzione dalla funzione nell'area di lavoro del progetto locale in Visual Studio Code.

  3. Nella finestra di dialogo corpo della richiesta digitare samples-workitems/<TEST_FILE_NAME>, sostituendo <TEST_FILE_NAME> con il nome del file caricato nell'emulatore di archiviazione locale.

  4. Premere INVIO per eseguire la funzione. Il valore specificato è il percorso del BLOB nell'emulatore locale. Questa stringa viene passata al trigger nel payload della richiesta, che simula il payload quando una sottoscrizione di eventi chiama la funzione per segnalare l'aggiunta di un BLOB al contenitore.

  5. Esaminare l'output di questa esecuzione della funzione. Nell'output verrà visualizzato il nome del file e il relativo contenuto registrati. Se si impostano punti di interruzione, potrebbe essere necessario continuare l'esecuzione.

Dopo aver convalidato correttamente il codice della funzione in locale, è possibile pubblicare il progetto in una nuova app per le funzioni in Azure.

Preparare l'account di archiviazione di Azure

Le sottoscrizioni di eventi ad Archiviazione di Azure richiedono un account di archiviazione per utilizzo generico v2. È possibile usare l'estensione Archiviazione di Azure per Visual Studio Code per creare questo account di archiviazione.

  1. In Visual Studio Code premere nuovamente F1 per aprire il riquadro comandi e digitare Azure Storage: Create Storage Account.... Specificare queste informazioni quando richiesto:

    Richiesta Azione
    Immettere il nome del nuovo account di archiviazione Specificare un nome globalmente univoco. I nomi degli account di archiviazione devono contenere da 3 a 24 caratteri con solo lettere minuscole e numeri. Per semplificare l'identificazione, viene usato lo stesso nome per il gruppo di risorse e il nome dell'app per le funzioni.
    Selezionare una località per le nuove risorse per prestazioni ottimali, scegliere un'area vicina.

    L'estensione crea un account di archiviazione per utilizzo generico v2 con il nome specificato. Lo stesso nome viene usato anche per il gruppo di risorse che contiene l'account di archiviazione. Il trigger di archiviazione BLOB basato su Griglia di eventi richiede un account di archiviazione per utilizzo generico v2.

  2. Premere di nuovo F1 e nel riquadro comandi immettere Azure Storage: Create Blob Container.... Specificare queste informazioni quando richiesto:

    Richiesta Azione
    Selezionare una risorsa Selezionare l'account di archiviazione per utilizzo generico v2 creato.
    Immettere un nome per il nuovo contenitore BLOB Immettere samples-workitems, ovvero il nome del contenitore a cui si fa riferimento nel progetto di codice.

Per eseguire l'app per le funzioni è necessario anche un account di archiviazione. Per semplicità, questa esercitazione usa lo stesso account di archiviazione per il trigger BLOB e l'app per le funzioni. Nell'ambiente di produzione, tuttavia, potrebbe essere necessario usare un account di archiviazione separato con l'app per le funzioni. Per altre informazioni, vedere Considerazioni sull'archiviazione per Funzioni di Azure.

Creare l'app per le funzioni

Usare questi passaggi per creare un'app per le funzioni nel piano A consumo flessibile. Quando l'app è ospitata in un piano A consumo flessibile, i trigger di archiviazione BLOB devono usare sottoscrizioni di eventi.

  1. Nel riquadro comandi immettere Funzioni di Azure: Creare un'app in Azure... (Avanzate).

  2. Seguendo le istruzioni, specificare queste informazioni:

    Richiesta Selezione
    Immettere un nome univoco a livello globale per la nuova app per le funzioni. Digitare un nome univoco globale che identifichi la nuova app per le funzioni e quindi selezionare INVIO. I caratteri validi per un nome di app per le funzioni sono a-z, 0-9 e -.
    Selezionare un piano di hosting. Scegliere A consumo Flex (Anteprima).
    Selezionare uno stack di runtime. Scegliere la versione e lo stack della lingua in cui è stato eseguito localmente.
    Selezionare un gruppo di risorse per le nuove risorse. Scegliere il gruppo di risorse esistente in cui è stato creato l'account di archiviazione.
    Selezionare una località per le nuove risorse. Selezionare una località in un'area supportata nelle vicinanze o nelle vicinanze di altri servizi a cui accedono le funzioni. Le aree non supportate non vengono visualizzate. Per altre informazioni, vedere Visualizzare le aree attualmente supportate.
    Selezionare un account di archiviazione. Scegliere il nome dell'account di archiviazione creato.
    Selezionare una risorsa di Application Insights per l'app. Scegliere Crea nuova risorsa di Application Insights e al prompt specificare il nome dell'istanza usata per archiviare i dati di runtime dalle funzioni.

    Una notifica viene visualizzata dopo la creazione dell'app per le funzioni. Selezionare Visualizza output nelle notifiche per visualizzare i risultati della creazione, incluse le risorse di Azure create.

Distribuire il codice di funzione

Importante

La distribuzione in un'app per le funzioni esistente sovrascrive sempre il contenuto di tale app in Azure.

  1. Nel riquadro comandi immettere quindi selezionare Funzioni di Azure: distribuisci nell'app per le funzioni.

  2. Selezionare l'app per le funzioni appena creata. Quando viene richiesto di sovrascrivere le distribuzioni precedenti, selezionare Distribuisci per distribuire il codice della funzione nella nuova risorsa dell'app per le funzioni.

  3. Al termine della distribuzione, selezionare Visualizza output per visualizzare i risultati della creazione e della distribuzione, incluse le risorse di Azure create. Se non si riesce a visualizzare la notifica, selezionare l'icona della campana nell'angolo in basso a destra per visualizzarla di nuovo.

    Screenshot della finestra Visualizza output.

Aggiornare le impostazioni dell'applicazione

Poiché le impostazioni dell'applicazione necessarie dal file local.settings.json non vengono pubblicate automaticamente, è necessario caricarle nell'app per le funzioni in modo che la funzione venga eseguita correttamente in Azure.

  1. Nel riquadro comandi immettere Azure Functions: Download Remote Settings... e nel prompt Selezionare una risorsa scegliere il nome dell'app per le funzioni.

  2. Quando viene richiesto che l'impostazione AzureWebJobsStorage esista già, selezionare per sovrascrivere l'impostazione dell'emulatore locale con la stringa di connessione effettiva dell'account di archiviazione da Azure.

  3. Nel file local.settings.json sostituire l'impostazione dell'emulatore locale con la stessa stringa di connessione usata per AzureWebJobsStorage.

  4. Rimuovere la voce FUNCTIONS_WORKER_RUNTIME, che non è supportata in un piano A consumo flessibile.

  5. Nel riquadro comandi immettere Azure Functions: Upload Local Settings... e nel prompt Selezionare una risorsa scegliere il nome dell'app per le funzioni.

Ora sia l'host funzioni che il trigger condividono lo stesso account di archiviazione.

Compilare l'URL dell'endpoint

Per creare una sottoscrizione di eventi, è necessario fornire a Griglia di eventi l'URL dell'endpoint specifico per segnalare gli eventi di archiviazione BLOB. Questo URL dell'estensione BLOB è costituito dalle seguenti parti:

In parte Esempio
URL dell'app per le funzioni di base https://<FUNCTION_APP_NAME>.azurewebsites.net
Percorso specifico del BLOB /runtime/webhooks/blobs
Stringa di query della funzione ?functionName=Host.Functions.BlobTriggerEventGrid
Chiave di accesso dell'estensione BLOB &code=<BLOB_EXTENSION_KEY>

La chiave di accesso all'estensione BLOB è progettata per rendere più difficile per altri utenti accedere all'endpoint dell'estensione BLOB. Per determinare la chiave di accesso dell'estensione BLOB:

  1. In Visual Studio Code scegliere l'icona di Azure nella barra delle attività. In Risorseespandere la sottoscrizione, espandere App per le funzioni, fare clic con il pulsante destro del mouse sull'app per le funzioni creata e selezionare Apri nel portale.

  2. In Funzioni nel menu a sinistra selezionare Chiavi dell'app.

  3. In Chiavi di sistema selezionare la chiave denominata blobs_extensione copiare la chiave Valore.

    Questo valore viene incluso nella stringa di query del nuovo URL dell'endpoint.

  4. Creare un nuovo URL dell'endpoint per il trigger di archiviazione BLOB in base all'esempio seguente:

    https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>
    

    In questo esempio sostituire <FUNCTION_APP_NAME> con il nome dell'app per le funzioni e sostituire <BLOB_EXTENSION_KEY> con il valore ottenuto nel portale. Se è stato usato un nome differente per la funzione, sarà anche necessario modificare il valore della stringa di query functionName con il nome della funzione.

È ora possibile usare questo URL dell'endpoint per creare una sottoscrizione di eventi.

Creare la sottoscrizione di eventi

Una sottoscrizione di eventi, basata su Griglia di eventi di Azure, genera eventi in base alle modifiche nel contenitore BLOB sottoscritto. Questo evento viene quindi inviato all'endpoint dell'estensione BLOB per la funzione. Dopo aver creato una sottoscrizione di eventi, non è possibile aggiornare l'URL dell'endpoint.

  1. In Visual Studio Code scegliere l'icona di Azure nella barra delle attività. In Risorseespandere la sottoscrizione, espandere Account di archiviazione, fare clic con il pulsante destro del mouse sull'account di archiviazione creato in precedenza e selezionare Apri nel portale.

  2. Accedere al portale di Azure e prendere nota del gruppo di risorse per l'account di archiviazione. Le altre risorse vengono create nello stesso gruppo per semplificare la pulizia delle risorse al termine.

  3. selezionare l'opzione Eventi nel menu a sinistra.

    Aggiungere un evento dell'account di archiviazione

  4. Nella finestra Eventi selezionare il pulsante + Sottoscrizione di eventi e specificare i valori della tabella seguente nella scheda Basic:

    Impostazione Valore suggerito Description
    Nome myBlobEventSub Nome che identifica la sottoscrizione dell'evento. È possibile usare il nome per trovare rapidamente la sottoscrizione di eventi.
    Schema di eventi Schema griglia di eventi Usare lo schema predefinito per gli eventi.
    Nome dell'argomento del sistema samples-workitems-blobs Nome per l'argomento, che rappresenta il contenitore. L'argomento viene creato con la prima sottoscrizione e verrà usato per le sottoscrizioni di eventi future.
    Filtra per tipi di evento Blob created (BLOB creato)
    Tipo di endpoint Webhook Il trigger di archiviazione BLOB usa un endpoint web hook.
    Endpoint Endpoint DELL'URL basato su Azure Usare l'endpoint URL creato, che include il valore della chiave.
  5. Selezionare Conferma selezione per convalidare l'URL dell'endpoint.

  6. Selezionare Crea per creare la sottoscrizione di eventi.

Caricare un file nel contenitore

È possibile caricare un file dal computer nel contenitore di archiviazione BLOB usando Visual Studio Code.

  1. In Visual Studio Code premere F1 per aprire il riquadro comandi e digitare Azure Storage: Upload Files....

  2. Nella finestra di dialogo Apri scegliere un file, preferibilmente un file di testo e selezionare Carica.

  3. Quando richiesto, immettere le informazioni seguenti:

    Impostazione Valore suggerito Descrizione
    Immettere la directory di destinazione del caricamento impostazione predefinita Accettare solo il valore predefinito di /, ovvero la radice del contenitore.
    Selezionare una risorsa Nome account di archiviazione Scegliere il nome dell'account di archiviazione creato in un passaggio precedente.
    Selezionare un tipo di risorsa Contenitori BLOB Si sta caricando in un contenitore BLOB.
    Selezionare il contenitore BLOB samples-workitems Questo valore è il nome del contenitore creato in un passaggio precedente.

Esplorare il file system locale per trovare un file da caricare, quindi selezionare il pulsante Carica per caricare il file.

Verificare la funzione in Azure

Ora che è stato caricato un file nel contenitore samples-workitems, la funzione deve essere attivata. È possibile verificare controllando quanto segue nel portale di Azure:

  1. Nell'account di archiviazione andare alla pagina Eventi e selezionare Sottoscrizioni a eventi; si dovrebbe vedere che è stato recapitato un evento. Potrebbe verificarsi un ritardo di cinque minuti per l'evento da visualizzare nel grafico.

  2. Tornare alla pagina dell'app per le funzioni nel portale, in Funzioni trovare la funzione e selezionare Chiamate e altro ancora. Verranno visualizzate tracce scritte dall'esecuzione corretta della funzione.

Pulire le risorse

Per continuare con il passaggio successivo e aggiungere alla funzione un'associazione alla coda di Archiviazione di Azure, sarà necessario mantenere tutte le risorse esistenti per poterle riutilizzare.

In caso contrario, seguire questa procedura per eliminare l'app per le funzioni e le risorse correlate per evitare l'addebito di costi aggiuntivi.

  1. In Visual Studio Code premere F1 per aprire il riquadro comandi. Nel riquadro comandi cercare e selezionare Azure: Open in portal.

  2. Scegliere l'app per le funzioni e premere INVIO. La pagina dell'app per le funzioni viene aperta nel portale di Azure.

  3. Nella scheda Panoramica selezionare il collegamento accanto a Gruppo di risorse.

    Screenshot di Selezionare il gruppo di risorse da eliminare nella pagina dell'app per le funzioni.

  4. Nella pagina Gruppo di risorse, esaminare l'elenco delle risorse incluse e verificare che siano quelle da eliminare.

  5. Selezionare Elimina gruppo di risorse e seguire le istruzioni.

    L'eliminazione potrebbe richiedere alcuni minuti. Al termine, viene visualizzata una notifica per pochi secondi. È anche possibile selezionare l'icona a forma di campana nella parte superiore della pagina per visualizzare la notifica.

Per altre informazioni sui costi di Funzioni di Azure, vedere Stima dei costi del piano a consumo.

Passaggi successivi