Le migliori pratiche per le istanze gestite Lambda - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Le migliori pratiche per le istanze gestite Lambda

Configurazione del provider di capacità

Separa i fornitori di capacità in base al livello di fiducia. Crea diversi provider di capacità per carichi di lavoro con requisiti di sicurezza diversi. Tutte le funzioni assegnate allo stesso fornitore di capacità devono essere considerate affidabili da entrambe le parti, in quanto i fornitori di capacità fungono da limite di sicurezza.

Usa nomi descrittivi. Denominate i fornitori di capacità per indicare chiaramente l'uso previsto e il livello di affidabilità (ad esempioproduction-trusted,dev-sandbox). Questo aiuta i team a comprendere lo scopo e il livello di sicurezza di ciascun fornitore di capacità.

Utilizza più zone di disponibilità. Specificate le sottoreti su più zone di disponibilità durante la creazione di provider di capacità. Lambda lancia tre istanze per impostazione predefinita per la resilienza AZ, garantendo un'elevata disponibilità delle funzioni.

Selezione del tipo di istanza

Consenti a Lambda di scegliere i tipi di istanza. Per impostazione predefinita, Lambda sceglie i tipi di istanza migliori per il tuo carico di lavoro. Ti consigliamo di lasciare che le istanze gestite da Lambda scelgano i tipi di istanza per te, poiché limitare il numero di tipi di istanze possibili può comportare una minore disponibilità.

Specificate i tipi di istanza per requisiti specifici. Se hai requisiti hardware specifici, imposta i tipi di istanze consentiti su un elenco di istanze compatibili. Esempio:

  • Per le applicazioni che richiedono un'elevata larghezza di banda di rete, seleziona diversi tipi di istanze n

  • Per ambienti di test o sviluppo con vincoli di costo, scegli tipi di istanze più piccoli come m7a.large

Configurazione delle funzioni

Scegli le impostazioni di memoria e vCPU appropriate. Seleziona configurazioni di memoria e vCPU che supportano le esecuzioni simultanee della tua funzione. La dimensione minima della funzione supportata è 2 GB e 1 vCPU.

  • Per le applicazioni Python, scegli un rapporto più elevato tra memoria e v CPUs (ad esempio 4 a 1 o 8 a 1) a causa del modo in cui Python gestisce la multi-concorrenza

  • Per operazioni che richiedono un uso intensivo della CPU o funzioni che eseguono poco I/O, scegli più di una vCPU

  • Per le applicazioni che richiedono un elevato livello di I/O, come i servizi Web o i lavori in batch, la multi-concorrenza offre i maggiori vantaggi

Configura la massima concorrenza in modo appropriato. Lambda sceglie impostazioni predefinite ragionevoli per la massima concorrenza che bilanciano il consumo di risorse e la velocità effettiva. Modifica questa impostazione in base all'utilizzo delle risorse della tua funzione:

  • Aumenta la concorrenza massima (fino a 64 per vCPU) se le chiamate alle funzioni utilizzano pochissima CPU

  • Riduci la concorrenza massima se l'applicazione consuma una grande quantità di memoria e pochissima CPU

Tieni presente che gli ambienti di esecuzione con una concorrenza molto bassa possono presentare rallentamenti e difficoltà di scalabilità.

Scaling configuration (Configurazione dimensionamento)

Imposta l'utilizzo appropriato delle risorse target. Per impostazione predefinita, Lambda offre un margine di manovra sufficiente per raddoppiare il traffico entro 5 minuti senza acceleratori. Modifica questa impostazione in base alle caratteristiche del carico di lavoro:

  • Per carichi di lavoro molto stabili o applicazioni non sensibili alle limitazioni di velocità, stabilisci l'obiettivo su un livello elevato per ottenere un maggiore utilizzo e ridurre i costi

  • Per i carichi di lavoro con potenziali aumenti di traffico, stabilisci obiettivi di risorse a un livello basso per mantenere un margine di crescita aggiuntivo

