Migración de la aplicación de Linux de Elastic Beanstalk a Amazon Linux 2 - AWS Elastic Beanstalk

Migración de la aplicación de Linux de Elastic Beanstalk a Amazon Linux 2

AWS Elastic Beanstalk utiliza Amazon Linux 2 como el sistema operativo para plataformas Linux. Las ramificaciones de la plataforma de la generación anterior basadas en la AMI de Amazon Linux han quedado deprecated. Para obtener más información sobre las plataformas Linux, consulte Plataformas Linux de Elastic Beanstalk.

Si la aplicación de Elastic Beanstalk se basa en una ramificación de la plataforma de la AMI de Amazon Linux, utilice esta página para aprender a migrar los entornos de su aplicación a Amazon Linux 2. No está garantizado que, con la aplicación existente, las dos generaciones de plataformas sean compatibles con las versiones anteriores. Además, aunque el código de la aplicación se implemente correctamente en la nueva versión de la plataforma, es posible que se comporte o funcione de forma diferente debido a las diferencias del sistema operativo y del entorno de ejecución. Aunque la AMI de Amazon Linux y Amazon Linux 2 comparten el mismo kernel de Linux, difieren en el sistema de inicialización, las versiones de libc, la cadena de herramientas del compilador y varios paquetes. También hemos actualizado versiones específicas del entorno de ejecución de la plataforma, algunas herramientas de compilación y otras dependencias. Por tanto, le recomendamos que se tome su tiempo, pruebe la aplicación a fondo en un entorno de desarrollo y realice los ajustes necesarios.

Cuando esté listo para ir a producción, Elastic Beanstalk necesitará una implementación blue/green para realizar la actualización. Para obtener más información sobre las estrategias de actualización de las plataformas, consulte Actualización de la versión de la plataforma del entorno de Elastic Beanstalk.

nota

La consola de Elastic Beanstalk proporciona consejos de migración específicos de la plataforma para muchas ramificaciones de plataformas de la AMI de Amazon Linux obsoletas. Puede ver esta información al visualizar el panel de un entorno que utiliza una de estas ramificaciones de plataforma obsoletas o cuando elige una de estas ramificaciones mientras crea un nuevo entorno. En ambos casos, la consola muestra una advertencia con un enlace de Información. Para ver la información sobre migración de esta plataforma, elija Información. Se abre un panel de ayuda y muestra la información relacionada.

Consideraciones aplicables a todas las plataformas Linux

En la tabla siguiente, se describen algunas consideraciones que debe tener en cuenta al planificar la migración de una aplicación a Amazon Linux 2. Estas consideraciones se aplican a cualquiera de las plataformas Linux de Elastic Beanstalk, sin tener en cuenta los lenguajes de programación o los servidores de aplicaciones específicos.

Area Cambios e información

Archivos de configuración

En las plataformas Amazon Linux 2, puede utilizar los mismos archivos de configuración que antes, ya que todas las secciones funcionarán de la misma manera. Sin embargo, es posible que algunas opciones no funcionen igual que lo hacían en las plataformas anteriores de la AMI de Amazon Linux. Por ejemplo:

  • Es posible que algunos de los paquetes de software que instala utilizando un archivo de configuración no estén disponibles en Amazon Linux 2 o que sus nombres hayan cambiado.

  • Algunas opciones de configuración específicas de la plataforma han cambiado los espacios de nombres específicos de la plataforma por otros diferentes que no dependen de ninguna plataforma.

  • Los archivos de configuración del proxy que se encuentran en el directorio .ebextensions/nginx deben moverse al directorio de enlaces de plataforma .platform/nginx. Para obtener más información, expanda la sección Configuración del proxy inverso de Ampliación de las plataformas Linux de Elastic Beanstalk.

Es conveniente utilizar enlaces de plataforma para ejecutar código personalizado en las instancias del entorno. Puede seguir utilizando comandos y comandos de contenedor en los archivos de configuración .ebextensions, pero no resulta fácil trabajar con ellos. Por ejemplo, escribir scripts de comando en un archivo YAML puede resultar engorroso y difícil de probar.

Tendrá que seguir utilizando los archivos de configuración .ebextensions con cualquier script que necesite una referencia a un recurso de AWS CloudFormation.

Enlaces de la plataforma

