Ampliación de las plataformas Linux de Elastic Beanstalk - AWS Elastic Beanstalk

Ampliación de las plataformas Linux de Elastic Beanstalk

Las plataformas Linux de AWS Elastic Beanstalk cuentan con muchas funcionalidades listas para usar diseñadas para desarrollar y ejecutar la aplicación. Si es necesario, puede ampliar las plataformas de diferentes maneras para configurar opciones, instalar software, agregar archivos y comandos de inicio, proporcionar instrucciones de compilación y ejecución, e incorporar scripts de inicialización que se ejecuten en varias etapas de aprovisionamiento de instancias de Amazon Elastic Compute Cloud (Amazon EC2) del entorno.

Algunas plataformas permiten personalizar el modo en que se crea o prepara la aplicación y permiten especificar los procesos que ejecutan la aplicación. Cada tema individual de la plataforma menciona específicamente Buildfile y/o Procfile si la plataforma es compatible. Busque su plataforma específica en Plataformas Elastic Beanstalk.

Para todas las plataformas de soporte, la sintaxis y la semántica son idénticas, y son como se describe en esta página. Los temas individuales de la plataforma mencionan el uso específico de estos archivos para crear y ejecutar aplicaciones en sus respectivos idiomas.

Buildfile

Si desea especificar un comando de compilación y configuración personalizado para la aplicación, coloque un archivo llamado Buildfile en el directorio raíz del origen de la aplicación. El nombre de archivo distingue entre mayúsculas y minúsculas. Utilice la siguiente sintaxis con el archivo Buildfile.

<process_name>: <command>

El comando del archivo Buildfile debe ajustarse a la siguiente expresión regular: ^[A-Za-z0-9_-]+:\s*[^\s].*$.

Elastic Beanstalk no monitoriza la aplicación que se ejecuta con un Buildfile. Utilice un archivo Buildfile con comandos que se ejecuten durante cortos periodos de tiempo y terminen después de completar las tareas. En el caso de los procesos de larga duración de la aplicación que no deben terminar, utilice en su lugar el archivo Procfile.

Todas las rutas de Buildfile son rutas relativas que hacen referencia a la raíz del paquete de código fuente. En el siguiente ejemplo de Buildfile, build.sh es un script de shell que se encuentra en la raíz del paquete de código fuente.

ejemplo Buildfile

make: ./build.sh

Si desea incluir pasos de compilación personalizados, le recomendamos que, en lugar de predeploy, utilice enlaces de plataforma Buildfile para todo excepto para los comandos más simples. Los enlaces de plataforma admiten secuencias de comandos más elaboradas y posibilitan una mejor administración de los errores. Los enlaces de plataforma se describen en la siguiente sección.

Procfile

Si desea especificar comandos personalizados para iniciar y ejecutar la aplicación, coloque un archivo llamado Procfile en el directorio raíz del código fuente de la aplicación. El nombre de archivo distingue entre mayúsculas y minúsculas. Utilice la siguiente sintaxis con el archivo Procfile. Puede especificar uno o varios comandos.

<process_name1>: <command1> <process_name2>: <command2> ...

Cada línea del archivo Procfile debe ajustarse a la siguiente expresión regular: ^[A-Za-z0-9_-]+:\s*[^\s].*$.

Utilice un archivo Procfile para procesos de aplicación de larga ejecución que no deberían salir. Elastic Beanstalk espera que los procesos del archivo Procfile se ejecuten de forma continua. Elastic Beanstalk monitoriza estos procesos y reinicia cualquier proceso que finalice. Para los procesos de corta ejecución, utilice Buildfile..

Todas las rutas de Procfile son rutas relativas que hacen referencia a la raíz del paquete de código fuente. En el siguiente ejemplo, Procfile define tres procesos. El primero, llamado web en el ejemplo, es la aplicación web principal.

ejemplo Procfile

web: bin/myserver cache: bin/mycache foo: bin/fooapp

