Quels sont les avantages et les inconvénients d'AWS Elastic Beanstalk par rapport aux autres stratégies de déploiement?

17

Je suis assez nouveau dans l'ensemble de la pile OSS Netflix et des déploiements en général. En tant qu'arrière-plan de mon niveau actuel de connaissances sur le plan opérationnel, mon rôle principal est en tant qu'ingénieur d'application front-end. Cependant, j'apprécie le côté des opérations, donc j'essaie de configurer une nouvelle stratégie de déploiement et l'outillage d'un nouveau projet.

Nos buts

  • Déploiements super faciles (nous voulons appuyer sur un bouton pour mettre à jour la production)
  • Déploiements automatisés pour tester les environnements (à l'aide de Jenkins)
  • Facilité de maintenance (nous avons une application à écrire, je ne veux pas passer notre temps à tripoter les problèmes de production)
  • Capacité à gérer une architecture orientée services (de nombreuses petites applications, différentes langues et magasins de données)
  • Assez de flexibilité pour nous assurer que nous n'aurons pas à changer de stratégie de sitôt (nous essayons déjà de nous éloigner de RightScale)

Nous sommes d'accord avec un peu plus de temps de configuration initiale si cela nous évitera des maux de tête à l'avenir.

Donc, dans ce sens, j'ai écouté des podcasts, regardé des conférences d'Ops et lu des tonnes de billets de blog et en fonction de nos objectifs et de ce que j'ai pris pour former des meilleures pratiques, nous avons commencé à élaborer un plan en utilisant Asgard, rouler notre paquet dans un bocal et le rouler dans une AMI.

Nous avions tout prévu et apprécions les avantages du processus par rapport à l'utilisation d'un serveur Chef et de la convergence d'instances à la volée (nous avons pensé que cela était sujet aux erreurs étant donné notre calendrier limité et notre manque de compréhension autour d'un flux de travail du serveur Chef). Cependant, un collègue a fait un peu de recherche par lui-même et s'est senti comme Elastic Beanstalk répondait à nos besoins.

Je l'ai étudié et créé un environnement de test avec un fichier WAR et une base de données RDS attachée. Les choses semblent fonctionner et je pense que nous pouvons automatiser les déploiements dans un environnement de test à l'aide de Jenkins via l'API AWS. Semble assez simple ... peut-être trop simple.

Je me demande, quel est le problème? Si Elastic Beanstalk est si simple et efficace, pourquoi n'en parle-t-on pas davantage? J'ai du mal à trouver suffisamment d'opinions et de faits objectifs sur les deux différentes stratégies de déploiement, alors j'ai pensé poser des questions.

Utilisez-vous Elastic Beanstalk? Si oui, pourquoi et quels facteurs ont conduit à cette décision? Qu'est-ce que tu aimes et n'aimes pas?

Si vous n'utilisez pas Elastic Beanstalk mais que vous y avez pensé, qu'utilisez-vous et pourquoi n'avez-vous pas utilisé Elastic Beanstalk?

Quels sont les avantages et les inconvénients d'une stratégie de déploiement basée sur Elastic Beanstalk pour une architecture SOA? Autrement dit, Elastic Beanstalk fonctionnera-t-il bien avec de nombreuses petites applications qui dépendent les unes des autres pour fonctionner?

James van Dyke
la source

Réponses:

11

J'ai évalué Elastic Beanstalk en plus d'autres offres AWS tout en essayant d'améliorer nos instances AWS roulées à la main. Les raisons pour lesquelles j'ai choisi de ne pas l'utiliser étaient dues à des complications qui pourraient entraîner la migration de mon application existante et non à l'offre elle-même. Le hic, c'est que vous n'avez pas autant de contrôle sur le déploiement / la configuration des applications des serveurs. Si vous démarrez une nouvelle application, il peut être utile de ne pas traiter ces choses en ce moment, si vous avez une application existante, il est plus difficile de s'intégrer dans le modèle Beanstalk.