Las plataformas Amazon Linux 2 cuentan con un nuevo mecanismo para ampliar la plataforma del entorno añadiendo ejecutables en los directorios de enlaces de las instancias del entorno. Es posible que, en las versiones anteriores de la plataforma Linux, haya utilizado enlaces de plataforma personalizados. Aunque estos enlaces no estaban diseñados para plataformas administradas y no eran compatibles, podían resultar útiles en algunos casos. En las versiones de la plataforma Amazon Linux 2, los enlaces de plataforma personalizados no funcionan. Debe migrar estos enlaces a los nuevos enlaces de plataforma. Para obtener más información, expanda la sección Enlaces de plataforma de Ampliación de las plataformas Linux de Elastic Beanstalk.

Servidores proxy compatibles

Las versiones de la plataforma Amazon Linux 2 admiten los mismos servidores proxy inversos que cada plataforma admitida en sus versiones de plataforma de la AMI de Amazon Linux. Todas las versiones de plataforma de Amazon Linux 2 utilizan nginx como servidor proxy inverso predeterminado. Las plataformas Tomcat, Node.js, PHP y Python también admiten Apache HTTPD como alternativa. Todas las plataformas habilitan la configuración del servidor proxy de manera uniforme, como se describe en esta sección. Sin embargo, la configuración del servidor proxy es ligeramente diferente de lo que era en la AMI de Amazon Linux. Estas son las diferencias para todas las plataformas:

  • El valor predeterminado es nginx: el servidor proxy predeterminado en todas las versiones de la plataforma Amazon Linux 2 es nginx. En las versiones de la plataforma de la AMI de Amazon Linux de Tomcat, PHP y Python, el servidor proxy predeterminado era Apache HTTPD.

  • Espacio de nombres coherente: todas las versiones de la plataforma Amazon Linux 2 usan el espacio de nombres aws:elasticbeanstalk:environment:proxy para configurar el servidor proxy. En las versiones de la plataforma de la AMI de Amazon Linux, esto era una decisión por plataforma y Node.js usaba un espacio de nombres diferente.

  • Ubicación del archivo de configuración: debe colocar los archivos de configuración de proxy en los directorios .platform/nginx y .platform/httpd de todas las versiones de la plataforma Amazon Linux 2. En las versiones de la plataforma de la AMI de Amazon Linux estas ubicaciones eran .ebextensions/nginx y .ebextensions/httpd, respectivamente.

Para obtener información sobre los cambios de configuración de proxy específicos de la plataforma, consulte Consideraciones específicas de la plataforma. Para obtener información sobre la configuración del proxy en plataformas Amazon Linux 2, expanda la sección Reverse Proxy Configuration (Configuración del proxy inverso) en Ampliación de las plataformas Linux de Elastic Beanstalk.

Perfil de instancia

En las plataformas Amazon Linux 2, es necesario configurar un perfil de instancia. Si se crea un entorno sin un perfil de instancia, este podría funcionar temporalmente; sin embargo, es posible que pronto se produjeran errores, cuando las acciones que requieren un perfil de instancia no pudieran ejecutarse correctamente. Para obtener más información, consulte Administración de perfiles de instancia de Elastic Beanstalk.

Estado mejorado

Las versiones de la plataforma Amazon Linux 2 habilitan el estado mejorado de forma predeterminada. Esto supone un cambio si no utiliza la consola de Elastic Beanstalk para crear sus entornos. De forma predeterminada, siempre que es posible, la consola habilita el estado mejorado, independientemente de la versión de la plataforma. Para obtener más información, consulte Informes y monitorización de estado mejorados.

AMI personalizada

Si su entorno utiliza una AMI personalizada, cree una nueva AMI basada en Amazon Linux 2 para el nuevo entorno que utilice una plataforma Amazon Linux 2 de Elastic Beanstalk.

Plataformas personalizadas

Las AMI administradas de las versiones de la plataforma Amazon Linux 2 no son compatibles con las plataformas personalizadas.

Consideraciones específicas de la plataforma

En esta sección se describen consideraciones de migración específicas de determinadas plataformas Linux de Elastic Beanstalk.

La siguiente tabla muestra información sobre la migración de las versiones de la plataforma Amazon Linux 2 en la plataforma Docker.

Area Cambios e información

Almacenamiento

Elastic Beanstalk configura Docker de tal forma que use controladores de almacenamiento para almacenar los datos de contenedores y las imágenes de Docker. En la AMI de Amazon Linux, Elastic Beanstalk ha utilizado el controlador de almacenamiento Device Mapper. Para mejorar el rendimiento, Elastic Beanstalk aprovisionó un volumen adicional de Amazon EBS. En las versiones de la plataforma Docker de Amazon Linux 2, Elastic Beanstalk utiliza el controlador de almacenamiento OverlayFS y logra un rendimiento aún mejor sin necesidad de un volumen separado.

