Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Enlaces de tiempo de ejecución de Lambda SnapStart para Java

Modo de enfoque
Enlaces de tiempo de ejecución de Lambda SnapStart para Java - AWS Lambda

Puede utilizar enlaces de tiempo de ejecución para implementar el código antes de que Lambda cree una instantánea o después de que Lambda restaure una función desde una instantánea. Los enlaces de tiempo de ejecución están disponibles como parte del proyecto Coordinated Restore at Checkpoint (CRaC) de código abierto. El CRaC está en desarrollo para el Open Java Development Kit (OpenJDK). Para ver un ejemplo de cómo utilizar CRaC con una aplicación de referencia, visite el repositorio de CRaC en GitHub. CRaC utiliza tres elementos principales:

  • Resource: una interfaz con dos métodos, beforeCheckpoint() y afterRestore(). Utilice estos métodos para implementar el código que desea ejecutar antes de una instantánea y después de una restauración.

  • Context <R extends Resource>: para recibir notificaciones de puntos de comprobación y restauraciones, debe haber un Resource con un Context.

  • Core: el servicio de coordinación, que proporciona el Context global predeterminado mediante el método estático Core.getGlobalContext().

Para obtener más información sobre Context y Resource, consulte Package org.crac en la documentación de CRaC.

Siga los siguientes pasos para implementar enlaces de tiempo de ejecución con Package org.crac. El tiempo de ejecución de Lambda contiene una implementación contextual de CRaC personalizada que invoca los enlaces de tiempo de ejecución antes de realizar comprobaciones y después de restaurarlos.

Registro y ejecución de enlaces en tiempo de ejecución

El orden en que Lambda ejecuta los enlaces de tiempo de ejecución viene determinado por el orden de registro. El orden de registro sigue el orden de importación, definición o ejecución del código.

  • beforeCheckpoint(): se ejecuta en el orden inverso al de registro

  • afterRestore(): se ejecuta en el orden del registro

Asegúrese de que todos los enlaces registrados se hayan importado e incluido correctamente en el código de la función. Si registra los enlaces de tiempo de ejecución en un archivo o módulo independiente, debe asegurarse de que el módulo se importe, directamente o como parte de un paquete más grande, al archivo controlador de la función. Si el archivo o el módulo no se importa en el controlador de funciones, Lambda ignora los enlaces del tiempo de ejecución.

nota

Cuando Lambda crea una instantánea, el código de inicialización puede ejecutarse durante un máximo de 15 minutos. El límite de tiempo es de 130 segundos o el tiempo de espera de la función configurado (máximo de 900 segundos), lo que sea mayor. Los enlaces en tiempo de ejecución beforeCheckpoint() cuentan para el límite de tiempo del código de inicialización. Cuando Lambda restaura una instantánea, el tiempo de ejecución debe cargarse y los enlaces de tiempo de ejecución afterRestore() deben completarse antes de que transcurra el tiempo de espera (10 segundos). De lo contrario, obtendrá una excepción SnapStartTimeoutException.

Paso 1: Actualizar la configuración de compilación

Agregue la dependencia org.crac a la configuración de compilación. El siguiente ejemplo utiliza Gradle. Para ver ejemplos de otros sistemas de compilación, consulte la documentación de Apache Maven.

dependencies { compile group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.1' # All other project dependecies go here: # ... # Then, add the org.crac dependency: implementation group: 'org.crac', name: 'crac', version: '1.4.0' }

Paso 2: Actualizar del controlador de Lambda

El controlador de la función de Lambda es el método del código de la función que procesa eventos. Cuando se invoca una función, Lambda ejecuta el método del controlador. La función se ejecuta hasta que el controlador devuelve una respuesta, se cierra o se agota el tiempo de espera.

Para obtener más información, consulte Definir el controlador de las funciones de Lambda en Java.

El siguiente controlador de ejemplo muestra cómo ejecutar el código antes de comprobar (beforeCheckpoint()) y después de restaurarlo (afterRestore()). Este controlador también registra el Resource al Context global administrado en tiempo de ejecución.

nota

Cuando Lambda crea una instantánea, el código de inicialización puede ejecutarse durante un máximo de 15 minutos. El límite de tiempo es de 130 segundos o el tiempo de espera de la función configurado (máximo de 900 segundos), lo que sea mayor. Los enlaces en tiempo de ejecución beforeCheckpoint() cuentan para el límite de tiempo del código de inicialización. Cuando Lambda restaura una instantánea, el tiempo de ejecución (JVM) debe cargarse y los enlaces de tiempo de ejecución afterRestore() deben completarse antes de que transcurra el tiempo de espera (10 segundos). De lo contrario, obtendrá una excepción SnapStartTimeoutException.

... import org.crac.Resource; import org.crac.Core; ... public class CRaCDemo implements RequestStreamHandler, Resource { public CRaCDemo() { Core.getGlobalContext().register(this); } public String handleRequest(String name, Context context) throws IOException { System.out.println("Handler execution"); return "Hello " + name; } @Override public void beforeCheckpoint(org.crac.Context<? extends Resource> context) throws Exception { System.out.println("Before checkpoint"); } @Override public void afterRestore(org.crac.Context<? extends Resource> context) throws Exception { System.out.println("After restore");

Context mantiene solo una WeakReference para el objeto registrado. Si un Resource es una recopilación de elementos no utilizados, los enlaces de tiempo de ejecución no se ejecutan. Su código debe mantener una referencia segura para el Resource para garantizar que se ejecute el enlace de tiempo de ejecución.

Estos son dos ejemplos de patrones que se deben evitar:

ejemplo — Objeto sin una referencia sólida
Core.getGlobalContext().register( new MyResource() );
ejemplo — Objetos de clases anónimas
Core.getGlobalContext().register( new Resource() { @Override public void afterRestore(Context<? extends Resource> context) throws Exception { // ... } @Override public void beforeCheckpoint(Context<? extends Resource> context) throws Exception { // ... } } );

En su lugar, mantenga una referencia sólida. En el siguiente ejemplo, el recurso registrado no es una recopilación de elementos no utilizados y los enlaces de tiempo de ejecución se ejecutan de manera uniforme.

ejemplo — Objeto con una referencia sólida
Resource myResource = new MyResource(); // This reference must be maintained to prevent the registered resource from being garbage collected Core.getGlobalContext().register( myResource );
PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.