Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gérer l'unicité avec Lambda SnapStart
Lorsque les invocations augmentent sur une SnapStart fonction, Lambda utilise un seul instantané initialisé pour reprendre plusieurs environnements d'exécution. Si votre code d’initialisation génère un contenu unique qui est inclus dans l’instantané, ce contenu peut ne pas être unique lorsqu’il est réutilisé dans plusieurs environnements d’exécution. Pour conserver l'unicité lors de l'utilisation SnapStart, vous devez générer un contenu unique après l'initialisation. Cela inclut les identifiants uniques, les secrets uniques et l’entropie utilisée pour générer un pseudo aléatoire.
Nous vous recommandons les bonnes pratiques suivantes pour vous aider à maintenir l’unicité de votre code. Pour les fonctions Java, Lambda fournit également un outil d'SnapStart analyse open source pour aider à vérifier le code qui suppose un caractère unique. Si vous générez des données uniques pendant la phase d’initialisation, vous pouvez utiliser un hook d’exécution pour rétablir l’unicité. Avec les hooks d’exécution, vous pouvez exécuter un code spécifique immédiatement avant que Lambda ne prenne un instantané ou immédiatement après que Lambda ait repris une fonction à partir d’un instantané.
Évitez de sauvegarder un état qui dépend de l’unicité pendant l’initialisation
Pendant la phase d'initialisation de votre fonction d'événement, évitez de mettre en cache des données censées être uniques, par exemple en générant un identifiant unique pour la journalisation ou en définissant des valeurs de départ pour des fonctions aléatoires. Nous vous recommandons plutôt de générer des données uniques ou de configurer des seeds pour des fonctions random dans votre gestionnaire de fonction ou d’utiliser un hook d’exécution.
Les exemples suivants montrent comment générer un UUID dans le gestionnaire Event Function.
Utilisation de générateurs de nombres pseudo aléatoires cryptographiquement sécurisés (CSPRNG)
Lorsqu'il SnapStart est activé, Lambda prend un instantané de l'environnement d'exécution de votre fonction, y compris de toute la mémoire de l'application et du système. Cela signifie que l'état interne de chaque générateur de nombres aléatoires (RNG) est préservé exactement tel qu'il était au moment de la capture d'écran, ainsi que tous les octets aléatoires que votre application ou ses dépendances ont déjà générés et stockés dans des mémoires tampons.
Lorsque Lambda restaure un environnement d'exécution à partir d'un instantané, il réinitialise le générateur de nombres aléatoires du noyau à partir /dev/random et /dev/urandom avec une nouvelle entropie. Un logiciel qui lit des nombres aléatoires directement à partir de ces appareils maintient le caractère aléatoire avec SnapStart.
Si votre application dépend du caractère aléatoire, nous vous recommandons d’utiliser des générateurs de nombres aléatoires cryptographiquement sécurisés (CSPRNG). Outre l'OpenSSL fourni par AL, les environnements d'exécution gérés par Lambda compatibles SnapStart (Java version 11+, Python version 3.12+ et .NET version 8+) incluent les CSPRNG intégrés suivants :
-
Java :
java.security.SecureRandom -
Python :
random.SystemRandom -
.NET :
System.Security.Cryptography.RandomNumberGenerator
Note
Pour l'exécution de Go Lambda, aucune modification n'est requise si vos fonctions utilisent la bibliothèque standardcrypto/rand, qui est compatible avec Snapstart par défaut.
Lorsque vous empaquetez votre fonction sous forme d'image de conteneur, votre image de base détermine l'unicité de la compatibilité avec SnapStart :
-
Une image de base Lambda pour un environnement d'exécution géré (Java version 11+, Python version 3.12+ et .NET version 8+) — Compatible avec les versions décrites ci-dessus. SnapStart
-
L'image de base .al2023 fournie : compatible si l'environnement d'exécution de votre langage de programmation obtient de l'entropie à partir de
/dev/randomou de la version d'OpenSSL ( SnapStart-compatible openssl-snapsafe-libs) répertoriée dans la liste des packages Amazon Linux 2023./dev/urandomSi votre environnement d'exécution repose sur d'autres sources d'entropie, suivez les étapes décrites dans la section « Votre propre image de base » ci-dessous. -
Votre propre image de base : auditez vos bibliothèques cryptographiques et utilisez un hook d'exécution après restauration pour supprimer tout état du générateur de nombres aléatoires (RNG) mis en cache ou les octets aléatoires mis en mémoire tampon, afin de garantir que la bibliothèque lit la nouvelle entropie du système après la restauration. Par exemple, les fonctions Rust utilisées
rand::rngs::ThreadRngdoivent être appeléesreseed()après la restauration. Nous vous recommandons de créer à l'aide d'une image de base Lambda dans la mesure du possible. En particulier, si votre image de base inclut sa propre version d'OpenSSL ou un fork d'OpenSSL (tel que BoringSSL ou LibreSSL), passez à l'image de base .al2023 fournie, qui inclut une version d'OpenSSL (openssl-snapsafe-libs), ou utilisez libcrypto (-LC). SnapStart-compatible AWSAWS
Versions de bibliothèque minimales prises en charge
AWS les bibliothèques de cryptographie conservent automatiquement le caractère aléatoire en SnapStart commençant par les versions minimales spécifiées dans le tableau suivant. Si vous utilisez ces bibliothèques avec vos fonctions d'événement Lambda, assurez-vous d'utiliser les versions minimales ou ultérieures suivantes :
| Bibliothèque | Version minimale prise en charge (x86) | Version minimale prise en charge (ARM) |
|---|---|---|
| AWS libcrypto (AWS-LC) |
1.16.0 |
1.30.0 |
| AWS libcrypto FIPS |
2.0.13 |
2.0.13 |
Si vous empaquetez les bibliothèques cryptographiques précédentes avec vos fonctions d'événement Lambda sous forme de dépendances transitives via les bibliothèques suivantes, assurez-vous d'utiliser les versions minimales suivantes ou des versions ultérieures :
| Bibliothèque | Version minimale prise en charge (x86) | Version minimale prise en charge (ARM) |
|---|---|---|
| AWS SDK for Java 2.x |
2,23,20 |
2,26,12 |
| AWS Common Runtime pour Java |
0,29,8 |
0,29,25 |
| Amazon Corretto Crypto Provider |
2.4.1 |
2.4.1 |
| Amazon Corretto Crypto Provider FIPS |
2.4.1 |
2.4.1 |
Les exemples suivants montrent comment utiliser de CSPRNG pour garantir des séquences de nombres uniques même lorsque la fonction est restaurée à partir d’un instantané.
SnapStart outil de numérisation (Java uniquement)
Lambda fournit un outil d’analyse pour Java pour vous aider à vérifier le code qui suppose l’unicité. L'outil de SnapStart numérisation est un SpotBugs
Pour en savoir plus sur la gestion de l'unicité avec SnapStart, consultez Starting up faster with AWS Lambda SnapStart