26

Mi comprensión de Elastic Beanstalk es que cuando implementa una nueva versión de su aplicación, la implementa en las instancias Amazon EC2 de una en una (si tiene más de una). Sin embargo, incluso con un mínimo de dos instancias, mi aplicación incurre en una breve cantidad de tiempo de inactividad cuando cargo un nuevo .war cuando lo despliega, como si estuviera actualizando ambos simultáneamente. ¿Existe alguna manera de asegurarme de que no haya tiempo de inactividad y de que una instancia esté completamente actualizada y acepte las solicitudes antes de que comience el siguiente? Así es como se ven los eventos. Tenga en cuenta que esto es con carga cero en la aplicación, por lo que solo empeorará con el tráfico de producción.Cómo evitar el tiempo de inactividad durante la implementación AWS Elastic Beanstalk de una nueva versión de la aplicación?

INFO 
Environment update completed successfully. 

INFO 
New application version was deployed to running EC2 instances. 

ERROR 
The application did not respond at the health check URL. 

INFO 
Waiting for 8 seconds while EC2 instances download the updated application version. 

INFO 
Deploying version SomethingMore to 2 instance(s). 

Respuesta

19

Para lograr este objetivo en Elastic Beanstalk, que necesita para ampliar su procedimiento de despliegue para facilitar múltiples entornos (ver AWS Elastic Beanstalk Components):

Un entorno es una versión que se implementa en AWS recursos. Cada entorno ejecuta solo una versión, sin embargo, puede ejecutar la misma versión o versiones diferentes en muchos entornos al mismo tiempo. [...] Para más información sobre el entorno y los recursos que están creados , consulte Architectural Overview. [énfasis mío]

Esta característica es útil para probar/depurar versiones separadas ya, pero específicamente esto permite el intercambio en caliente de los entornos, así, ver Deploying Versions With Zero Downtime para un recorrido respectivo:

Desde AWS Elastic Beanstalk realiza una actualización in situ cuando actualiza las versiones de su aplicación, experimentará algún tiempo de inactividad. Sin embargo, es posible evitar este tiempo de inactividad mediante el intercambio de los CNAME para sus entornos. En esta sección, se explica cómo realizar un intercambio de CNAME utilizando AWS Management Console, la línea de comandos o API. [el énfasis es mío]

+0

Gracias, el entorno El intercambio de CNAME es exactamente lo que estaba buscando. – Peter

+6

Probé esto en mi aplicación de producción y observé que incluso después de intercambiar CNAME y esperar a que expiraran los TTL de DNS, una parte considerable del tráfico seguía yendo al viejo entorno de beans. Sospecho que esto se debe a que los clientes se aferran al caché de DNS más de lo que deberían. Si no se puede confiar en que los clientes obedezcan los TTL, entonces esta técnica de intercambio de CNAME no parece ser una manera confiable de realizar implementaciones de ZDD con Beanstalk. –

+0

@AaronIba Esa es una muy buena observación. ¿Pensaste en alguna forma alternativa?Estoy pensando en simplemente sobrescribir la versión de la aplicación existente y cerrar las instancias existentes manualmente (ASG debería aumentar las nuevas y extraer la versión actualizada de la aplicación). Pero ese es un proceso manual/lento/engorroso y se siente como un truco. –

6

sé que esto es una cuestión de edad, pero para la gente buscando en Google (como yo), Elastic Beanstalk lanzado rodando versión tecnológica implementaciones de hoy (02/11/2014).

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html?sc_ichannel=em&sc_icountry=global&sc_icampaigntype=launch&sc_icampaign=em_125873140&sc_idetail=em_14124901705&ref_=pe_411040_125873140_8

Esto le permite actualizar parte de su flota con su nueva aplicación a la vez, lo que garantiza que siempre hay ordenadores disponibles para tomar tráfico.

+0

¿Funciona esto solo? si está ejecutando varias instancias detrás de un equilibrador de carga? De cómo se describe, parece que una sola instancia seguirá disminuyendo. –

+1

Sí, necesita más de una instancia en su entorno de Elastic Beanstalk para evitar el tiempo de inactividad. Esto es cierto en todas partes; si está atendiendo el tráfico de un host y actualiza el host (incluso si está en el lugar), se arriesga a un tiempo de inactividad. – zongweil

+0

La declaración anterior simplemente no es verdad. He implementado el tiempo de inactividad cero en un solo host con nginx. (No en beanstalk elástico.) –

Cuestiones relacionadas