Elastic Beanstalk configura el servidor proxy para reenviar solicitudes a su aplicación web principal en el puerto 5000 y puede configurar este número de puerto. Un uso habitual de Procfile es pasar este número de puerto a su aplicación como un argumento de la línea de comandos. Para obtener más información sobre la configuración del proxy, expanda la sección Configuración del proxy inverso que se encuentra en esta página.

Elastic Beanstalk captura flujos de error y salida estándar de procesos del archivo Procfile en archivos de registro. Elastic Beanstalk nombra los archivos de registro después del proceso y los almacena en /var/log. Por ejemplo, el proceso web del ejemplo anterior genera los logs llamados web-1.log y web-1.error.log para stdout y stderr, respectivamente.

Los enlaces de la plataforma están diseñados específicamente para ampliar la plataforma del entorno. Se trata de scripts personalizados y otros archivos ejecutables que se implementan como parte del código fuente de la aplicación y que Elastic Beanstalk ejecuta durante diversas etapas de aprovisionamiento de instancias.

nota

Los enlaces de la plataforma no son compatibles con las versiones de la plataforma de la AMI de Amazon Linux (anteriores a Amazon Linux 2).

Enlaces de la plataforma de implementación de aplicaciones

Una implementación de aplicación se produce cuando se proporciona un nuevo paquete de origen para la implementación o cuando se realiza un cambio de configuración que requiere la terminación y recreación de todas las instancias del entorno.

Para proporcionar enlaces de la plataforma que se ejecutan durante una implementación de aplicaciones, coloque los archivos en el directorio .platform/hooks del paquete de origen, en uno de los subdirectorios siguientes.

  • prebuild: los archivos de este subdirectorio se ejecutan después de que el motor de la plataforma Elastic Beanstalk se descarga y extrae el paquete de código fuente de la aplicación y antes de que configure la aplicación y el servidor web.

    Los archivos de prebuild se ejecutan después de los comandos que se encuentran en la sección commands de un archivo de configuración y antes de los comandos de Buildfile.

  • predeploy: los archivos de este subdirectorio se ejecutan después de que el motor de la plataforma Elastic Beanstalk se configura y prepara la aplicación y el servidor web, y antes de que los implemente en la ubicación del entorno de ejecución final.

    Los archivos de predeploy se ejecutan después de los comandos que se encuentran en la sección container_commands de un archivo de configuración y antes de que se ejecuten los comandos de Procfile.

  • postdeploy: los archivos de este subdirectorio se ejecutan después de que el motor de la plataforma Elastic Beanstalk implementa la aplicación y el servidor proxy.

    Este es el último paso del flujo de trabajo de implementación.

Enlaces de la plataforma de implementación de configuración

Una implementación de configuración se produce cuando se realizan cambios de configuración que solo actualizan las instancias del entorno sin volver a crearlas. Las siguientes actualizaciones de opciones provocan una actualización de configuración.

Para proporcionar enlaces que se ejecutan durante una implementación de configuración, colóquelos en el directorio .platform/confighooks del paquete de origen. Se aplican los mismos tres subdirectorios que para los enlaces de implementación de aplicaciones.

Más información sobre enlaces de plataforma

Los archivos de enlace pueden ser archivos binarios o archivos de script que comienzan con una línea #! que contiene la ruta del intérprete; por ejemplo #!/bin/bash. Todos los archivos deben tener permiso de ejecución. Utilice chmod +x para configurar el permiso de ejecución de los archivos de enlace.

Elastic Beanstalk ejecuta los archivos de cada uno de estos directorios en orden lexicográfico en función del nombre de archivo. Todos los archivos se ejecutan con el usuario root. El directorio de trabajo actual (cwd) de los enlaces de plataforma es el directorio raíz de la aplicación. En los archivos prebuild y predeploy, es el directorio de almacenamiento provisional de la aplicación, mientras que en los archivos postdeploy es el directorio actual de la aplicación. Si se producen errores en uno de los archivos (sale con un código de salida distinto de cero), la implementación se cancela y no se ejecuta correctamente.

