Existe-t-il un moyen d'accélérer AWS CodeDeploy

15

J'utilise AWS CodeDeploy pour déployer mes sites, et j'ai remarqué que sa vitesse n'était pas très constante; Parfois, c'est assez rapide, mais d'autres fois, chaque étape d'un déploiement peut prendre quelques minutes. C'est assez ennuyeux lorsqu'un déploiement doit être effectué rapidement, en cas de bugs ou de pannes.

Cependant, je ne trouve aucune documentation sur la vitesse de CodeDeploy, et je n'arrive pas non plus à trouver de logique lorsqu'il est lent ou rapide. Y a-t-il un moyen d'accélérer et est-il possible de savoir ce qui prend si longtemps?

Jasper Kennis
la source

Réponses:

10

CodeDeploy fait très peu par défaut - il récupère le code de S3 ou Github, puis exécute vos scripts selon les appspec.ymlinstructions du fichier.

Si vos déploiements capturent des gigaoctets de données de S3, vous constaterez que cela prend un certain temps pour le transfert de données (en particulier sur les instances EC2 plus petites avec une bande passante limitée), mais à part cela, les retards de déploiement sont beaucoup plus susceptibles d'être dus à tout ce que vous fais dans vos scripts de déploiement.

Les étapes d'un déploiement CodeDeploy sont les suivantes:

  • ApplicationStop - vous contrôlez ce crochet
  • DownloadBundle - CodeDeploy récupère le code de S3 / Github
  • BeforeInstall - vous contrôlez ce crochet
  • Installer - CodeDeploy copie le code d'un emplacement temporaire vers la destination finale
  • AfterInstall - vous contrôlez ce crochet
  • ApplicationStart - vous contrôlez ce crochet
  • ValidateService - vous contrôlez ce crochet

Les caractères gras sont à CodeDeploy, les autres à vous. Si vous constatez des retards variables dans les caractères en gras, contactez le support AWS, mais sinon, vous devrez probablement enquêter sur vos crochets.

ceejayoz
la source
Oui, mes propres scripts sont simples et rapides. C'est l'étape de téléchargement de l'ensemble qui prend souvent quelques minutes à exécuter, et mon projet n'est pas si grand; tout aussi souvent, cela ne prend que quelques secondes. Je n'ai pas le plan de support des développeurs, et je ne suis pas prêt à payer pour ça juste pour ça, donc je vais le laisser pour l'instant.
Jasper Kennis
Vérifié à nouveau, le problème doit être la bande passante; nous utilisons un petit type d'instance pour notre serveur de transfert et plus grand une fois pour la production, et c'est toujours un transfert qui est lent.
Jasper Kennis
@ JasperKennis Oui, les types d'instances plus petits peuvent être assez limités en bande passante, en particulier si vous êtes sur un hôte avec des voisins bruyants. Ça aurait du sens.
ceejayoz
21

BlockTraffic et AllowTraffic

Le simple réglage des paramètres de contrôle de santé de votre groupe cible peut réduire de quelques minutes.

Avant

entrez la description de l'image ici entrez la description de l'image ici

Après

entrez la description de l'image ici entrez la description de l'image ici

Explication

Cela fonctionne parce BlockTrafficque les AllowTrafficdeux attendent les tests de santé réussis. L'intervalle de contrôle de santé par défaut est de 1 contrôle toutes les 30 secondes et un contrôle de santé réussi nécessite 5 réponses consécutives de 200. Il faut donc plus de 2 min 30 secondes par défaut. Et c'est pour chaque instance EC2. La réduction de l'intervalle de vérification d'intégrité et la limitation du nombre de vérifications nécessaires nécessaires amélioreront le temps de déploiement.

Peter Tao
la source
Après avoir fait ce changement, je reçois Script at specified location: ... failed to complete in 5 seconds. (il est défini dans appspec.yml-> hooks: -> BeforeInstall :) (veuillez me dire pourquoi)
Yevgeniy Afanasyev
Un délai d'attente est-il défini dans la configuration BeforeInstall? docs.aws.amazon.com/codedeploy/latest/userguide/…
Peter Tao
Merci, maintenant je vois que ce n'est pas lié, mais plutôt une coïncidence.
Yevgeniy Afanasyev
2

Un autre paramètre à vérifier est le «délai de désinscription» du groupe cible. Mes paramètres de bilan de santé étaient déjà bas et c'était le goulot d'étranglement dans mon cas.

Aaron
la source