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

Se si usano versioni precedenti del trigger di Archiviazione BLOB con Funzioni di Azure, spesso si ottengono esecuzioni ritardate perché il trigger esegue il polling del contenitore BLOB per gli aggiornamenti. È possibile ridurre la latenza attivando la funzione usando una sottoscrizione di eventi allo stesso contenitore. La sottoscrizione di eventi inoltra le modifiche nel contenitore come eventi utilizzati dalla funzione tramite Griglia di eventi. È possibile implementare questa funzionalità con Visual Studio Code con l'estensione Funzioni di Azure più recente.

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

  • Creare un account di archiviazione generale v2 in Archiviazione di Azure.
  • Creare un contenitore nell'archivio BLOB.
  • Creare un BLOB basato su eventi Archiviazione funzione attivata.
  • Creare una sottoscrizione di eventi a un contenitore BLOB.
  • Eseguire il debug in locale usando ngrok caricando i file.
  • Eseguire la distribuzione in Azure e creare una sottoscrizione di eventi filtrata.

Importante

Questo articolo usa schede per supportare più versioni del modello di programmazione Node.js. Il modello v4 è disponibile a livello generale ed è progettato per offrire un'esperienza più flessibile e intuitiva per gli sviluppatori JavaScript e TypeScript. Per altre informazioni sul funzionamento del modello v4, vedere la guida per sviluppatori di Funzioni di Azure Node.js. Per altre informazioni sulle differenze tra v3 e v4, vedere la guida alla migrazione.

Prerequisiti

Nota

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

Creare un account di archiviazione

Per usare una sottoscrizione di eventi con Archiviazione di Azure, è necessario un account di archiviazione per utilizzo generico v2. Per impostazione predefinita, è possibile creare questo account di archiviazione dal progetto di Visual Studio Code quando è installata l'estensione Archiviazione di Azure.

  1. In Visual Studio Code aprire il riquadro comandi (premere F1), immettere Azure Storage: Create Storage Account.... Alle richieste specificare le informazioni seguenti:

    Richiesta Azione
    Immettere il nome del nuovo account di archiviazione Specificare un nome globalmente univoco. Archiviazione nomi di account devono contenere da 3 a 24 caratteri con solo lettere minuscole e numeri. Per semplificare l'identificazione, si userà lo stesso nome per il gruppo di risorse e il nome dell'app per le funzioni.
    Selezionare un percorso 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.

  2. Dopo aver creato l'account di archiviazione, aprire il riquadro comandi (premere F1) e immettere Azure Storage: Create Blob Container.... Alle richieste specificare le informazioni seguenti:

    Richiesta Azione
    Selezionare una risorsa Selezionare l'account di archiviazione 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.

Ora che è stato creato il contenitore BLOB, è possibile creare sia la funzione che attiva in questo contenitore che la sottoscrizione di eventi che recapita gli eventi alla funzione.

Creare una funzione attivata dal BLOB

Quando si crea una funzione attivata dal BLOB Archiviazione 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. Aprire il riquadro comandi (premere F1), 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 di 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. Alle richieste specificare le informazioni seguenti:

    Richiesta Azione
    Selezionare una lingua Selezionare C#.
    Selezionare un runtime .NET Selezionare .NET 6.0 Isolated LTS per l'esecuzione in un processo di lavoro isolato o .NET 6.0 LTS per in-process.
    Selezionare un modello per la prima funzione del progetto Selezionare Azure Blob Storage trigger.
    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 un account di archiviazione Selezionare l'account di archiviazione creato dall'elenco.
    Questo è il percorso all'interno dell'account di archiviazione che il trigger monitorerà Accettare il valore samples-workitemspredefinito .
    Selezionare la modalità di apertura del progetto Selezionare Open in current window.
    Richiesta Azione
    Selezionare una lingua Selezionare Python.
    Selezionare un interprete Python per creare un ambiente virtuale Selezionare l'interprete Python preferito. Se non viene visualizzata un'opzione, immettere il percorso completo del file binario Python.
    Selezionare un modello per la prima funzione del progetto Selezionare Azure Blob Storage trigger.
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare un account di archiviazione Selezionare l'account di archiviazione creato dall'elenco.
    Questo è il percorso all'interno dell'account di archiviazione che il trigger monitorerà Accettare il valore samples-workitemspredefinito .
    Selezionare la modalità di apertura del 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 dell'app Accettare il nome generato a partire da BlobTriggerEventGrid.
    Selezionare lo strumento di compilazione per il progetto Java Selezionare Maven.
    Selezionare la modalità di apertura del 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.
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare un account di archiviazione Selezionare l'account di archiviazione creato.
    Questo è il percorso all'interno dell'account di archiviazione che il trigger monitorerà Accettare il valore samples-workitemspredefinito .
    Selezionare la modalità di apertura del 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.
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare un account di archiviazione Selezionare l'account di archiviazione creato.
    Questo è il percorso all'interno dell'account di archiviazione che il trigger monitorerà Accettare il valore samples-workitemspredefinito .
    Selezionare la modalità di apertura del 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.
    Specificare un nome di funzione Immetti BlobTriggerEventGrid.
    Selezionare l'impostazione da "local.settings.json" Selezionare Create new local app setting.
    Selezionare un account di archiviazione Selezionare l'account di archiviazione creato.
    Questo è il percorso all'interno dell'account di archiviazione che il trigger monitorerà Accettare il valore samples-workitemspredefinito .
    Selezionare la modalità di apertura del progetto Selezionare Open in current window.
  5. Dopo aver visualizzato il prompt, selezionare Selezionare l'account>di archiviazione Aggiungi all'area di lavoro.