Los archivos de enlace tienen acceso a todas las propiedades de entorno definidas en las opciones de la aplicación y a las variables de entorno del sistema HOME, PATH y PORT.

Para obtener valores de variables de entorno y otras opciones de configuración en los scripts de enlace de plataforma, puede utilizar la utilidad get-config que Elastic Beanstalk proporciona en las instancias de entorno. Para obtener más información, consulte Herramientas de script de plataforma.

Puede añadir archivos de configuración al directorio .ebextensions del código fuente de la aplicación para configurar diferentes aspectos del entorno de Elastic Beanstalk. Entre otras cosas, los archivos de configuración le permiten personalizar el software y otros archivos de las instancias del entorno, así como ejecutar comandos de inicialización en las instancias. Para obtener más información, consulte Personalización de software en servidores Linux.

También puede definir opciones de configuración utilizando archivos de configuración. Muchas de las opciones controlan el comportamiento de la plataforma y algunas de estas opciones son específicas de la plataforma.

En las plataformas Amazon Linux 2, recomendamos utilizar Buildfile, Procfiley ganchos de plataforma para configurar y ejecutar código personalizado en las instancias de su entorno durante el aprovisionamiento de instancias. Estos mecanismos se describen en las secciones anteriores de esta página. 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, puede resultar complicado escribir scripts de comandos en un archivo YAML desde un punto de vista sintáctico. Tendrá que seguir utilizando los archivos de configuración .ebextensions con cualquier script que necesite una referencia a un recurso de AWS CloudFormation.

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. Para seleccionar Apache en estas plataformas, establezca la opción ProxyServer en el espacio de nombres aws:elasticbeanstalk:environment:proxy en apache. Todas las plataformas habilitan la configuración del servidor proxy de manera uniforme, como se describe en esta sección.

nota

En las versiones de la plataforma AMI de Amazon Linux (antes de Amazon Linux 2), es posible que tenga que configurar servidores proxy de manera diferente. Puede encontrar estos detalles heredados en los temas respectivos de la plataforma en esta guía.

Elastic Beanstalk configura el servidor proxy de las instancias del entorno para que reenvíen el tráfico web a la aplicación web principal de la URL raíz del entorno; por ejemplo, http://my-env.elasticbeanstalk.com.

De forma predeterminada, Elastic Beanstalk configura el proxy para que reenvíe las solicitudes entrantes en el puerto 80 a la aplicación web principal en el puerto 5000. Puede configurar este número de puerto con la propiedad de entorno PORT utilizando el espacio de nombres aws:elasticbeanstalk:application:environment en un archivo de configuración, tal y como se muestra en el ejemplo siguiente.

option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: PORT value: <main_port_number>

Para obtener más información sobre cómo configurar las variables de la aplicación, consulte Opciones de configuración.

La aplicación debe escuchar el puerto que esté configurado para ella en el proxy. Si cambia el puerto predeterminado utilizando la propiedad de entorno PORT, el código podrá acceder a él a través del valor de la variable de entorno PORT. Por ejemplo, llame a os.Getenv("PORT") en Go o System.getenv("PORT") en Java. Si configura el proxy para que envíe tráfico a diferentes procesos de la aplicación, puede configurar varias propiedades de entorno y utilizar sus valores tanto en la configuración del proxy como en el código de la aplicación. Otra opción es pasar el valor del puerto al proceso como un argumento de comando en el archivo Procfile. Para obtener detalles al respecto, expanda la sección Buildfile y Procfile en esta página.

Configuración de nginx

Elastic Beanstalk utiliza nginx como proxy inverso predeterminado para asignar la aplicación al balanceador de carga de Elastic Load Balancing. Elastic Beanstalk proporciona una configuración de nginx predeterminada que puede ampliar o invalidar completamente con su propia configuración.

nota

Cuando agregue o edite un archivo de configuración .conf de nginx, asegúrese de codificarlo como UTF-8.