Con la AMI de Amazon Linux, si ha utilizado la opción BlockDeviceMappings del espacio de nombres aws:autoscaling:launchconfiguration para agregar volúmenes de almacenamiento personalizados a un entorno de Docker, le aconsejamos que también agrega el volumen de Amazon EBS /dev/xvdcz que aprovisiona Elastic Beanstalk. Elastic Beanstalk ya no aprovisiona este volumen, por lo que debería eliminarlo de los archivos de configuración. Para obtener más información, consulte Configuración de Docker en la AMI de Amazon Linux (anterior a Amazon Linux 2).

Autenticación de repositorio privado

Cuando proporciona un archivo de autenticación generado por Docker para conectarse a un repositorio privado, ya no es necesario convertirlo al formato anterior que requerían las versiones de la plataforma Docker de la AMI de Amazon Linux. Las versiones de la plataforma Docker de Amazon Linux 2 admiten el nuevo formato. Para obtener más información, consulte Uso de imágenes de un repositorio privado.

Servidor proxy

Las versiones de la plataforma Docker de Amazon Linux 2 no admiten contenedores independientes que no se ejecuten detrás de un servidor proxy. En las versiones de la plataforma Docker de la AMI de Amazon Linux, esto solía ser posible a través del valor none de la opción ProxyServer en el espacio de nombres aws:elasticbeanstalk:environment:proxy.

La siguiente tabla muestra información sobre la migración de las versiones de la plataforma Amazon Linux 2 en la plataforma Go.

Area Cambios e información

Transferencia de puertos

En las plataformas Amazon Linux 2, Elastic Beanstalk no pasa ningún valor de puerto al proceso de la aplicación a través de la variable de entorno PORT. Si desea simular este comportamiento, puede configurar una propiedad de entorno PORT. Sin embargo, si tiene varios procesos y prevé que Elastic Beanstalk va a pasar valores de puerto incrementales a los procesos (5000, 5100, 5200, etc.), debe modificar la implementación. Para obtener más información, expanda la sección Configuración del proxy inverso de Ampliación de las plataformas Linux de Elastic Beanstalk.

La siguiente tabla muestra información sobre la migración de las ramificaciones de la plataforma Corretto en la plataforma Java SE.

Area Cambios e información

Corretto en comparación con OpenJDK

Para implementar la plataforma Java, Standard Edition (Java SE), las ramificaciones de la plataforma Amazon Linux 2 utilice Amazon Corretto, una distribución de AWS del Open Java Development Kit (OpenJDK). Las ramificaciones anteriores de la plataforma Java SE de Elastic Beanstalk utilizan los paquetes OpenJDK que se incluyen con la AMI de Amazon Linux.

Herramientas de compilación

Las plataformas Amazon Linux 2 tienen versiones más recientes de las herramientas de compilación: gradle, maven y ant.

Administración de archivos JAR

En las plataformas Amazon Linux 2, si su paquete de código fuente (archivo ZIP) contiene un único archivo JAR y ningún otro archivo, Elastic Beanstalk ya no cambia el nombre del archivo JAR a application.jar. Este cambio de nombre solo se produce si el archivo JAR se envía solo, y no dentro de un archivo ZIP.

Transferencia de puertos

En las plataformas Amazon Linux 2, Elastic Beanstalk no pasa ningún valor de puerto al proceso de la aplicación a través de la variable de entorno PORT. Si desea simular este comportamiento, puede configurar una propiedad de entorno PORT. Sin embargo, si tiene varios procesos y prevé que Elastic Beanstalk va a pasar valores de puerto incrementales a los procesos (5000, 5100, 5200, etc.), debe modificar la implementación. Para obtener más información, expanda la sección Configuración del proxy inverso de Ampliación de las plataformas Linux de Elastic Beanstalk.

Java 7

Elastic Beanstalk no admite una ramificación de la plataforma Java 7 de Amazon Linux 2. Si tiene una aplicación Java 7, mígrela a Corretto 8 o a Corretto 11.

La siguiente tabla muestra información sobre la migración de las versiones de la plataforma Amazon Linux 2 en la plataforma Tomcat.

Area Cambios e información

Opciones de configuración

En las versiones de la plataforma Amazon Linux 2, Elastic Beanstalk solo admite un subconjunto de las opciones de configuración y los valores de opción en el espacio de nombres aws:elasticbeanstalk:environment:proxy. A continuación se muestra la información de migración para cada opción.