Per semplicità, questa esercitazione riutilizza lo stesso account di archiviazione con 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.

Aggiornare l'estensione Archiviazione

Per usare il trigger di Archiviazione BLOB basato su Griglia di eventi, la funzione richiede almeno la versione 5.x per l'estensione Archiviazione.

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

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

  2. Se extensionBundle.version non è almeno 3.3.0 , sostituire extensionBundle con la versione più recente:

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

Aggiornare la funzione per usare gli eventi

Nel file BlobTriggerEventGrid.cs aggiungere Source = BlobTriggerSource.EventGrid ai parametri per l'attributo trigger BLOB, ad esempio:

[Function("BlobTriggerCSharp")]
public async Task Run([BlobTrigger("samples-workitems/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")] Stream myBlob, string name, FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("BlobTriggerCSharp");
    logger.LogInformation($"C# Blob trigger function Processed blob\n Name: {name} \n Size: {myBlob.Length} Bytes");
}

Dopo aver creato la funzione, nel file di configurazione function.json aggiungere "source": "EventGrid" all'associazione myBlob , ad esempio:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "samples-workitems/{name}",
      "source": "EventGrid",
      "connection": "<NAMED_STORAGE_CONNECTION>"
    }
  ]
}
  1. Nel file generato Function.java sostituire il contenuto con il codice seguente e rinominare il file in BlobTriggerEventGrid.java:

    package com.function;
    
    import com.microsoft.azure.functions.annotation.*;
    import com.microsoft.azure.functions.*;
    
    /**
    * Azure Functions with Azure Blob trigger.
    */
    public class BlobTriggerEventGrid {
        /**
        * This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
        */
        @FunctionName("BlobTriggerEventGrid")
        @StorageAccount("glengatesteventgridblob_STORAGE")
        public void run(
            @BlobTrigger(name = "content", path = "samples-workitems/{name}", dataType = "binary", source = "EventGrid" ) byte[] content,
            @BindingName("name") String name,
            final ExecutionContext context
        ) {
              context.getLogger().info("Java Blob trigger function processed a blob. Name: " + name + "\n  Size: " + content.length + " Bytes");
          }
     }
    
  2. Rimuovere il file di unit test associato, che non si applica più al nuovo tipo di trigger.

Dopo aver creato la funzione, aggiungere source: "EventGrid" all'oggetto options nel file TypeScript, ad esempio:

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: storageBlobTrigger1,
});

Dopo aver creato la funzione, aggiungere source: "EventGrid" all'oggetto options nel file JavaScript, ad esempio:

const { app } = require('@azure/functions');

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

Dopo aver creato la funzione, nel file di configurazione function.json aggiungere "source": "EventGrid" all'associazione myBlob , ad esempio:

{
    "bindings": [
        {
            "name": "myblob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "source": "EventGrid",
            "connection": "<NAMED_STORAGE_CONNECTION>"
        }
    ]
}

Avviare il debug locale

Griglia di eventi convalida l'URL dell'endpoint quando si crea una sottoscrizione di eventi nel portale di Azure. Questa convalida significa che prima di poter creare una sottoscrizione di eventi per il debug locale, la funzione deve essere in esecuzione in locale con accesso remoto abilitato dall'utilità ngrok. Se il codice della funzione locale non è in esecuzione e accessibile ad Azure, non sarà possibile creare la sottoscrizione di eventi.