Para ampliar la configuración predeterminada de nginx de Elastic Beanstalk, añada los archivos de configuración .conf en una carpeta llamada .platform/nginx/conf.d/ del paquete de código fuente de su aplicación. La configuración de nginx de Elastic Beanstalk incluye archivos .conf en esta carpeta automáticamente.

~/workspace/my-app/ |-- .platform | `-- nginx | `-- conf.d | `-- myconf.conf `-- other source files

Para anular completamente la configuración predeterminada de nginx de Elastic Beanstalk, incluya una configuración en el paquete de código fuente de .platform/nginx/nginx.conf:

~/workspace/my-app/ |-- .platform | `-- nginx | `-- nginx.conf `-- other source files

Si invalida la configuración de nginx de Elastic Beanstalk, agregue la siguiente línea al archivo nginx.conf para extraer las configuraciones de Elastic Beanstalk de Informes y monitorización de estado mejorados, los mapeos automáticos de la aplicación y los archivos estáticos.

include conf.d/elasticbeanstalk/*.conf;

Configuración de Apache HTTPD

Las plataformas Tomcat, Node.js, PHP y Python le permiten elegir el servidor proxy Apache HTTPD como alternativa a nginx. Este no es el valor predeterminado. En el siguiente ejemplo se configura Elastic Beanstalk para que utilice Apache HTTPD.

ejemplo .ebextensions/httpd-proxy.config

option_settings: aws:elasticbeanstalk:environment:proxy: ProxyServer: apache

Puede ampliar la configuración de Apache predeterminada de Elastic Beanstalk con archivos de configuración adicionales. Si lo prefiere, puede anular por completo la configuración de Apache predeterminada de Elastic Beanstalk.

Para ampliar la configuración de Apache predeterminada de Elastic Beanstalk, añada los archivos de configuración .conf a una carpeta con el nombre .platform/httpd/conf.d en el paquete de código fuente de su aplicación. La configuración de Apache de Elastic Beanstalk incluye archivos .conf en esta carpeta automáticamente.

~/workspace/my-app/ |-- .ebextensions | -- httpd-proxy.config |-- .platform | -- httpd | -- conf.d | -- port5000.conf | -- ssl.conf -- index.jsp

Por ejemplo, la siguiente configuración de Apache 2.4 agrega un agente de escucha en el puerto 5000.

ejemplo .platform/httpd/conf.d/port5000.conf

listen 5000 <VirtualHost *:5000> <Proxy *> Require all granted </Proxy> ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/ ProxyPreserveHost on ErrorLog /var/log/httpd/elasticbeanstalk-error_log </VirtualHost>

Para anular por completo la configuración de Apache predeterminada de Elastic Beanstalk, incluya una configuración en el paquete de código fuente en .platform/httpd/conf/httpd.conf.

~/workspace/my-app/ |-- .ebextensions | -- httpd-proxy.config |-- .platform | `-- httpd | `-- conf | `-- httpd.conf `-- index.jsp

Si invalida la configuración de Apache de Elastic Beanstalk, agregue la siguiente línea al archivo httpd.conf para extraer las configuraciones de Elastic Beanstalk de Informes y monitorización de estado mejorados, los mapeos automáticos de la aplicación y los archivos estáticos.

IncludeOptional conf.d/elasticbeanstalk/*.conf

Si va a migrar su aplicación de Elastic Beanstalk a una plataforma de Amazon Linux 2, asegúrese de leer también la información en Migración de la aplicación de Linux de Elastic Beanstalk a Amazon Linux 2.

Ejemplo de aplicación con extensiones

En el siguiente ejemplo, se muestra un paquete de código fuente de aplicaciones con varias características de extensibilidad que las plataformas Amazon Linux 2 de Elastic Beanstalk admiten: un archivo Procfile, archivos de configuración .ebextensions, enlaces personalizados y archivos de configuración del proxy.

~/my-app/ |-- web.jar |-- Procfile |-- readme.md |-- .ebextensions/ | |-- options.config # Option settings | `-- cloudwatch.config # Other .ebextensions sections, for example files and container commands `-- .platform/ |-- nginx/ # Proxy configuration | |-- nginx.conf | `-- conf.d/ | `-- custom.conf |-- hooks/ # Application deployment hooks | |-- prebuild/ | | |-- 01_set_secrets.sh | | `-- 12_update_permissions.sh | |-- predeploy/ | | `-- 01_some_service_stop.sh | `-- postdeploy/ | |-- 01_set_tmp_file_permissions.sh | |-- 50_run_something_after_app_deployment.sh | `-- 99_some_service_start.sh `-- confighooks/ # Configuration deployment hooks |-- prebuild/ | `-- 01_set_secrets.sh |-- predeploy/ | `-- 01_some_service_stop.sh `-- postdeploy/ |-- 01_run_something_after_config_deployment.sh `-- 99_some_service_start.sh
nota

