Cómo gestionar la exclusividad con Lambda SnapStart - AWS Lambda

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cómo gestionar la exclusividad con Lambda SnapStart

Cuando las invocaciones se amplían en una SnapStart función, Lambda utiliza una única instantánea inicializada para reanudar varios entornos de ejecución. Si el código de inicialización genera contenido único que se incluye en la instantánea, es posible que el contenido no lo sea cuando se reutilice en los entornos de ejecución. Para mantener la exclusividad durante el uso SnapStart, debe generar contenido único después de la inicialización. Esto incluye ID y secretos únicos y entropía que se utiliza para generar pseudoaleatoriedad.

Sugerimos las siguientes prácticas recomendadas para ayudarlo a mantener la exclusividad en su código: Lambda también proporciona una herramienta de SnapStart escaneo de código abierto para ayudar a comprobar si el código asume su exclusividad. Si genera datos exclusivos durante la fase de inicialización, puede utilizar un enlace de tiempo de ejecución para restaurar la exclusividad. Con los enlaces de tiempo de ejecución, puede ejecutar un código específico inmediatamente antes de que Lambda tome una instantánea o inmediatamente después de que Lambda reanude una función a partir de una instantánea.

Evite guardar el estado que depende de la exclusividad durante la inicialización.

Durante la fase de inicialización de la función, evite almacenar en caché datos destinados a ser exclusivos, por ejemplo, generar un ID exclusivo para el registro. En su lugar, le recomendamos que genere datos exclusivos dentro del controlador de funciones o que utilice un enlace de tiempo de ejecución.

ejemplo — Generar un ID exclusivo en el controlador de funciones

En el ejemplo siguiente se muestra cómo generar un UUID en el controlador de funciones.

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

Utilice generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG)

Si su aplicación depende de la aleatoriedad, le recomendamos que utilice generadores de números pseudoaleatorios criptográficamente seguros. El tiempo de ejecución gestionado por Lambda para Java incluye dos CSPRNG integrados (OpenSSL 1.0.2 y) que mantienen automáticamente la aleatoriedad con. java.security.SecureRandom SnapStart Software que siempre obtiene números aleatorios o que también mantiene la aleatoriedad. /dev/random /dev/urandom SnapStart

ejemplo — java.security. SecureRandom

En el siguiente ejemplo se utiliza java.security.SecureRandom, que genera secuencias numéricas exclusivas incluso cuando la función se restaura a partir de una instantánea.

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 herramienta de escaneo

Lambda proporciona una herramienta de escaneo para ayudar a comprobar si el código asume que es exclusivo. La herramienta de SnapStart escaneo es un SpotBugscomplemento de código abierto que ejecuta un análisis estático según un conjunto de reglas. La herramienta de escaneo ayuda a identificar posibles implementaciones de código que podrían romper las suposiciones con respecto a la exclusividad. Para obtener instrucciones de instalación y una lista de las comprobaciones que realiza la herramienta de escaneo, consulte el repositorio aws-lambda-snapstart-java-rules en. GitHub

Para obtener más información sobre cómo gestionar la exclusividad con SnapStart, consulta Cómo empezar más rápido con AWS Lambda SnapStart en el blog de AWS informática.