Determinare l'endpoint del trigger BLOB

Quando la funzione viene eseguita in locale, l'endpoint predefinito usato per un trigger di archiviazione BLOB basato su eventi è simile all'URL seguente:

http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid
http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid

Salvare questo percorso, che verrà usato in un secondo momento per creare GLI URL degli endpoint per le sottoscrizioni di eventi. Se è stato usato un nome diverso per il BLOB Archiviazione funzione attivata, è necessario modificare il functionName valore nella stringa di query.

Nota

Poiché l'endpoint gestisce gli eventi per un trigger di Archiviazione BLOB, il percorso dell'endpoint include blobs. L'URL dell'endpoint per un trigger di Griglia di eventi sarà eventgrid invece presente nel percorso.

Eseguire ngrok

Per interrompere il debug di una funzione nel computer, è necessario fornire un modo per Griglia di eventi di Azure comunicare con le funzioni in esecuzione nel computer locale.

L'utilità ngrok inoltra richieste esterne a un indirizzo del server proxy generato in modo casuale a un indirizzo e una porta specifici nel computer locale. tramite per chiamare l'endpoint webhook della funzione in esecuzione nel computer.

  1. Avviare ngrok usando il comando seguente:

    ngrok.exe http http://localhost:7071
    

    All'avvio dell'utilità, la finestra di comando dovrebbe essere simile alla schermata seguente:

    Screenshot that shows the Command Prompt after starting the

  2. Copiare l'URL HTTPS generato quando ngrok viene eseguito. Questo valore viene usato per determinare l'endpoint del webhook nel computer esposto tramite ngrok.

Importante

A questo punto, non arrestare ngrok. Ogni volta che si avvia ngrok, l'URL HTTPS viene rigenerato con un valore diverso. Poiché l'endpoint di una sottoscrizione di eventi non può essere modificato, è necessario creare una nuova sottoscrizione di eventi ogni volta che si esegue ngrok.

A meno che non si crei un account ngrok, il tempo massimo di sessione ngrok è limitato a due ore.

Compilare l'URL dell'endpoint

L'endpoint usato nella sottoscrizione di eventi è costituito da tre parti diverse, un nome del server con prefisso, un percorso e una stringa di query. La tabella seguente descrive queste parti:

Parte URL Descrizione
Prefisso e nome del server Quando la funzione viene eseguita localmente, il nome del server con un https:// prefisso proviene dall'URL di inoltro generato da ngrok. Nell'URL localhost l'URL di ngrok sostituisce http://localhost:7071. Quando si esegue in Azure, si userà invece il server app per le funzioni pubblicato, che in genere è nel formato https://<FUNCTION_APP_NAME>.azurewebsites.net.
Percorso La parte del percorso dell'URL dell'endpoint proviene dall'URL localhost copiato in precedenza e ha un aspetto simile /runtime/webhooks/blobs a un trigger di Archiviazione BLOB. Il percorso di un trigger di Griglia di eventi sarà /runtime/webhooks/EventGrid
Stringa di query Per tutti i linguaggi, incluso .NET Isolated, il functionName=Host.Functions.BlobTriggerEventGrid parametro , ad eccezione di .NET In-process che deve trovarsi functionName=BlobTriggerEventGrid nella stringa di query imposta il nome della funzione che gestisce l'evento. Se è stato usato un nome diverso per la funzione, sarà necessario modificare questo valore. Quando si esegue in locale, non è necessaria una chiave di accesso. Quando si esegue in Azure, è anche necessario includere un code= parametro nell'URL, che contiene una chiave che è possibile ottenere dal portale.

Lo screenshot seguente mostra un esempio di aspetto dell'URL dell'endpoint finale quando si usa un trigger di Archiviazione BLOB denominato BlobTriggerEventGrid:

Endpoint selection

Consente di iniziare il debug

Con ngrok già in esecuzione, avviare il progetto locale come segue:

  1. Impostare un punto di interruzione nella funzione sulla riga che gestisce la registrazione.

  2. Avviare una sessione di debug.

    Aprire un nuovo terminale ed eseguire il comando seguente mvn per avviare la sessione di debug.

    mvn azure-functions:run -DenableDebug
    

    Premere F5 per avviare una sessione di debug.