Algunas de estas extensiones no son compatibles con las versiones de la plataforma de la AMI de Amazon Linux (antes de Amazon Linux 2).

Flujo de trabajo de implementación de instancia

Dado que hay muchos mecanismos para ampliar la plataforma el entorno, resulta útil saber qué sucede cuando Elastic Beanstalk aprovisiona una instancia o ejecuta una implementación en una instancia. En el diagrama siguiente, se muestra todo este flujo de trabajo de implementación. En él se representan las diferentes fases de una implementación y los pasos que Elastic Beanstalk realiza en cada fase.

Notes
  • El diagrama no representa todos los pasos que Elastic Beanstalk lleva a cabo en las instancias del entorno durante la implementación. El objetivo de este diagrama es meramente ilustrativo y pretende proporcionarle el orden y el contexto de la ejecución de las personalizaciones.

  • Para simplificar, el diagrama menciona solo los subdirectorios de enlace .platform/hooks/* (para implementaciones de aplicaciones) y no los subdirectorios de enlace de .platform/confighooks/* (para implementaciones de configuración). Los enlaces de estos últimos subdirectorios se ejecutan exactamente en los mismos pasos que los enlaces en los subdirectorios correspondientes que se muestran en el diagrama.


        Orden de ejecución de extensiones en la instancia de un entorno en el que se utiliza una versión de la plataforma de Amazon Linux 2

En la lista siguiente, se detallan las fases y los pasos de la implementación.

  1. Pasos iniciales

    Elastic Beanstalk descarga y extrae su aplicación. Después de cada uno de estos pasos, Elastic Beanstalk ejecuta uno de los pasos de extensibilidad.

    1. Ejecuta los comandos que se encuentran en la sección commands: de los archivos de configuración.

    2. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/hooks/prebuild del paquete de origen (.platform/confighooks/prebuild para una implementación de configuración).

  2. Configuración

    Elastic Beanstalk configura la aplicación y el servidor proxy.

    1. Ejecuta los comandos que se encuentran en el directorio Buildfile del paquete de código fuente.

    2. Copia los archivos de configuración de proxy personalizados, si tiene alguno en el directorio .platform/nginx del paquete de código fuente, en la ubicación del entorno de ejecución.

    3. Ejecuta los comandos que se encuentran en la sección container_commands: de los archivos de configuración.

    4. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/hooks/predeploy del paquete de origen (.platform/confighooks/predeploy para una implementación de configuración).

  3. Implementación

    Elastic Beanstalk implementa y ejecuta la aplicación y el servidor proxy.

    1. Ejecuta el comando que se encuentra en el archivo Procfile del paquete de código fuente.

    2. Ejecuta o vuelve a ejecutar el servidor proxy con los archivos de configuración proxy personalizados, si los hay.

    3. Ejecuta cualquier archivo ejecutable que se encuentre en el directorio .platform/hooks/postdeploy del paquete de origen (.platform/confighooks/postdeploy para una implementación de configuración).