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.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Se non è già disponibile, è possibile creare un account gratuitamente.
Interfaccia della riga di comando di Azure: usata per creare e gestire le risorse in Azure. Quando si usa l'interfaccia della riga di comando di Azure nel computer locale, assicurarsi di usare la versione 2.60.0 o una versione successiva. È anche possibile usare Azure Cloud Shell, con la versione corretta dell'interfaccia della riga di comando di Azure.
Visual Studio Code: usato per creare e sviluppare app, creare risorse di Azure e distribuire progetti di codice in Azure. Quando si usa Visual Studio Code, assicurarsi di installare anche l'estensione Funzioni di Azure più recente. È anche possibile installare il pacchetto di estensione Strumenti di Azure.
Anche se non è necessario creare un'app piano A consumo Flex, è necessario un progetto di codice per poter eseguire la distribuzione e convalidare una nuova app per le funzioni. Completare la prima parte di uno di questi articoli di avvio rapido, in cui si crea un progetto di codice con una funzione attivata tramite HTTP:
- Creare un progetto di Funzioni di Azure dalla riga di comando
- Creare un progetto di Funzioni di Azure con Visual Studio Code
Per creare un'app in un nuovo piano A consumo Flex durante una distribuzione Maven, è necessario creare il progetto di app locale e quindi aggiornare il file di pom.xml del progetto. Per altre informazioni, vedere Creare un'app Java A consumo Flex con Maven
Tornare a questo articolo dopo aver creato ed eseguito il progetto locale, ma prima di dover creare le risorse di Azure. L'app per le funzioni e altre risorse di Azure vengono create nella sezione successiva.
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.
Se non è già stato fatto, accedere ad Azure:
az login
Il comando
az login
consente di accedere all'account Azure.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
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.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.
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 comandoaz 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.
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.
Nel riquadro comandi immettere quindi selezionare Funzioni di Azure: Distribuisci nell'app per le funzioni.
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.
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.
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.
Creare un progetto di codice Java completando la prima parte di uno di questi articoli di avvio rapido:
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>
in1.34.0
.Nella sezione
<plugin>.<configuration>
perazure-functions-maven-plugin
, aggiungere o rimuovere il commento dall'elemento<pricingTier>
come indicato di seguito:<pricingTier>Flex Consumption</pricingTier>
(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.
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.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
.
Creare la rete virtuale e la subnet, se non è già stato fatto.
Completare i passaggi da 1 a 4 in Creare un'app A consumo Flex per creare le risorse necessarie per l'app.
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/<RESOURCE_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:
- A consumo Flex: da HTTP a Hub eventi con integrazione di rete virtuale
- A consumo Flex: attivato dal bus di servizio tramite integrazione rete virtuale
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 , UserAssignedIdentity e 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_ACCOUNT_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_ACCOUNT_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 http
o 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
Per visualizzare l'elenco delle aree che attualmente supportano i piani A consumo Flex:
Se non è già stato fatto, accedere ad Azure:
az login
Il comando
az login
consente di accedere all'account Azure.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.