Con le richieste di inoltro del codice in esecuzione e ngrok, è possibile creare una sottoscrizione di eventi al contenitore BLOB.

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 collegato. Questo evento viene quindi inviato all'endpoint del webhook sul trigger della funzione. Dopo aver creato una sottoscrizione di eventi, l'URL dell'endpoint non può essere modificato. Ciò significa che dopo aver completato il debug locale (o se si riavvia ngrok), sarà necessario eliminare e ricreare la sottoscrizione di eventi.

  1. In Visual Studio Code scegliere l'icona di Azure nella barra attività. In Risorse espandere la sottoscrizione, espandere Archiviazione account, 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 verranno create nello stesso gruppo per semplificare la pulizia delle risorse al termine.

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

    Add storage account event

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

    Impostazione Valore suggerito Description
    Nome myBlobLocalNgrokEventSub Nome che identifica la sottoscrizione di eventi. È 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.
    Filtrare in base ai tipi di evento Blob created (BLOB creato)
    Tipo di endpoint Web Hook Il trigger di archiviazione BLOB usa un endpoint web hook. Usare Funzioni di Azure per un trigger di Griglia di eventi.
    Endpoint Endpoint url basato su ngrok Usare l'endpoint dell'URL basato su ngrok determinato in precedenza.
  5. Selezionare Conferma selezione per convalidare l'URL dell'endpoint.

  6. Selezionare Crea per creare la sottoscrizione di eventi.

Caricare un file nel contenitore

Con la sottoscrizione di eventi sul posto e il progetto di codice e ngrok ancora in esecuzione, è ora possibile caricare un file nel contenitore di archiviazione per attivare la funzione. È possibile caricare un file dal computer nel contenitore di archiviazione BLOB usando Visual Studio Code.

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

  2. Nella finestra di dialogo Apri scegliere un file, preferibilmente un file di immagine binario non troppo grande, selezionare Carica .

  3. Quando richiesto, immettere le informazioni seguenti:

    Impostazione Valore suggerito Descrizione
    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.
    Immettere la directory di destinazione del caricamento impostazione predefinita Accettare solo il valore predefinito di /, ovvero la radice del contenitore.

Questo comando carica un file dal computer nel contenitore di archiviazione in Azure. A questo punto, l'istanza di ngrok in esecuzione deve segnalare che è stata inoltrata una richiesta. Si noterà anche nell'output func.exe per la sessione di debug avviata dalla funzione. Si spera che, a questo punto, la sessione di debug sia in attesa di dove si imposta il punto di interruzione.

Pubblicare il progetto in Azure

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

Creare l'app per le funzioni

La procedura seguente consente di creare le risorse necessarie in Azure e distribuire i file di progetto.

  1. Nel pallet dei comandi immettere Funzioni di Azure: Creare un'app per le funzioni in Azure... (Avanzate).

  2. Seguendo le istruzioni, specificare queste informazioni:

    Richiesta Selezione
    Immettere un nome univoco 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 -. Annotare questo nome; sarà necessario in un secondo momento quando si compila il nuovo URL dell'endpoint.
    Selezionare uno stack di runtime. Scegliere la versione della lingua in cui è stato eseguito localmente.
    Selezionare un sistema operativo. Scegliere Linux o Windows. Le app Python devono essere eseguite in Linux.
    Selezionare un gruppo di risorse per le nuove risorse. Scegliere il nome del gruppo di risorse creato con l'account di archiviazione, annotato in precedenza nel portale.
    Selezionare un percorso per le nuove risorse. Selezionare una località in un'area vicina o vicino ad altri servizi a cui accedono le funzioni.
    Selezionare un piano di hosting. Scegliere Consumo per l'hosting del piano a consumo serverless, in cui vengono addebitati solo i costi quando vengono eseguite le funzioni.
    Selezionare un account di archiviazione. Scegliere il nome dell'account di archiviazione esistente in uso.
    Selezionare una risorsa di Application Insights per l'app. Scegliere Crea nuova risorsa di Application Insights e al prompt digitare un nome per l'istanza usata per archiviare i dati di runtime dalle funzioni.

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

Distribuire il codice funzione

Importante

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

  1. Nell'area Risorse dell'attività di Azure individuare la risorsa dell'app per le funzioni appena creata, fare clic con il pulsante destro del mouse sulla risorsa e scegliere Distribuisci nell'app per le funzioni....

  2. 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 of the View Output window.