Opción Información de migración

GzipCompression

No se admite en las versiones de la plataforma Amazon Linux 2.

ProxyServer

Las versiones de la plataforma Tomcat de Amazon Linux 2 admiten los servidores proxy nginx y Apache HTTPD versión 2.4. Sin embargo, la versión 2.2 de Apache no es compatible.

En las versiones de la plataforma de la AMI de Amazon Linux, el proxy predeterminado era Apache 2.4. Si ha utilizado la configuración de proxy predeterminada y ha añadido archivos de configuración de proxy personalizados, la configuración de proxy debería seguir funcionando en Amazon Linux 2. Sin embargo, si utilizó el valor de opción apache/2.2, ahora tiene que migrar su configuración de proxy a la versión 2.4 de Apache.

La opción XX:MaxPermSize del espacio de nombres aws:elasticbeanstalk:container:tomcat:jvmoptions no es compatible con las versiones de la plataforma Amazon Linux 2. La configuración de JVM para modificar el tamaño de la generación permanente se aplica solo a Java 7 y versiones anteriores; por lo tanto, no es aplicable a las versiones de la plataforma Amazon Linux 2.

Ruta de la aplicación

En las plataformas Amazon Linux 2, la ruta al directorio de la aplicación en las instancias de Amazon EC2 de su entorno es /var/app/current. Estaba /var/lib/tomcat8/webapps en plataformas de la AMI de Amazon Linux.

La siguiente tabla muestra información sobre la migración de las versiones de la plataforma Amazon Linux 2 en la plataforma Node.js.

Area Cambios e información

Versiones de Node.js instaladas

En las plataformas Amazon Linux 2, Elastic Beanstalk mantiene varias ramificaciones de la plataforma Node.js y solo instala la versión más reciente de la versión principal de Node.js correspondiente a la ramificación de la plataforma de cada versión de la plataforma. Por ejemplo, cada versión de plataforma de la ramificación de la plataforma Node.js 12 solo tiene la versión Node.js 12.x.y instalada de forma predeterminada. En las versiones de la plataforma de la AMI de Amazon Linux, hemos instalado las múltiples versiones de varias versiones de Node.js en cada versión de la plataforma y hemos mantenido únicamente una ramificación de la plataforma.

Seleccione la ramificación de la plataforma Node.js que se corresponda con la versión principal de Node.js que necesita su aplicación.

Nombres de archivos de registro HTTPD de Apache

En las plataformas Amazon Linux 2, si utiliza el servidor proxy Apache HTTPD, los nombres de archivo de registro HTTPD son access_log y error_log, que es coherente con todas las demás plataformas compatibles con Apache HTTPD. En las versiones de la plataforma de la AMI de Amazon Linux, estos archivos de registro se denominaban access.log y error.log, respectivamente.

Para obtener más información sobre los nombres de archivos de registro y las ubicaciones de todas las plataformas, consulte Cómo Elastic Beanstalk configura CloudWatch Logs.

Opciones de configuración

En las plataformas Amazon Linux 2, Elastic Beanstalk no admite las opciones de configuración en el espacio de nombres aws:elasticbeanstalk:container:nodejs. Algunas de las opciones tienen alternativas. A continuación se muestra la información de migración para cada opción.

Opción Información de migración

NodeCommand

Utilice un Procfile o la palabra clave scripts en un archivo package.json para especificar el script de inicio.

NodeVersion

utilice la palabra clave engines en un archivo package.json para especificar la versión de Node.js. Tenga en cuenta que solo puede especificar una versión de Node.js que corresponde con su ramificación de la plataforma. Por ejemplo, si está utilizando la ramificación de la plataforma para Node.js 12, puede especificar solo una versión de Node.js 12.x.y. Para obtener más información, consulte Especificar las dependencias de Node.js con un archivo package.json.

GzipCompression

No se admite en las versiones de la plataforma Amazon Linux 2.

ProxyServer

En las versiones de la plataforma Node.js de Amazon Linux 2, esta opción se movió al espacio de nombres aws:elasticbeanstalk:environment:proxy. Puede elegir entre nginx (el valor predeterminado) y apache.

