Creare e gestire app per le funzioni nel piano A consumo Flex

Questo articolo illustra come creare app per le funzioni ospitate nel piano A consumo Flex in Funzioni di Azure. Illustra anche come gestire determinate funzionalità di un'app ospitata con piano A consumo Flex.

Le risorse dell'app per le funzioni sono specifiche del linguaggio. Assicurarsi di scegliere il linguaggio di sviluppo di codice preferito all'inizio dell'articolo.

Importante

Il piano A consumo Flex è attualmente in anteprima.

Prerequisiti

Creare un'app A consumo Flex

Questa sezione illustra come creare un'app per le funzioni nel piano A consumo Flex usando l'interfaccia della riga di comando di Azure, il portale di Azure o Visual Studio Code. Per un esempio di creazione di un'app in un piano A consumo Flex con modelli Bicep/ARM, vedere il repository A consumo Flex.

È possibile ignorare questa sezione se si sceglie di creare e distribuire l'app usando Maven.

Per supportare il codice della funzione, è necessario creare tre risorse:

  • Un gruppo di risorse, ovvero un contenitore logico di risorse correlate.
  • Un account di archiviazione, usato per mantenere lo stato e altre informazioni sulle funzioni.
  • Un'app per le funzioni nel piano A consumo Flex, che fornisce l'ambiente per l'esecuzione del codice della funzione. Un'app per le funzioni si collega al progetto di funzione locale e consente di raggruppare le funzioni come un'unità logica per semplificare la gestione, la distribuzione e la condivisione di risorse nel piano A consumo Flex.
  1. Se non è già stato fatto, accedere ad Azure:

    az login
    

    Il comando az login consente di accedere all'account Azure.

  2. Usare il comando az functionapp list-flexconsumption-locations per esaminare l'elenco delle aree che attualmente supportano A consumo Flex.

    az functionapp list-flexconsumption-locations --output table
    
  1. Creare un gruppo di risorse in una delle aree attualmente supportate:

    az group create --name <RESOURCE_GROUP> --location <REGION>
    

    Nel comando precedente sostituire <RESOURCE_GROUP> con un valore univoco nella sottoscrizione e <REGION> con una delle aree attualmente supportate. Il comando az group create crea un gruppo di risorse.

  2. Creare un account di archiviazione per utilizzo generico nel gruppo di risorse e nell'area:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group <RESOURCE_GROUP> --sku Standard_LRS --allow-blob-public-access false
    

    Nell'esempio precedente sostituire <STORAGE_NAME> con un nome appropriato e univoco in Archiviazione di Azure. I nomi devono contenere da tre a 24 caratteri costituiti esclusivamente da numeri e lettere in minuscolo. Standard_LRS specifica un account per utilizzo generico, che è supportato da Funzioni. Il comando az storage account create crea l'account di archiviazione.

    Importante

    L'account di archiviazione viene usato per archiviare dati importanti dell'app, a volte incluso il codice dell'applicazione stesso. È consigliabile limitare l'accesso da altre app e utenti all'account di archiviazione.

  3. Creare l'app per le funzioni in Azure:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0 
    

    Le app C# in esecuzione in-process non sono attualmente supportate durante l'esecuzione in un piano A consumo Flex.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime java --runtime-version 17 
    

    Per le app Java, è attualmente supportato anche Java 11.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime node --runtime-version 20 
    
    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime python --runtime-version 3.11 
    

    Per le app Python, è attualmente supportato anche Python 3.10.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime powershell --runtime-version 7.4 
    

    In questo esempio sostituire sia <RESOURCE_GROUP> che <STORAGE_NAME> con il gruppo di risorse e con il nome dell'account usato rispettivamente nel passaggio precedente. Sostituire anche <APP_NAME> con un nome univoco globale appropriato. <APP_NAME> è anche il dominio DNS (Domain Name Server) predefinito per l'app per le funzioni. Il comando az functionapp create crea l'app per le funzioni in Azure.

    Questo comando crea un'app per le funzioni in esecuzione nel piano A consumo Flex. La versione specifica del runtime del linguaggio usata è quella attualmente supportata nell'anteprima.

    Poiché l'app è stata creata senza specificare istanze sempre pronte, l'app comporta solo costi durante l'esecuzione attiva delle funzioni. Il comando crea anche un'istanza di Azure Application Insights associata nello stesso gruppo di risorse, con cui è possibile monitorare l'app per le funzioni e visualizzare i log. Per altre informazioni, vedere Monitorare Funzioni di Azure.

    
    

Distribuire il progetto di codice

È possibile ignorare questa sezione se si sceglie di creare e distribuire l'app usando Maven.

