Opzioni di hosting di Funzioni di Azure
Quando si crea un'app per le funzioni in Azure, è necessario scegliere un piano di hosting per l'app. Esistono tre piani di hosting Funzioni di Azure di base forniti da Funzioni di Azure: piano a consumo, piano Premium e Piano dedicato (servizio app). Questi piani di hosting sono facilitati dall'infrastruttura del servizio app Azure e sono disponibili a livello generale nelle macchine virtuali Linux e Windows.
Il piano di hosting Funzioni di Azure scelto determina i comportamenti seguenti:
- Come viene ridimensionata l'app per le funzioni.
- Le risorse disponibili per ogni istanza dell'app per le funzioni.
- Il supporto per funzionalità avanzate, ad esempio la connettività della rete virtuale di Azure.
Oltre a Funzioni di Azure hosting, è anche possibile ospitare app per le funzioni in contenitori che possono essere distribuite nei cluster Kubernetes o in App Contenitore di Azure. Se si sceglie di ospitare le funzioni in un cluster Kubernetes, è consigliabile usare un cluster Kubernetes abilitato per Azure Arc. Per altre informazioni sulla distribuzione di app contenitore personalizzate, vedere Hosting di app contenitore di Azure di Funzioni di Azure.
Questo articolo fornisce un confronto dettagliato tra i vari piani di hosting, incluse le opzioni di hosting basate su contenitori.
Nota
L'hosting di contenitori Funzioni di Azure sia nei cluster Kubernetes abilitati per Azure Arc che nelle app contenitore di Azure è attualmente in anteprima.
Panoramica dei piani
Di seguito è riportato un riepilogo dei vantaggi dei tre principali piani di hosting Funzioni di Azure:
Piano | Vantaggi |
---|---|
Piano a consumo | Aumenta o riduci automaticamente le prestazioni e paga i costi delle risorse di calcolo solo quando le funzioni sono in esecuzione. Quando si usa un piano a consumo, le istanze dell'host di Funzioni di Azure vengono aggiunte e rimosse in modo dinamico in base al numero di eventi in ingresso. ✔ Piano di hosting predefinito. ✔ Pagare solo quando le funzioni sono in esecuzione. ✔ Ridimensiona automaticamente, anche durante periodi di carico elevato. |
Piano Premium | Consente di dimensionare automaticamente in base alla domanda usando ruoli di lavoro preriscaldati che eseguono le applicazioni senza ritardi dopo l'inattività, di usare istanze più potenti per l'esecuzione e di connettersi alle reti virtuali. Prendere in considerazione il piano Funzioni di Azure Premium nelle situazioni seguenti: ✔ Le app per le funzioni vengono eseguite continuamente o quasi continuamente. ✔ Si dispone di un numero elevato di esecuzioni di piccole dimensioni e di una fattura di esecuzione elevata, ma di pochi GB nel piano a consumo. ✔ Sono necessarie più opzioni di CPU o memoria rispetto a quelle fornite dal piano a consumo. ✔ Il codice deve essere eseguito più a lungo del tempo di esecuzione massimo consentito nel piano a consumo. ✔ Sono necessarie funzionalità non disponibili nel piano a consumo, ad esempio la connettività di rete virtuale. ✔ Si vuole fornire un'immagine Linux personalizzata in cui eseguire le funzioni. |
Piano dedicato | Eseguire le funzioni all'interno di un piano di servizio app a tariffe regolari del piano servizio app. Ideale per gli scenari a esecuzione prolungata in cui non si può usare Durable Functions. Si consideri un piano servizio app nelle situazioni seguenti: ✔ Sono presenti macchine virtuali sottoutilizzate che eseguono già altre istanze di servizio app. ✔ Sono necessari il ridimensionamento predittivo e i costi. |
Le tabelle di confronto in questo articolo includono anche le opzioni di hosting seguenti, che forniscono la quantità più elevata di controllo e isolamento in cui eseguire le app per le funzioni.
Opzione Hosting | Dettagli |
---|---|
ASE | L'ambiente del servizio app di Azure è una funzionalità del servizio app di Azure che offre un ambiente completamente isolato e dedicato per l'esecuzione sicura delle app del servizio app su larga scala. Le edizione Standard sono appropriate per i carichi di lavoro dell'applicazione che richiedono: ✔ Scala molto elevata. ✔ Isolamento di calcolo completo e accesso sicuro alla rete. ✔ Utilizzo elevato della memoria. |
App contenitore di Azure | App Azure Container è un ambiente completamente gestito che consente di eseguire microservizi e applicazioni in contenitori in una piattaforma serverless. Le app di Azure Container consentono di eseguire le funzioni con la potenza del servizio Azure Kubernetes sottostante (servizio Azure Kubernetes) rimuovendo la complessità di dover usare le API Kubernetes. |
Kubernetes (Diretto o Azure Arc) |
Kubernetes offre un ambiente completamente isolato e dedicato in esecuzione nella piattaforma Kubernetes. Kubernetes è appropriato per i carichi di lavoro dell'applicazione che richiedono: ✔ Requisiti hardware personalizzati. ✔ Isolamento e accesso sicuro alla rete. ✔ Possibilità di essere eseguita in un ambiente ibrido o multi-cloud. ✔ Eseguire insieme ad applicazioni e servizi Kubernetes esistenti. |
Le tabelle rimanenti di questo articolo confrontano i piani relativi a diverse funzionalità e comportamenti. Per un confronto dei costi tra piani di hosting dinamici (Consumo e Premium), vedere la pagina dei prezzi Funzioni di Azure. Per i prezzi delle varie opzioni del piano dedicato, vedere la pagina dei prezzi servizio app.
Sistema operativo/runtime
La tabella seguente illustra il supporto linguistico e del sistema operativo per i piani di hosting.
Linux1,2 solo codice |
Solo codice Windows | Linux1,2,3 Contenitore Docker |
|
---|---|---|---|
Piano a consumo | C# JavaScript Java Python PowerShell Core TypeScript |
C# JavaScript Java PowerShell Core TypeScript |
Nessun supporto |
Piano Premium | C# JavaScript Java Python PowerShell Core TypeScript |
C# JavaScript Java PowerShell Core TypeScript |
C# JavaScript Java PowerShell Core Python TypeScript |
Piano dedicato | C# JavaScript Java Python TypeScript |
C# JavaScript Java PowerShell Core TypeScript |
C# JavaScript Java PowerShell Core Python TypeScript |
ASE | C# JavaScript Java Python TypeScript |
C# JavaScript Java PowerShell Core TypeScript |
C# JavaScript Java PowerShell Core Python TypeScript |
Kubernetes (diretto) | n/d | n/d | C# JavaScript Java PowerShell Core Python TypeScript |
Azure Arc (anteprima) | C# JavaScript Java Python TypeScript |
n/d | C# JavaScript Java PowerShell Core Python TypeScript |
1 Linux è l'unico sistema operativo supportato per lo stack di runtime Python.
2 Il supporto di PowerShell in Linux è attualmente in anteprima.
3 Linux è l'unico sistema operativo supportato per i contenitori Docker.
Durata del timeout di un'app per le funzioni
La durata del timeout per le funzioni in un'app per le functionTimeout
funzioni è definita dalla proprietà nel file di progetto host.json . Questa proprietà si applica in modo specifico alle esecuzioni di funzioni. Dopo l'avvio dell'esecuzione della funzione, la funzione deve restituire/rispondere entro la durata del timeout. Per altre informazioni, vedere Migliorare le prestazioni e l'affidabilità Funzioni di Azure.
La tabella seguente mostra i valori predefiniti e massimi (in minuti) per piani specifici:
Piano | Default | Massimo1 |
---|---|---|
Piano a consumo | 5 | 10 |
Piano Premium | 302 | Illimitati3 |
Piano dedicato | 302 | Illimitati3 |
1 Indipendentemente dall'impostazione di timeout dell'app per le funzioni, 230 secondi è la quantità massima di tempo che una funzione attivata tramite HTTP può richiedere per rispondere a una richiesta. Il motivo è legato al timeout di inattività predefinito di Azure Load Balancer. Per tempi di elaborazione più lunghi, provare a usare lo schema asincrono di Durable Functions oppure rinviare il processo effettivo e restituire una risposta immediata.
2 Il timeout predefinito per la versione 1.x del runtime di Funzioni è illimitato.
3 Garantito per un massimo di 60 minuti. L'applicazione di patch del sistema operativo e di runtime, l'applicazione di patch alle vulnerabilità e il ridimensionamento dei comportamenti possono comunque annullare le esecuzioni delle funzioni in modo da garantire la scrittura di funzioni affidabili.
Ridimensiona
Nella tabella seguente vengono confrontati i comportamenti di ridimensionamento dei vari piani di hosting.
Le istanze massime vengono fornite in base a un'app per ogni funzione (consumo) o per piano (Premium/Dedicato), a meno che non diversamente indicato.
Piano | Aumentare il numero di istanze | Numero massimo di istanze |
---|---|---|
Piano a consumo | Guidata dagli eventi. Aumento automatico del numero di istanze anche in periodo di carico elevato. Funzioni di Azure'infrastruttura ridimensiona le risorse di CPU e memoria aggiungendo istanze aggiuntive dell'host di Funzioni, in base al numero di eventi di trigger in ingresso. | Windows: 200 Linux: 1001 |
Piano Premium | Guidata dagli eventi. Aumento automatico del numero di istanze anche in periodo di carico elevato. Funzioni di Azure'infrastruttura ridimensiona le risorse di CPU e memoria aggiungendo istanze aggiuntive dell'host di Funzioni, in base al numero di eventi su cui vengono attivate le funzioni. | Windows: 100 Linux: 20-1002 |
Pianodedicato 3 | Manual/autoscale | 10-30 |
A edizione Standard 3 | Manual/autoscale | 100 |
Kubernetes | Scalabilità automatica basata su eventi per i cluster Kubernetes tramite KEDA. | Varia in base al cluster |
1 Durante la scalabilità orizzontale, è attualmente previsto un limite di 500 istanze per ogni sottoscrizione per ogni ora per le app Linux in un piano a consumo.
2 In alcune aree, le app Linux in un piano Premium possono essere ridimensionate a 100 istanze. Per altre informazioni, vedere l'articolo Piano Premium.
3 Per limiti specifici per le varie opzioni di piano servizio app, vedere i limiti del piano servizio app.
Comportamento di avvio a freddo
Piano | Dettagli |
---|---|
Piano a consumo | Le app possono essere ridimensionate a zero quando sono inattive, ovvero alcune richieste potrebbero avere una latenza aggiuntiva all'avvio. Il piano a consumo include alcune ottimizzazioni per ridurre l'ora di avvio a freddo, tra cui il pull dalle funzioni segnaposto pre-riscaldamento che dispongono già dell'host funzione e dei processi del linguaggio in esecuzione. |
Piano Premium | Istanze a caldo perpetuo per evitare l'avvio a freddo. |
Piano dedicato | Quando si esegue in un piano dedicato, l'host funzioni può essere eseguito in modo continuo, il che significa che l'avvio a freddo non è davvero un problema. |
ASE | Quando si esegue in un piano dedicato, l'host funzioni può essere eseguito in modo continuo, il che significa che l'avvio a freddo non è davvero un problema. |
Kubernetes | A seconda della configurazione KEDA, le app possono essere configurate per evitare un avvio a freddo. Se configurato per la scalabilità su zero, viene riscontrato un avvio a freddo per i nuovi eventi. |
Limiti del servizio
Resource | Piano a consumo | Piano Premium | Piano dedicato | ASE | Kubernetes |
---|---|---|---|---|---|
Durata del timeout predefinita (min) | 5 | 30 | 301 | 30 | 30 |
Durata del timeout massima (min) | 10 | Senza limiti7 | Senza limiti2 | unbounded | unbounded |
Numero massimo di connessioni in uscita (per istanza) | 600 attive (1200 totali) | unbounded | unbounded | unbounded | unbounded |
Dimensioni massime della richiesta (MB)3 | 100 | 100 | 100 | 100 | Dipende dal cluster |
Lunghezza massima della stringa di query3 | 4096 | 4096 | 4096 | 4096 | Dipende dal cluster |
Lunghezza massima dell'URL della richiesta3 | 8192 | 8192 | 8192 | 8192 | Dipende dal cluster |
Unità di calcolo di Azure per istanza | 100 | 210-840 | 100-840 | 210-2508 | Prezzi del servizio Azure Kubernetes |
Dimensioni massime della memoria (GB per istanza) | 1,5 | 3,5-14 | 1,75-14 | 3,5-14 | Qualsiasi nodo è supportato |
Numero massimo di istanze (Windows/Linux) | 200/100 | 100/20 | varia in base alla SKU9 | 1009 | Dipende dal cluster |
App per le funzioni per piano11 | 100 | 100 | Senza limiti4 | unbounded | unbounded |
Piani del servizio app | 100 per area | 100 per gruppo di risorse | 100 per gruppo di risorse | - | - |
Slot di distribuzione per app10 | 2 | 3 | 1-209 | 20 | n/d |
Archiviazione5 | 5 GB | 250 GB | 50-1000 GB | 1 TB | n/d |
Domini personalizzati per applicazione | 5006 | 500 | 500 | 500 | n/d |
Supporto per il dominio personalizzato SSL | Connessione SNI SSL senza limiti inclusa | Connessioni SNI SSL senza limiti e 1 connessione IP SSL incluse | Connessioni SNI SSL senza limiti e 1 connessione IP SSL incluse | Connessioni SNI SSL senza limiti e 1 connessione IP SSL incluse | n/d |
1 Per impostazione predefinita, il timeout per il runtime di Funzioni 1.x in un piano di servizio app non prevede limiti.
2 Richiede l'impostazione del piano di servizio app su Always On. Pagamento con tariffe standard.
3 Questi limiti vengono impostati nell'host.
4 Il numero effettivo di app per le funzioni che è possibile ospitare dipende dall'attività delle app, dalle dimensioni delle istanze del computer e dall'uso delle risorse corrispondente.
5 Il limite di archiviazione corrisponde alle dimensioni totali del contenuto nello spazio di archiviazione temporanea in tutte le app nello stesso piano di servizio app. Il piano a consumo usa File di Azure per l'archiviazione temporanea.
6 Quando l'app per le funzioni è ospitata in un piano a consumo, è supportata solo l'opzione CNAME. Per le app per le funzioni in un piano Premium o in un piano di servizio app, è possibile eseguire il mapping di un dominio personalizzato usando un record CNAME o A.
7 Garantito per un massimo di 60 minuti.
8 I ruoli di lavoro ospitano app di clienti. I lavoratori sono disponibili in tre dimensioni fisse: una vCPU/3,5 GB di RAM; Due vCPU/7 GB di RAM; Quattro vCPU/14 GB di RAM.
9 Per informazioni dettagliate, vedere limiti servizio app.
10 Inclusione dello slot di produzione.
11 Attualmente è previsto un limite di 5000 app per le funzioni in una determinata sottoscrizione.
Limitazioni per la creazione di nuove app per le funzioni in un gruppo di risorse esistente
In alcuni casi, quando si tenta di creare un nuovo piano di hosting per l'app per le funzioni in un gruppo di risorse esistente, è possibile che venga visualizzato uno degli errori seguenti:
- Il piano tariffario non è consentito in questo gruppo di risorse
- <> SKU_name i ruoli di lavoro non sono disponibili nel gruppo <di risorse resource_group_name>
Ciò può verificarsi quando vengono soddisfatte le condizioni seguenti:
- Si crea un'app per le funzioni in un gruppo di risorse esistente che abbia mai contenuto un'altra app per le funzioni o un'app Web. Ad esempio, le app a consumo di Linux non sono supportate nello stesso gruppo di risorse dei piani Linux Dedicati o Linux Premium.
- La nuova app per le funzioni viene creata nella stessa area dell'app precedente.
- L'app precedente è in qualche modo incompatibile con la nuova app. Questo problema può verificarsi tra SKU, sistemi operativi o a causa di altre funzionalità a livello di piattaforma, ad esempio il supporto della zona di disponibilità.
Il motivo è dovuto alla modalità di mapping dei piani di app per le funzioni e app Web a pool di risorse diversi durante la creazione. Sku diversi richiedono un set diverso di funzionalità dell'infrastruttura. Quando si crea un'app in un gruppo di risorse, tale gruppo di risorse viene mappato e assegnato a un pool specifico di risorse. Se si tenta di creare un altro piano in tale gruppo di risorse e il pool mappato non dispone delle risorse necessarie, si verificherà questo errore.
Quando si verifica questo errore, creare invece l'app per le funzioni e il piano di hosting in un nuovo gruppo di risorse.
Funzionalità di rete
Funzionalità | Piano a consumo | Piano Premium | Piano dedicato | ASE |
---|---|---|---|---|
Restrizioni IP in ingresso | ✅Sì | ✅Sì | ✅Sì | ✅Sì |
Endpoint privati in ingresso | ❌No | ✅Sì | ✅Sì | ✅Sì |
Integrazione della rete virtuale | ❌No | ✅Sì (Regionale) | ✅Sì (Regional e Gateway) | ✅Sì |
Trigger della rete virtuale (non HTTP) | ❌No | ✅Sì | ✅Sì | ✅Sì |
Connessioni ibride (solo Windows) | ❌No | ✅Sì | ✅Sì | ✅Sì |
Restrizioni IP in uscita | ❌No | ✅Sì | ✅Sì | ✅Sì |
Fatturazione
Piano | Dettagli |
---|---|
Piano a consumo | Pagare solo per il tempo di esecuzione delle funzioni. La fatturazione si basa sul numero di esecuzioni, il tempo di esecuzione e la memoria usata. |
Piano Premium | Il piano Premium si basa sul numero di secondi di core e memoria usati tra le istanze necessarie e pre-riscaldamento. Almeno un'istanza per piano deve essere sempre mantenuta calda. Questo piano fornisce i prezzi più prevedibili. |
Piano dedicato | Si paga lo stesso per le app per le funzioni in un piano di servizio app come per altre risorse servizio app, ad esempio le app Web. |
ambiente del servizio app (A edizione Standard) | Esiste una tariffa mensile fissa per un A edizione Standard che paga per l'infrastruttura e non cambia con le dimensioni della A edizione Standard. È previsto anche un costo per servizio app piano vCPU. Tutte le app ospitate in un ambiente del servizio app fanno parte di uno SKU di prezzi isolato. |
Kubernetes | Si pagano solo i costi del cluster Kubernetes; nessuna fatturazione aggiuntiva per Funzioni. L'app per le funzioni viene eseguita come carico di lavoro dell'applicazione sopra il cluster, proprio come un'app normale. |