Anuncio de la migración del tiempo de ejecución de Java 8 en AWS Lambda a Amazon Corretto

¿Lo que está sucediendo?

A partir del 19 de julio de 2021, el tiempo de ejecución administrado de Java 8 en AWS Lambda migrará de la implementación actual del Open Java Development Kit (OpenJDK) a la última implementación de Amazon Corretto .

Para reflejar este cambio, la Consola de administración de AWS cambiará la forma en que se muestran los tiempos de ejecución de Java 8. El nombre para mostrar de los tiempos de ejecución que utilizan el identificador ‘java8’ cambiará de ‘Java 8’ a ‘Java 8 en Amazon Linux 1’. El nombre para mostrar de los tiempos de ejecución que utilizan el identificador ‘java8.al2’ cambiará de ‘Java 8 (Corretto)’ a ‘Java 8 en Amazon Linux 2’. Los identificadores ‘java8’ y ‘java8.al2’ en sí mismos, tal como los utilizan herramientas como AWS CLI , CloudFormation y AWS SAM , no cambiarán.

¿Por qué estás haciendo este cambio?

Este cambio permite a los clientes beneficiarse de las últimas innovaciones y el soporte ampliado de la distribución de Amazon Corretto JDK. Amazon Corretto es una distribución multiplataforma lista para producción sin costo de OpenJDK. Corretto está certificado como compatible con el estándar Java SE y se utiliza internamente en Amazon para muchos servicios de producción.

Amazon está comprometido con Corretto y proporciona actualizaciones periódicas que incluyen correcciones de seguridad y mejoras de rendimiento. Con este cambio, estos beneficios están disponibles para todos los clientes de Lambda. Para obtener más información sobre las mejoras proporcionadas por Amazon Corretto 8, consulte Registros de cambios de Amazon Corretto 8 .

¿Cómo afecta esto a las funciones existentes de Java 8?

Amazon Corretto 8 está diseñado como un reemplazo directo de OpenJDK 8. La mayoría de las funciones se benefician sin problemas de las mejoras de esta actualización sin ninguna acción por su parte.

En casos excepcionales, cambiar a Amazon Corretto 8 presenta problemas de compatibilidad. Consulte a continuación los problemas conocidos y orientación sobre cómo verificar la compatibilidad antes de este cambio.

¿Cuándo sucederá esto?

Esta migración a Amazon Corretto se realiza en varias etapas:

  • 15 de junio de 2021 : disponibilidad de capas Lambda para probar la compatibilidad de funciones con el tiempo de ejecución de Amazon Corretto. El inicio de la consola de administración de AWS cambia a los nombres de visualización java8 y java8.al2.
  • 19 de julio de 2021 : cualquier función nueva que utilice el tiempo de ejecución de java8 utilizará Amazon Corretto. Si actualiza una función existente, pasará a Amazon Corretto automáticamente. La 
    public.ecr.aws/lambda/java:8
     imagen base del contenedor se actualiza para usar Amazon Corretto.
  • 16 de agosto de 2021 : para las funciones que no se han actualizado desde el 28 de junio, AWS comenzará una transición automática al nuevo tiempo de ejecución de Corretto.
  • 10 de septiembre de 2021 : migración completada.

Estos cambios solo se aplican a las funciones que no utilizan las capas 

arn:aws:lambda:::awslayer:Java8Corretto
arn:aws:lambda:::awslayer:Java8OpenJDK
que se describen a continuación.

¿Cuáles de mis funciones de Lambda se ven afectadas?

Lambda admite dos versiones del tiempo de ejecución administrado de Java 8: el tiempo de ejecución java8, que se ejecuta en Amazon Linux 1, y el tiempo de ejecución java8.al2, que se ejecuta en Amazon Linux 2. Este cambio solo afecta a las funciones que utilizan el tiempo de ejecución java8. Las funciones del tiempo de ejecución java8.al2 ya están usando la implementación de Amazon Corretto de Java 8 y no se ven afectadas.