È possibile scegliere di distribuire il codice del progetto in un'app per le funzioni esistente usando vari strumenti:

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.

Creare e distribuire l'app con Maven

È possibile usare Maven per creare un'app per le funzioni ospitata A consumo Flex e le risorse necessarie durante la distribuzione modificando il file pom.xml.

  1. Creare un progetto di codice Java completando la prima parte di uno di questi articoli di avvio rapido:

  2. Nel progetto di codice Java aprire il file pom.xml e apportare queste modifiche per creare l'app per le funzioni nel piano A consumo Flex:

    • Modificare il valore di <properties>.<azure.functions.maven.plugin.version> in 1.34.0.

    • Nella sezione <plugin>.<configuration> per azure-functions-maven-plugin, aggiungere o rimuovere il commento dall'elemento <pricingTier> come indicato di seguito:

      <pricingTier>Flex Consumption</pricingTier>
      
  3. (Facoltativo) Personalizzare il piano A consumo Flex nella distribuzione Maven includendo anche questi elementi nella sezione <plugin>.<configuration>: .

    • <instanceSize> : imposta le dimensioni della memoria dell'istanza per l'app per le funzioni. Il valore predefinito è 2048.
    • <maximumInstances> : imposta il valore più alto per il numero massimo di istanze dell'app per le funzioni.
    • <alwaysReadyInstances> : imposta i conteggi delle istanze sempre pronti con gli elementi figlio per i gruppi di trigger HTTP (<http>), i gruppi di Funzioni permanenti (<durable>) e altri trigger specifici (<my_function>). Quando si imposta un numero di istanze maggiore di zero, vengono addebitati i costi per queste istanze indipendentemente dal fatto che le funzioni vengano eseguite o meno. Per altre informazioni, vedereFatturazione.
  4. Prima di poter eseguire la distribuzione, accedere alla sottoscrizione di Azure usando l'interfaccia della riga di comando di Azure.

    az login
    

    Il comando az login consente di accedere all'account Azure.

  5. Usare il comando seguente per distribuire il progetto di codice in una nuova app per le funzioni in A consumo Flex.

    mvn azure-functions:deploy
    

    Maven usa le impostazioni nel modello di pom.xml per creare l'app per le funzioni in un piano A consumo Flex in Azure, insieme alle altre risorse necessarie. Se queste risorse esistono già, il codice viene distribuito nell'app per le funzioni, sovrascrivendo qualsiasi codice esistente.

Abilitare l'integrazione della rete virtuale

È possibile abilitare l'integrazione della rete virtuale per l'app in un piano A consumo Flex. Gli esempi in questa sezione presuppongono che sia già stata creata una rete virtuale con subnet nell'account. È possibile abilitare l'integrazione della rete virtuale quando si crea l'app o in un secondo momento.

Importante

Attualmente il piano A consumo flessibile non supporta le subnet con nomi che contengono caratteri di sottolineatura (_).

Per abilitare la rete virtuale quando si crea l'app:

È possibile abilitare l'integrazione della rete virtuale eseguendo il comando az functionapp create e includendo i parametri --vnet e --subnet.

  1. Creare la rete virtuale e la subnet, se non è già stato fatto.

  2. Completare i passaggi da 1 a 4 in Creare un'app A consumo Flex per creare le risorse necessarie per l'app.

  3. Eseguire il comando az functionapp create, inclusi i parametri --vnet e --subnet, come nell'esempio seguente:

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime <RUNTIME_NAME> --runtime-version <RUNTIME_VERSION> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
    

    Il valore <VNET_RESOURCE_ID> è l'ID risorsa per la rete virtuale, che è nel formato: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCER_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>. È possibile usare questo comando per ottenere un elenco di ID di rete virtuale, filtrati in base a <RESOURCE_GROUP>: az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id.

Per esempi end-to-end su come creare app in A consumo Flex con l'integrazione della rete virtuale, vedere queste risorse:

Per modificare o eliminare l'integrazione della rete virtuale in un'app esistente:

Usare il comando az functionapp vnet-integration add per abilitare l'integrazione della rete virtuale in un'app per le funzioni esistente:

az functionapp vnet-integration add --resource-group <RESOURCE_GROUP> --name <APP_NAME> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>

Usare il comando az functionapp vnet-integration remove per disabilitare l'integrazione della rete virtuale nell'app:

az functionapp vnet-integration remove --resource-group <RESOURCE_GROUP> --name <APP_NAME>

Usare il comando az functionapp vnet-integration list per elencare le integrazioni di rete virtuale correnti per l'app:

az functionapp vnet-integration list --resource-group <RESOURCE_GROUP> --name <APP_NAME>

