¿Hay alguna manera de acelerar AWS CodeDeploy

15

Estoy usando AWS CodeDeploy para implementar mis sitios, y noté que no es muy consistente en velocidad; a veces es bastante rápido, pero otras veces cada paso de una implementación puede llevar minutos. Esto es bastante molesto cuando una implementación debe realizarse rápidamente, en caso de errores o interrupciones.

Sin embargo, no puedo encontrar ninguna documentación sobre la velocidad de CodeDeploy, y tampoco puedo encontrar ninguna lógica cuando es lenta o rápida. ¿Hay alguna forma de acelerarlo y hay alguna forma de saber qué está tomando tanto tiempo?

Jasper Kennis
fuente

Respuestas:

10

CodeDeploy hace muy poco por defecto: toma el código de S3 o Github, luego ejecuta sus scripts según las appspec.ymlinstrucciones del archivo.

Si sus implementaciones están tomando gigabytes de datos de S3, descubrirá que la transferencia de datos demora un poco (particularmente en instancias EC2 más pequeñas con ancho de banda limitado), pero aparte de eso, es mucho más probable que los retrasos en la implementación se deban a lo que sea lo estás haciendo en tus scripts de implementación.

Los pasos en una implementación de CodeDeploy son:

  • ApplicationStop: usted controla este gancho
  • DownloadBundle - CodeDeploy toma el código de S3 / Github
  • BeforeInstall: controlas este gancho
  • Instalar: CodeDeploy copia el código de una ubicación temporal al destino final
  • AfterInstall: controlas este gancho
  • ApplicationStart: usted controla este gancho
  • ValidateService: usted controla este gancho

Los en negrita dependen de CodeDeploy, los demás dependen de usted. Si observa retrasos variables en los en negrita, póngase en contacto con el soporte de AWS, pero de lo contrario es probable que necesite investigar sus ganchos.

ceejayoz
fuente
Sí, mis propios guiones son simples y rápidos. Es el paso del paquete de descarga que a menudo tarda minutos en ejecutarse, y mi proyecto no es tan grande; con la misma frecuencia solo lleva unos segundos. Aunque no tengo el plan de soporte para desarrolladores, y no estoy dispuesto a pagarlo solo por esto, así que lo dejaré por ahora.
Jasper Kennis
Comprobado de nuevo, el problema tiene que ser el ancho de banda; estamos usando un tipo de instancia pequeño para nuestro servidor de ensayo y más grande una vez para la producción, y siempre es un proceso lento.
Jasper Kennis
@JasperKennis Sí, los tipos de instancia más pequeños pueden tener bastante ancho de banda limitado, especialmente si está en un host con vecinos ruidosos. Eso tendría sentido.
ceejayoz
21

BlockTraffic y AllowTraffic

Simplemente ajustando la configuración del control de salud de su grupo objetivo puede ahorrar un par de minutos.

antes de

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Después

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Explicación

Esto funciona porque BlockTrafficy AllowTrafficambos esperan verificaciones de salud exitosas. El intervalo de comprobación de estado predeterminado es 1 comprobación cada 30 segundos, y una comprobación de estado exitosa necesita 5 200 respuestas consecutivas. Por lo tanto, lleva más de 2 minutos y 30 segundos por defecto. Y eso es para cada instancia de EC2. Disminuir el intervalo de comprobación de estado y limitar el número de comprobaciones exitosas necesarias mejorará el tiempo de implementación.

Peter Tao
fuente
Después de hacer este cambio me estoy poniendo Script at specified location: ... failed to complete in 5 seconds. (está configurado en appspec.yml-> ganchos: -> BeforeInstall :) (por favor dime por qué)
Yevgeniy Afanasyev
¿Hay un tiempo de espera establecido en la configuración BeforeInstall? docs.aws.amazon.com/codedeploy/latest/userguide/…
Peter Tao
Gracias, ahora veo que no está relacionado, sino más bien una coincidencia.
Yevgeniy Afanasyev
2

Otra configuración para verificar es el "Retraso de cancelación de registro" del grupo objetivo. Mi configuración de verificación de salud ya era baja y este fue el cuello de botella en mi caso.

Aaron
fuente