Las versiones de la plataforma Node.js de Amazon Linux 2 no admiten aplicaciones independientes que no se ejecuten detrás de un servidor proxy. En las versiones de la plataforma Node.js de la AMI de Amazon Linux, esto solía ser posible a través del valor none de la opción ProxyServer en el espacio de nombres aws:elasticbeanstalk:container:nodejs. Si su entorno ejecuta una aplicación independiente, actualice el código para escuchar al puerto al que el servidor proxy (nginx o Apache) reenvía tráfico.

var port = process.env.PORT || 8080; app.listen(port, function() { console.log('Server running at http://127.0.0.1:%s', port); });

La siguiente tabla muestra información sobre la migración de las versiones de la plataforma Amazon Linux 2 en la plataforma PHP.

Area Cambios e información

Procesamiento de archivos PHP

En las plataformas Amazon Linux 2, los archivos PHP se procesan mediante PHP-FPM (un administrador de procesos CGI). En las plataformas de la AMI de Amazon Linux utilizábamos mod_php (un módulo Apache).

Servidor proxy

Las versiones de la plataforma PHP de Amazon Linux 2 admiten los servidores proxy nginx y Apache HTTPD. El valor predeterminado es nginx.

Las versiones de la plataforma PHP de la AMI de Amazon Linux solo admiten Apache HTTPD. Si agregó archivos de configuración personalizados de Apache, puede establecer la opción ProxyServer en el espacio de nombres aws:elasticbeanstalk:environment:proxy en apache.

La siguiente tabla muestra información sobre la migración de las versiones de la plataforma Amazon Linux 2 en la plataforma Python.

Area Cambios e información

Servidor WSGI

En las plataformas Amazon Linux 2, Gunicorn es el servidor WSGI predeterminado. De forma predeterminada, Gunicorn escucha en el puerto 8000. El puerto puede ser distinto al que usó su aplicación en la plataforma de la AMI de Amazon Linux. Si está configurando la opción WSGIPath del espacio de nombres aws:elasticbeanstalk:container:python, reemplace el valor con la sintaxis de Gunicorn. Para obtener más información, consulte Espacios de nombres de configuración de Python.

Alternativamente, puede utilizar un Procfile para especificar y configurar el servidor WSGI. Para obtener más información, consulte Configuración del servidor WSGI con un archivo Procfile.

Ruta de la aplicación

En las plataformas Amazon Linux 2, la ruta al directorio de la aplicación en las instancias de Amazon EC2 de su entorno es /var/app/current. Estaba /opt/python/current/app en plataformas de la AMI de Amazon Linux.

Servidor proxy

Las versiones de la plataforma Python de Amazon Linux 2 admiten los servidores proxy nginx y Apache HTTPD. El valor predeterminado es nginx.

Las versiones de la plataforma Python de la AMI de Amazon Linux solo admiten Apache HTTPD. Si agregó archivos de configuración personalizados de Apache, puede establecer la opción ProxyServer en el espacio de nombres aws:elasticbeanstalk:environment:proxy en apache.

La siguiente tabla muestra información sobre la migración de las versiones de la plataforma Amazon Linux 2 en la plataforma Ruby.

Area Cambios e información

Versiones de Ruby instaladas

En las plataformas Amazon Linux 2, Elastic Beanstalk solo instala la versión más reciente de una sola versión de Ruby, correspondiente a la ramificación de la plataforma, en cada versión de la plataforma. Por ejemplo, cada versión de la plataforma en la ramificación de la plataforma Ruby 2.6 solo tiene Ruby 2.6.x instalado. En las versiones de la plataforma de la AMI de Amazon Linux, instalamos las versiones más recientes de varias versiones de Ruby, por ejemplo, 2.4.x, 2.5.x y 2.6.x.

Si su aplicación utiliza una versión de Ruby que no se corresponde con la ramificación de la plataforma que está utilizando, le recomendamos que cambie a una ramificación de la plataforma que tenga la versión correcta de Ruby para su aplicación.

Servidor de aplicaciones

En las plataformas Amazon Linux 2, Elastic Beanstalk solo instala el servidor de aplicaciones Puma en todas las versiones de la plataforma Ruby. Puede usar un Procfile para iniciar un servidor de aplicaciones diferente y un Gemfile para instalarlo.

En la plataforma de la AMI de Amazon Linux, admitíamos dos tipos de ramificaciones de la plataforma para cada versión de Ruby: una con el servidor de aplicaciones Puma y la otra con el servidor de aplicaciones Passenger. Si su aplicación utiliza Passenger, puede configurar su entorno de Ruby para instalar y usar Passenger.

Para obtener más información y ejemplos, consulte Uso de la plataforma Elastic Beanstalk Ruby.