Gestione dell'unicità con Lambda SnapStart
Quando le chiamate aumentano su una funzione SnapStart, Lambda utilizza un singolo snapshot inizializzato 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à quando si utilizza SnapStart, è necessario generare contenuti univoci 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. Per le funzioni Java, Lambda fornisce anche uno strumento di scansione SnapStart open source che aiuta 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 o l'impostazione di seed per funzioni casuali. Ti consigliamo invece di generare dati univoci o impostare seed per le funzioni casuali all'interno dell'handler delle funzioni o di utilizzare un hook di runtime.
I seguenti esempi mostrano come generare un UUID nell'handler delle funzioni.
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). Oltre a OpenSSL 1.0.2, i runtime gestiti da Lambda includono anche i seguenti CSPRNG integrati:
-
Java:
java.security.SecureRandom -
Python:
random.SystemRandom -
.NET:
System.Security.Cryptography.RandomNumberGenerator
Il software che ottiene sempre numeri casuali da /dev/random o /dev/urandom mantiene la casualità anche con SnapStart.
Le librerie di crittografia AWS mantengono automaticamente la casualità con SnapStart a partire dalle versioni minime specificate nella tabella seguente. Se usi queste librerie con le tue funzioni Lambda, assicurati di utilizzare le seguenti versioni minime o versioni successive:
| Libreria | Versione minima supportata (x86) | Versione minima supportata (ARM) |
|---|---|---|
| AWS libcrypto (AWS-LC) |
1.16.0 |
1.30.0 |
| AWS libcrypto FIPS |
2.0.13 |
2.0.13 |
Se impacchetti le librerie di crittografia precedenti con le funzioni Lambda come dipendenze transitive tramite le seguenti librerie, assicurati di utilizzare le seguenti versioni minime o versioni successive:
| Libreria | Versione minima supportata (x86) | Versione minima supportata (ARM) |
|---|---|---|
| AWS SDK for Java 2.x |
2,23,20 |
2,26,12 |
| Runtime comune AWS per Java |
0,229,8 |
0,29,25 |
| Fornitore di servizi di crittografia Amazon Corretto |
2.4.1 |
2.4.1 |
| FIPS Fornitore di servizi di crittografia Amazon Corretto |
2.4.1 |
2.4.1 |
Gli esempi seguenti mostrano come utilizzare i CSPRNG per garantire sequenze numeriche univoche anche quando la funzione viene ripristinata da uno snapshot.
Strumento di scansione SnapStart (solo Java)
Lambda fornisce uno strumento di scansione che aiuta a verificare la presenza di codice che presuppone l'unicità. Lo strumento di scansione SnapStart è un plug-in SpotBugs
Per ulteriori informazioni sulla gestione dell'unicità con SnapStart, consulta Avvio più rapido con AWS Lambda SnapStart