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 appels 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 qui permet de 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, évitez de mettre en cache des données qui sont censées être uniques, comme la génération d’un ID unique pour la journalisation ou la configuration de seeds pour les fonctions random. 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 de fonctions.
Utilisation de générateurs de nombres pseudo aléatoires cryptographiquement sécurisés (CSPRNG)
Lorsque cette option SnapStart est activée, Lambda prend un instantané de l'environnement d'exécution de votre fonction, y compris de l'ensemble de la mémoire des applications 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, de même 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 de /dev/random et /dev/urandom avec une nouvelle entropie. Les logiciels qui lisent des nombres aléatoires directement à partir de ces appareils conservent 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 qui prennent en charge 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 conditionnez votre fonction sous forme d'image de conteneur, votre image de base détermine la compatibilité d'unicité 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 comme décrit ci-dessus. SnapStart
-
L'image de base .al2023 fournie : compatible si l'exécution de votre langage de programmation obtient de l'entropie à partir de
/dev/random/dev/urandom, ou si la SnapStart-compatible version d'OpenSSL (openssl-snapsafe-libs) figure dans la liste des packages Amazon Linux 2023. https://docs.aws.amazon.com/linux/al2023/release-notes/all-packages.html Si 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 post-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 vous assurer que la bibliothèque lit une nouvelle entropie provenant du système après la restauration. Par exemple, les fonctions Rust qui utilisent
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 SnapStart-compatible version d'OpenSSL (openssl-snapsafe-libs), ou utilisez libcrypto (-LC). 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 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 de chiffrement ci-dessus avec vos fonctions 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 Démarrage plus rapide avec AWS Lambda SnapStart