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

Utilisation de générateurs de nombres pseudo aléatoires cryptographiquement sécurisés (CSPRNG)

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). Le runtime géré Lambda pour Java inclut deux CSPRNG intégrés (OpenSSL java.security.SecureRandom 1.0.2 et) 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.

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.