Pianifica la crescita del traffico. Se il traffico raddoppia più che nel giro di 5 minuti, potresti riscontrare rallentamenti man mano che Lambda aumenta la scalabilità delle istanze e degli ambienti di esecuzione. Progetta la tua applicazione per gestire le potenziali limitazioni durante i periodi di rapida scalabilità.

Sicurezza

Applica il privilegio minimo per le autorizzazioni. PassCapacityProvider Concedi lambda:PassCapacityProvider le autorizzazioni solo ai fornitori di capacità necessari. Utilizza le autorizzazioni a livello di risorsa per limitare i fornitori di capacità che gli utenti possono assegnare alle funzioni.

Monitora l'utilizzo dei provider di capacità. Utilizzato AWS CloudTrail per monitorare le assegnazioni dei provider di capacità e i modelli di accesso. Questo aiuta a identificare i tentativi di accesso non autorizzati e garantisce la conformità alle politiche di sicurezza.

Separa i carichi di lavoro non affidabili. Non fare affidamento sui contenitori per l'isolamento di sicurezza tra carichi di lavoro non affidabili. Utilizza diversi provider di capacità per separare i carichi di lavoro che non sono reciprocamente affidabili.

Ottimizzazione dei costi

Sfrutta le opzioni EC2 di prezzo. Sfrutta i vantaggi di EC2 Savings Plans e Reserved Instances per ridurre i costi. Queste opzioni di prezzo si applicano all' EC2 elaborazione sottostante (la commissione di gestione del 15% non è scontata).

Ottimizza per carichi di lavoro stazionari. Le istanze gestite Lambda sono più adatte per funzioni stazionarie con traffico prevedibile ad alto volume. Per modelli di traffico a raffica, Lambda (impostazione predefinita) può essere più conveniente.

Monitora l'utilizzo delle risorse. Tieni traccia delle CloudWatch metriche per comprendere l'utilizzo della CPU e della memoria. Modifica l'allocazione della memoria delle funzioni e la selezione del tipo di istanza in base ai modelli di utilizzo effettivi per ottimizzare i costi.

Monitoraggio e osservabilità

Monitora le metriche dei fornitori di capacità. Tieni traccia delle metriche a livello di provider di capacità CPUUtilization MemoryUtilization, tra cuiCPUAvailable, v e verifica MemoryAvailable che siano disponibili risorse sufficienti per i tuoi carichi di lavoro.

Monitora le metriche dell'ambiente di esecuzione. Tieni traccia delle metriche a livello di ambiente di esecuzione, tra cui ExecutionEnvironmentConcurrency e ExecutionEnvironmentConcurrencyLimit per comprendere il comportamento di scalabilità e identificare potenziali limitazioni.

Imposta allarmi. CloudWatch Crea CloudWatch allarmi per le metriche chiave per identificare in modo proattivo i problemi:

  • Utilizzo elevato della CPU o della memoria

  • Bassa capacità disponibile

  • Ci avviciniamo ai limiti di concorrenza

Considerazioni specifiche sul runtime

Segui le best practice specifiche per il runtime. Ogni runtime gestisce la concorrenza multipla in modo diverso. Consulta le guide specifiche per il runtime per consigli dettagliati:

  • Java: utilizza raccolte thread-safe e per lo stato specifico della richiesta AtomicInteger ThreadLocal

  • Node.js: da utilizzare InvokeStore per tutti gli stati specifici della richiesta ed evitare le variabili globali

  • Python: usa nomi di file univoci nella richiesta IDs e considera /tmp l'isolamento della memoria basato sul processo

Verifica la sicurezza dei thread e i problemi di concorrenza. Prima di passare alla produzione, testate accuratamente le vostre funzioni per verificare eventuali problemi di sicurezza dei thread, le condizioni di gara e il corretto isolamento dello stato in presenza di carichi simultanei.

Fasi successive