El siguiente comando muestra cómo usar la AWS CLI para enumerar todas las funciones en una región específica usando el tiempo de ejecución de java8. Para encontrar todas estas funciones en su cuenta, repita este comando para cada región:

aws lambda list-functions --function-version ALL --region us-east-1 --output text --query "Functions[?Runtime=='java8'].FunctionArn"

¿Que necesito hacer?

Si está utilizando el tiempo de ejecución de java8, sus funciones se actualizarán automáticamente. Para cargas de trabajo de producción, le recomendamos que pruebe las funciones con anticipación para comprobar su compatibilidad con Amazon Corretto 8.

Para las funciones de Lambda que usan imágenes de contenedor, la 

public.ecr.aws/lambda/java:8
imagen base de contenedor existente se actualizará para usar la implementación de Java de Amazon Corretto. Debe actualizar manualmente sus funciones para utilizar la imagen base del contenedor actualizada.

¿Cómo puedo probar la compatibilidad con Amazon Corretto 8?

Si está utilizando el tiempo de ejecución administrado de java8, puede probar funciones con la nueva versión del tiempo de ejecución agregando la referencia de capa 

arn:aws:lambda:::awslayer:Java8Corretto
 a la configuración de la función. Esta capa indica al servicio Lambda que utilice la implementación de Amazon Corretto de Java 8. No contiene ningún dato ni código.

Si está utilizando imágenes de contenedor, actualice la JVM en su imagen a Amazon Corretto para realizar pruebas. Aquí hay un Dockerfile de ejemplo:


FROM public.ecr.aws/lambda/java:8

# Update the JVM to the latest Corretto version
## Import the Corretto public key
rpm --import https://yum.corretto.aws/corretto.key

## Add the Corretto yum repository to the system list
curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo

## Install the latest version of Corretto 8
yum install -y java-1.8.0-amazon-corretto-devel

# Copy function code and runtime dependencies from Gradle layout
COPY build/classes/java/main ${LAMBDA_TASK_ROOT}
COPY build/dependency/* ${LAMBDA_TASK_ROOT}/lib/

# Set the CMD to your handler
CMD [ "com.example.LambdaHandler::handleRequest" ]

Estibador

¿Puedo seguir usando la versión OpenJDK de Java 8?

Puede continuar usando la versión OpenJDK de Java 8 agregando la referencia de capa 

arn:aws:lambda:::awslayer:Java8OpenJDK
a la configuración de la función. Esta capa le dice al servicio Lambda que use la implementación OpenJDK de Java 8. No contiene ningún dato ni código.

Esta opción le brinda más tiempo para abordar cualquier incompatibilidad de código con Amazon Corretto 8. No recomendamos que use esta opción para continuar usando la implementación de Java OpenJDK de Lambda a largo plazo. Después de esta migración, ya no recibirá actualizaciones de seguridad ni corrección de errores. Después de abordar cualquier problema de compatibilidad, elimine esta referencia de capa para que la función utilice la implementación administrada Lambda-Amazon Corretto de Java 8.

¿Cuáles son las diferencias conocidas entre OpenJDK 8 y Amazon Corretto 8 en Lambda?

Amazon Corretto almacena en caché las sesiones TCP durante más tiempo que OpenJDK 8. Las funciones que crean nuevas conexiones (por ejemplo, nuevos clientes de AWS SDK ) en cada invocación sin cerrarlas pueden experimentar un aumento en el uso de la memoria. En el peor de los casos, esto podría hacer que la función consuma toda la memoria disponible, lo que da como resultado un error de invocación y un posterior inicio en frío.

Le recomendamos que no cree clientes de AWS SDK en su controlador de funciones en cada invocación de funciones. En su lugar, cree clientes de SDK fuera del controlador de funciones como objetos estáticos que puedan ser utilizados por varias invocaciones. Para obtener más información, consulte Inicialización estática en la Guía del operador de Lambda .

Si debe utilizar un nuevo cliente en cada invocación, asegúrese de que se cierre al final de cada invocación. Esto evita que las cachés de sesión TCP utilicen recursos innecesarios.