Question

Le site Web de mon organisation est une application Django en cours d'exécution sur les serveurs Web d'extrémité avant + quelques serveurs de traitement de fond dans AWS.

Nous utilisons actuellement une siège pour les deux:

  • Configuration du système (à partir d'une image Bare OS)
  • Déploiements de code déclenché manuellement manuellement.

Le même jeu de jeu ansile est capable de prévoir un VM Vagrant local Dev VM ou une instance de production EC2 à partir de zéro.

Nous souhaitons maintenant mettre en œuvre une autocalisation dans la CE2, ce qui nécessite des changements vers un "Traiter Serveurs comme bétail, pas animaux domestiques " philosophie.

La première condition préalable consistait à passer d'un inventaire ansitionnellement géré de manière statique à une API dynamique, basée sur l'API EC2, fait.

La prochaine grande question est la suivante: Comment déployer dans ce nouveau monde où les instances de jets montaient au milieu de la nuit. Les options que je peux penser sont:

  1. cuire un nouvel ami entièrement déployé pour chaque déployer , créez une nouvelle configuration de lancement et mettez à jour le groupe avec cela. Cela semble très, très encombrant, mais aussi très fiable en raison de l'approche d'ardoise propre et garantira que tout système change le code requiert sera ici. En outre, aucune étape supplémentaire n'est nécessaire sur le démarrage de l'instance, ainsi de suite et d'exécution plus rapidement.
  2. Utilisez une base AMI qui ne change pas très souvent, obtenez automatiquement le dernier code d'application de GIT sur bootup, Start WebServer. Une fois que c'est juste, faites simplement des déploiements manuels au besoin, comme avant. Mais que si le nouveau code dépend d'une modification de la configuration système (nouveau paquet, autorisations, etc.)? On dirait que vous devez commencer à prendre soin des dépendances entre les versions de code et les versions System / AMI, tandis que l'approche "Tout simplement une analyse complète" était plus intégrée et plus fiable. Est-ce plus qu'un cas de tête potentiel dans la pratique?
  3. Utilisez Docker? J'ai une forte hunch, mais je ne suis pas sûr que cela correspond à notre photo. Nous sommes une application de front-end Django relativement autonome avec uniquement la Rabbitmq + Memcache en tant que services que nous n'allons jamais courir sur le même hôte de toute autre manière. Donc, quels avantages sont là dans la construction d'une image Docker à l'aide d'une éternelle contenant des packages système + le dernier code, plutôt que d'avoir une manière ansite le faire directement sur une instance EC2?
  4. Comment faites-vous le faire? Toute perspicacité / meilleures pratiques? Merci!

Était-ce utile?

La solution

Cette question est très opinion basée. Mais juste pour vous donner ma prise, je voudrais simplement utiliser les AMIS avec une manière ansible puis utiliser Cloudformation pour déployer vos piles avec autoscalage, surveillance et votre AMIS pré-cuite. L'avantage de ceci est que si vous avez la majeure partie de la pile d'applications pré-cueillie dans l'autoscalage AMI UP se produira plus rapidement.

Docker est une autre approche, mais à mon avis, il ajoute une couche supplémentaire dans votre application que vous n'avez peut-être pas besoin si vous utilisez déjà EC2. Docker peut être vraiment utile si vous dites que vous souhaitez container sur un seul serveur. Peut-être que vous avez une capacité supplémentaire dans un serveur et Docker vous permettra d'exécuter cette application supplémentaire sur le même serveur sans interférer avec ceux existants.

Après avoir dit que certaines personnes trouvent que Docker utile ne pas sur le moyen d'optimiser les ressources d'un seul serveur, mais plutôt de manière à ce qu'il vous permet de pré-cuire vos applications dans des conteneurs. Donc, lorsque vous déployez une nouvelle version ou un nouveau code, tout ce que vous avez à faire est de copier / répliquer ces conteneurs Docker sur vos serveurs, puis arrêtez les anciennes versions de conteneur et démarrez les nouvelles versions de conteneurs.

Mes deux cents.

Autres conseils

Une solution hybride peut vous donner le résultat souhaité.Stockez la tête Docker Image dans S3, prébrobez l'AMI avec un simple fetch et exécutant un script de départ (ou transmettez-le dans un stock ami avec les données utilisateur).Contrôle de la version en déplaçant l'image de la tête sur votre dernière version stable, vous pouvez également implémenter des piles de test de nouvelles versions en faisant le script de récupération suffisamment intelligent pour identifier la version Docker à récupérer basée sur des balises d'instance, qui sont configurables, lancez-la.

You can also use AWS CodeDeploy with AutoScaling and your build server. We use CodeDeploy plugin for Jenkins.

This setup allows you to:

  1. perform your build in Jenkins
  2. upload to S3 bucket
  3. deploy to all the EC2s one by one which are part of the assigned AWS Auto-Scaling group.

All that with a push of a button!

Here is the AWS tutorial: Deploy an Application to an Auto Scaling Group Using AWS CodeDeploy

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top