Beanstalk offre une offre similaire à Heroku et à d'autres fournisseurs de PaaS, mais pas beaucoup d'avantages à ceux qui veulent simplement se concentrer sur la création de leur application. Vous pouvez au moins déterminer les ressources virtualisées à un degré plus élevé que les autres fournisseurs PaaS.

Problèmes que je rencontrais avec mes applications:

  • Déploiements basés sur Git - Je les aime, mais notre dépôt est de 1+ Go. Assez grand pour pousser régulièrement. Ce dépôt contient également environ 40 applications (qui devraient vraiment être divisées), mais cela prendrait un certain temps. Le téléchargement de n'importe quel type de package pourrait fonctionner, mais la plupart de nos applications nécessiteraient une grande quantité de travail pour en faire un package.

  • Intégration avec d'autres services - D'après ce que j'ai vu, Beanstalk suppose que tout ce à quoi vous vous connectez est un service unique. Cela fonctionne bien si vos services sont derrière et ELB, mais nos nœuds étaient séparés que nous avons rencontrés via HAProxy en cours d'exécution sur chaque serveur d'applications. Si vous exécutez vos banques de données et autres services en tant que point de terminaison unique, cela devrait aller.

Dans mon évaluation, j'ai également inclus OpsWorks et CloudFormation. OpsWorks a des problèmes d'intégration similaires avec le fonctionnement de l'automatisation existante pour ces applications. CloudFormation n'a pas fait beaucoup plus que ce que certains scripts Python et Chef prenaient déjà en charge pour nous.

J'ai fini par choisir d'utiliser AWS Autoscaling Groups à la place avec une certaine automatisation fournie par Asgard . Il s'agissait de la plus petite modification apportée au code de configuration / d'application existant et nous a fourni les avantages que nous recherchions, une gestion simple de plusieurs serveurs disponibles via l'API AWS.

Les restrictions mises en place par Elastic Beanstalk sur votre application sont très utiles. Vous devrez vous assurer que votre application est pour la plupart sans état, fournit un point de terminaison pour un service et s'appuie sur d'autres services pour l'état. Si vous essayez de créer des services autonomes réutilisables, plusieurs applications dans Beanstalk sont un bon début.

Si / quand vous arrivez au point de vouloir plus de configuration, OpsWorks est une excellente prochaine étape. Les rôles prédéfinis devraient faciliter la transition et il fournit un cadre d'automatisation autour de Chef pour aider à coordonner l'approvisionnement de plusieurs serveurs.

Philip Cristiano
la source
2
Excellente réponse, Philip. Il semble que la plus grande limitation pour Elastic Beanstalk soit quelle que soit la configuration de base de l'AMI. Donc, oui, pour un service basique et apatride, cela semble génial. Cependant, une fois que vous devez exécuter plusieurs services (par exemple, nginx, surveillance spécialisée) dans une seule instance, vous devez déployer votre propre AMI, puis perdre les mises à jour automatiques de l'AMI de base pour les services AWS. À ce stade, vous êtes bien dans un processus de déploiement personnalisé. Mon sentiment est que c'est à peu près le moment où vous voudriez envisager de vous éloigner d'EB.
James van Dyke
0

Je vois le point de la perte de contrôle, mais je ne vois pas nécessairement l'apatridie obligatoire. Tout ce que fait eb est de déployer l'automatisation, ce qui est d'ailleurs génial. Je vois l'intérêt d'un grand référentiel. Je pense qu'en général, la séparation des fonctions d'applications logiques dans des applications de beans distinctes, puis des environnements de "mise en scène" et "de production" en dessous, est vraiment agréable. Nous avons des environnements de modules comme uploader, cela ne fait pas grand-chose et en théorie cela ajoute beaucoup de coûts, mais alors vous utilisez des instances plus petites juste plus. Nous exécutons un nginx centralisé et avons dû écrire de nombreux descripteurs de messages sns personnalisés pour notifier ngnix des changements dans la politique de mise à l'échelle automatique. Un autre gros problème eb est l'incapacité à désactiver les équilibrages de charge, puisque nous utilisons ngnix, pourquoi? elb ne prend pas en charge websocket.

Glozman de Zeev
la source