Gérer l'unicité avec Lambda SnapStart - AWS Lambda

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 des secrets uniques et uniquesIDs, ainsi que l'entropie utilisée pour générer du pseudo-hasard.

Nous vous recommandons les bonnes pratiques suivantes pour vous aider à maintenir l'unicité de votre code. 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, é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. Nous vous recommandons plutôt de générer des données uniques dans votre gestionnaire de fonction ou d'utiliser un hook d'exécution.

Exemple – Génération d'un ID unique dans le gestionnaire de fonctions

L'exemple suivant montre comment générer un UUID dans le gestionnaire de fonctions.

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!"; } }

Utiliser des générateurs de nombres pseudo-aléatoires sécurisés par cryptographie () CSPRNGs

Si votre application repose sur le caractère aléatoire, nous vous recommandons d'utiliser des générateurs de nombres aléatoires sécurisés par cryptographie ()CSPRNGs. Le runtime géré Lambda pour Java inclut deux fonctions intégrées CSPRNGs (Open SSL 1.0.2 etjava.security.SecureRandom) qui maintiennent automatiquement le caractère aléatoire avec. SnapStart Logiciel qui obtient toujours des nombres aléatoires /dev/random ou qui /dev/urandom maintient le caractère aléatoire avec SnapStart.

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 :

d'outils 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 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 :

d'outils 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

Fournisseur de cryptomonnaies Amazon Corretto

2.4.1

2.4.1
Fournisseur de cryptomonnaies Amazon Corretto FIPS

2.4.1

2.4.1
Exemple — java.security. SecureRandom

L'exemple suivant utilise java.security.SecureRandom, qui génère des séquences de nombres uniques même lorsque la fonction est restaurée à partir d'un instantané.

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 outil de numérisation

Lambda fournit un outil d'analyse pour vous aider à vérifier le code qui suppose l'unicité. L'outil de SnapStart numérisation est un SpotBugsplugin open source qui exécute une analyse statique par rapport à un ensemble de règles. L'outil d'analyse aide à identifier les implémentations de code potentielles qui pourraient enfreindre les suppositions concernant l'unicité. Pour les instructions d'installation et la liste des vérifications effectuées par l'outil d'analyse, consultez le référentiel aws-lambda-snapstart-java-rules sur GitHub.

Pour en savoir plus sur la gestion de l'unicité avec SnapStart, consultez Starting up faster with AWS Lambda SnapStart sur le blog AWS Compute.