Gestire l'unicità con Lambda SnapStart - 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à.

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 SpotBugsplug-in open source che esegue un'analisi statica rispetto a una serie di regole. Lo strumento di scansione consente di identificare potenziali implementazioni di codice che potrebbero infrangere i presupposti sull'unicità. Per le istruzioni di installazione e un elenco dei controlli eseguiti dallo strumento di scansione, consultate il repository aws-lambda-snapstart-java-rules su. GitHub

Per saperne di più sulla gestione dell'unicità con SnapStart, consulta Starting up faster with AWS Lambda SnapStart sul blog di ComputeAWS.