Quando si sceglie una subnet, si applicano queste considerazioni:

  • La subnet scelta non può essere già usata per altri scopi, ad esempio con endpoint privati o endpoint di servizio o essere delegata a qualsiasi altro piano di hosting o servizio.
  • È possibile condividere la stessa subnet con più app in esecuzione in un piano A consumo consumo Flex. Poiché le risorse di rete vengono condivise in tutte le app, un'app per le funzioni potrebbe influire sulle prestazioni di altri utenti nella stessa subnet.
  • In un piano A consumo consumo Flex, una singola app per le funzioni può usare fino a 40 indirizzi IP, anche quando l'app viene ridimensionata oltre 40 istanze. Anche se questa regola generale è utile quando si stimano le dimensioni della subnet necessarie, non viene applicata rigorosamente.

Configurare le impostazioni di distribuzione

Nel piano A consumo flessibile il pacchetto di distribuzione che contiene il codice dell'app viene mantenuto in un contenitore di Archiviazione BLOB di Azure. Per impostazione predefinita, le distribuzioni usano lo stesso account di archiviazione e il valore della stringa di connessione (AzureWebJobsStorage) usati dal runtime di Funzioni per gestire l'app. La stringa di connessione viene archiviata nell'impostazione dell'applicazione DEPLOYMENT_STORAGE_CONNECTION_STRING. Tuttavia, è possibile invece designare un contenitore BLOB in un account di archiviazione separato come origine di distribuzione per il codice. È anche possibile modificare il metodo di autenticazione usato per accedere al contenitore.

Un'origine di distribuzione personalizzata deve soddisfare questi criteri:

  • L'account di archiviazione deve esistere già.
  • Anche il contenitore da usare per le distribuzioni deve esistere.
  • Quando più app usano lo stesso account di archiviazione, ognuna deve avere un proprio contenitore di distribuzione. L'uso di un contenitore univoco per ogni app impedisce che i pacchetti di distribuzione vengano sovrascritti, cosa che si verifica se le app hanno condiviso lo stesso contenitore.

Quando si configura l'autenticazione dell'archiviazione di distribuzione, tenere presenti queste considerazioni:

  • Quando si usa una stringa di connessione per connettersi all'account di archiviazione di distribuzione, l'impostazione dell'applicazione che contiene la stringa di connessione deve esistere già.
  • Quando si usa un'identità gestita assegnata dall'utente, l'identità fornita viene collegata all'app per le funzioni. Anche il ruolo Storage Blob Data Contributor con ambito per l'account di archiviazione di distribuzione viene assegnato all'identità.
  • Quando si usa un'identità gestita assegnata dal sistema, viene creata un'identità quando non esiste già un'identità assegnata dal sistema valida nell'app. Quando esiste un'identità assegnata dal sistema, anche il ruolo Storage Blob Data Contributor con ambito per l'account di archiviazione di distribuzione viene assegnato all'identità.

Per configurare le impostazioni di distribuzione quando si crea l'app per le funzioni nel piano A consumo flessibile:

Usare il comando az functionapp create e specificare queste opzioni aggiuntive per personalizzare l'archiviazione della distribuzione:

Parametro Descrizione
--deployment-storage-name Nome dell'account di archiviazione di distribuzione.
--deployment-storage-container-name Nome del contenitore nell'account in cui contenere il pacchetto di distribuzione dell'app.
--deployment-storage-auth-type Tipo di autenticazione da usare per la connessione all'account di archiviazione di distribuzione. I valori accettati includono StorageAccountConnectionString, UserAssignedIdentitye SystemAssignedIdentity.
--deployment-storage-auth-value Quando si usa StorageAccountConnectionString, questo parametro viene impostato sul nome dell'impostazione dell'applicazione che contiene la stringa di connessione all'account di archiviazione di distribuzione. Quando si usa UserAssignedIdentity, questo parametro viene impostato sul nome dell'ID risorsa dell'identità da usare.

Questo esempio crea un'app per le funzioni nel piano A consumo flessibile con un account di archiviazione di distribuzione separato e l'identità assegnata dall'utente:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime dotnet-isolated --runtime-version 8.0 --flexconsumption-location "<REGION>" --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME> --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value <MI_RESOURCE_ID>

È anche possibile modificare la configurazione dell'archiviazione di distribuzione per un'app esistente.

Usare il comando az functionapp deployment config set per modificare la configurazione dell'archiviazione di distribuzione:

az functionapp deployment config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --deployment-storage-name <DEPLOYMENT_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>

Configurare la memoria dell'istanza

Le dimensioni della memoria dell'istanza usate dal piano A consumo consumo Flex possono essere impostate in modo esplicito quando si crea l'app. Per altre informazioni sulle dimensioni supportate, vedere Memoria dell'istanza.

