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à.
Gestire l'unicità con Lambda SnapStart
Quando le chiamate aumentano su una SnapStart funzione, Lambda utilizza una singola istantanea inizializzata per riprendere più ambienti di esecuzione. Se il codice di inizializzazione genera contenuti unici inclusi nello snapshot, il contenuto potrebbe non essere più unico quando viene riutilizzato in più ambienti di esecuzione. Per mantenere l'unicità durante l'utilizzo SnapStart, è necessario generare contenuti unici dopo l'inizializzazione. Ciò include ID univoci, segreti univoci ed entropia utilizzata per generare pseudocasualità.
Di seguito sono riportate le best practice che consentono di mantenere l'unicità nel codice. Lambda fornisce anche uno strumento di SnapStart scansione open source per aiutare a verificare la presenza di codice che presuppone l'unicità. Se durante la fase di inizializzazione vengono generati dati univoci, è possibile utilizzare un hook di runtime per ripristinare l'unicità. Con gli hook di runtime, puoi eseguire codice specifico immediatamente prima che Lambda esegua uno snapshot o subito dopo che Lambda riprende una funzione da uno snapshot.
Evitare lo stato di salvataggio che dipende dall'unicità durante l'inizializzazione
Durante la fase di inizializzazione della funzione, evita di memorizzare nella cache dati destinati a essere univoci, ad esempio la generazione di un ID univoco per la registrazione. Ti consigliamo invece di generare dati univoci all'interno del gestore delle funzioni o di utilizzare un hook di runtime.
Esempio : generazione di un ID univoco nel gestore delle funzioni
Il seguente esempio mostra come generare un UUID nel gestore delle funzioni.
import java.util.UUID; public class Handler implements RequestHandler<String, String> { private static UUID uniqueSandboxId = null; @Override public String handleRequest(String event, Context context) {
if (uniqueSandboxId == null) uniqueSandboxId = UUID.randomUUID();
System.out.println("Unique Sandbox Id: " + uniqueSandboxId); return "Hello, World!"; } }
Utilizza generatori di numeri pseudocasuali crittograficamente sicuri (CSPRNG)
Se l'applicazione dipende dalla casualità, si consiglia di utilizzare generatori di numeri casuali crittograficamente sicuri (CSPRNG). Il runtime gestito da Lambda per Java include due CSPRNG integrati (OpenSSL 1.0.2 e) che mantengono automaticamente la casualità con. java.security.SecureRandom
SnapStart Software che ottiene sempre numeri casuali da o con cui mantiene la casualità. /dev/random
/dev/urandom
SnapStart
Esempio — java.security. SecureRandom
L'esempio seguente utilizza java.security.SecureRandom
, che genera sequenze numeriche univoche anche quando la funzione viene ripristinata da uno snapshot.
import java.security.SecureRandom; public class Handler implements RequestHandler<String, String> {
private static SecureRandom rng = new SecureRandom();
@Override public String handleRequest(String event, Context context) { for (int i = 0; i < 10; i++) { System.out.println(rng.next()); } return "Hello, World!"; } }
SnapStart strumento di scansione
Lambda fornisce uno strumento di scansione che aiuta a verificare la presenza di codice che presuppone l'unicità. Lo strumento di SnapStart scansione è un SpotBugs
Per saperne di più sulla gestione dell'unicità con SnapStart, consulta Starting up faster with AWS Lambda SnapStart