Pubblicare le impostazioni dell'applicazione

Poiché le impostazioni locali di local.settings.json non vengono pubblicate automaticamente, è necessario caricarle ora in modo che la funzione venga eseguita correttamente in Azure.

Nel pallet dei comandi immettere Funzioni di Azure: Carica Impostazioni locale e nel prompt Selezionare una risorsa scegliere il nome dell'app per le funzioni.

Ricreare la sottoscrizione di eventi

Ora che l'app per le funzioni è in esecuzione in Azure, è necessario creare una nuova sottoscrizione di eventi. Questa nuova sottoscrizione di eventi usa l'endpoint della funzione in Azure. Si aggiungerà anche un filtro alla sottoscrizione di eventi in modo che la funzione venga attivata solo quando i file JPEG (.jpg) vengono aggiunti al contenitore. In Azure l'URL dell'endpoint contiene anche una chiave di accesso che consente di impedire agli attori diversi da Griglia di eventi di accedere all'endpoint.

Ottenere la chiave di estensione del BLOB

  1. In Visual Studio Code scegliere l'icona di Azure nella barra attività. In Risorse espandere 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_extension e copiare la chiave Valore.

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

Compilare l'URL dell'endpoint

Creare un nuovo URL dell'endpoint per il trigger Archiviazione BLOB in base all'esempio seguente:

https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>
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 dal portale. Se è stato usato un nome diverso per la funzione, sarà anche necessario modificare la stringa di functionName query in base alle esigenze.

Creare una sottoscrizione di eventi filtrata

Poiché l'URL dell'endpoint di una sottoscrizione di eventi non può essere modificato, è necessario creare una nuova sottoscrizione di eventi. È anche consigliabile eliminare la sottoscrizione di eventi precedente in questo momento, perché non può essere riutilizzata.

Questa volta si includerà il filtro per la sottoscrizione di eventi in modo che solo i file JPEG (*.jpg) attivino la funzione.

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

  2. Nel portale di Azure selezionare l'opzione Eventi dal menu a sinistra.

  3. Nella finestra Eventi selezionare la sottoscrizione di eventi precedente basata su ngrok, selezionare Elimina>salva. Questa azione rimuove la sottoscrizione di eventi precedente.

  4. Selezionare il pulsante + Sottoscrizione eventi e specificare i valori della tabella seguente nella scheda Basic :

    Impostazione Valore suggerito Description
    Nome myBlobAzureEventSub Nome che identifica la sottoscrizione di eventi. È 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.
    Filtrare in base ai tipi di evento Blob created (BLOB creato)
    Tipo di endpoint Web Hook Il trigger di archiviazione BLOB usa un endpoint web hook. Usare Funzioni di Azure per un trigger di Griglia di eventi.
    Endpoint Nuovo endpoint 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 la scheda Filtri, in Filtri oggetto selezionare Abilita filtro soggetto, digitare .jpg in Fine oggetto. In questo modo vengono filtrati solo i file JPEG.

    Add filter

  7. Selezionare Crea per creare la sottoscrizione di eventi.

Verificare la funzione in Azure

Con l'intera topologia che esegue Azure, è possibile verificare che tutto funzioni correttamente. Poiché si è già nel portale, è più semplice caricare un file da questa posizione.

  1. Nella pagina dell'account di archiviazione del portale selezionare Contenitori e selezionare il contenitore samples-workitems .

  2. Selezionare il pulsante Carica per aprire la pagina di caricamento a destra, esplorare il file system locale per trovare un .jpg file da caricare e quindi selezionare il pulsante Carica per caricare il BLOB. È ora possibile verificare che la funzione sia stata eseguita in base all'evento di caricamento del contenitore.

  3. Nell'account di archiviazione tornare alla pagina Eventi , selezionare Sottoscrizioni eventi e si noterà che è stato recapitato un evento.

  4. Tornare alla pagina dell'app per le funzioni nel portale, in Funzioni selezionare Funzioni scegliere la funzione e dovrebbe essere visualizzato un numero totale di esecuzioni pari ad almeno uno.

  5. In Sviluppatore selezionare Monitoraggio e verranno visualizzate tracce scritte dalle esecuzioni di funzioni riuscite. Potrebbe verificarsi un ritardo di cinque minuti perché gli eventi vengono elaborati da Application Insights.

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 of select the resource group to delete from the function app page.

  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 delle funzioni, vedere Stima dei costi del piano a consumo.

Passaggi successivi