Per impostare una dimensione di memoria dell'istanza diversa da quella predefinita durante la creazione dell'app:

Specificare il parametro --instance-memory nel comando az functionapp create. Questo esempio crea un'app C# con dimensioni dell'istanza di 4096:

az functionapp create --instance-memory 4096 --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-location <REGION> --runtime dotnet-isolated --runtime-version 8.0

In qualsiasi momento, è possibile modificare l'impostazione delle dimensioni della memoria dell'istanza usata dall'app.

In questo esempio viene usato il comando az functionapp scale config set per modificare l'impostazione delle dimensioni della memoria dell'istanza su 4,096 MB:

az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 4096

Impostare i conteggi delle istanze sempre pronti

È possibile impostare una serie di istanze sempre pronte per i gruppi di Ridimensionamento in base a funzione o le singole funzioni, per mantenere le funzioni caricate e pronte per l'esecuzione. Esistono tre gruppi speciali, come nel ridimensionamento per funzione:

  • http - tutte le funzioni attivate da HTTP nell'app vengono ridimensionate insieme nelle proprie istanze.
  • durable - tutte le funzioni attivate da Bene durevole (Orchestrazione, Attività, Entità) nell'app vengono ridimensionate insieme nelle proprie istanze.
  • blob - tutte le funzioni attivate dal BLOB (Griglia di eventi) nell'app vengono ridimensionate insieme nelle proprie istanze.

Usare httpo durable blob come nome per l'impostazione della coppia valore nome per configurare i conteggi sempre pronti per questi gruppi. Per tutte le altre funzioni nell'app è necessario configurare sempre pronto per ogni singola funzione usando il formato function:<FUNCTION_NAME>=n.

Usare il parametro --always-ready-instances con il comando az functionapp create per definire una o più designazioni di istanza sempre pronte. In questo esempio viene impostato il numero di istanze sempre pronte per tutte le funzioni attivate da HTTP su 5:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances http=10

Questo esempio imposta il numero di istanze sempre pronte per tutte le funzioni trigger Durable su 3 e imposta il numero di istanze sempre pronte su 2 per una funzione attivata dal bus di servizio denominata function5:

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --always-ready-instances durable=3 function:function5=2

È anche possibile modificare istanze sempre pronte in un'app esistente aggiungendo o rimuovendo le designazioni di istanza o modificando i conteggi delle designazioni di istanza esistenti.

In questo esempio viene usato il comando az functionapp scale config always-ready set per modificare il numero di istanze sempre pronte per il gruppo trigger HTTP in 10:

az functionapp scale config always-ready set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --settings http=10

Per rimuovere istanze sempre pronte, usare il comando az functionapp scale config always-ready delete, come in questo esempio che rimuove tutte le istanze sempre pronte dal gruppo trigger HTTP e anche da una funzione denominata hello_world:

az functionapp scale config always-ready delete --resource-group <RESOURCE_GROUP> --name <APP_NAME> --setting-names http function:hello_world

Impostare i limiti di concorrenza HTTP

A meno che non si impostino limiti specifici, le impostazioni predefinite della concorrenza HTTP per le app del piano A consumo Flex vengono determinate in base all'impostazione delle dimensioni dell'istanza. Per altre informazioni, vedere concorrenza del trigger HTTP.

Ecco come impostare i limiti di concorrenza HTTP per un'app esistente:

Usare il comando az functionapp scale config set per impostare limiti di concorrenza HTTP specifici per l'app, indipendentemente dalle dimensioni dell'istanza.

az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --trigger-type http --trigger-settings perInstanceConcurrency=10

In questo esempio viene impostato il livello di concorrenza del trigger HTTP su 10. Dopo aver impostato in modo specifico un valore di concorrenza HTTP, tale valore viene mantenuto nonostante le modifiche apportate all'impostazione delle dimensioni dell'istanza dell'app.

Visualizzare le aree attualmente supportate

Durante l'anteprima, è possibile eseguire solo il piano A consumo Flex solo nelle aree selezionate. Per visualizzare l'elenco delle aree che attualmente supportano i piani A consumo Flex:

  1. Se non è già stato fatto, accedere ad Azure:

    az login
    

    Il comando az login consente di accedere all'account Azure.

  2. Usare il comando az functionapp list-flexconsumption-locations per esaminare l'elenco delle aree che attualmente supportano A consumo Flex.

    az functionapp list-flexconsumption-locations --output table
    

Quando si crea un'app nel portale di Azure o usando Visual Studio Code, le aree attualmente non supportate vengono filtrate dall'elenco di aree.