Il sito Web della mia organizzazione è un'app Django in esecuzione su server Web front-end + alcuni server di elaborazione in background in AWS.Implementazione continua e scalabilità automatica AWS utilizzando Ansible (+ Docker?)
momento stiamo utilizzando Ansible per entrambi:
- configurazione del sistema (da un'immagine nuda OS)
- frequenti implementazioni di codice manualmente innescato.
Lo stesso playbook di Ansible è in grado di eseguire da zero una VM di Vagrant locale o un'istanza di produzione EC2.
Ora vogliamo implementare la scalabilità automatica in EC2 e ciò richiede alcune modifiche verso una filosofia "treat servers as cattle, not pets".
Il primo prerequisito era passare da un inventario Ansible gestito staticamente a uno dinamico, basato su API EC2, fatto.
La prossima grande domanda è come distribuire in questo nuovo mondo in cui le istanze di "throwaway" si presentano & nel bel mezzo della notte. Le opzioni mi viene in mente sono:
- Cuocere un nuovo completamente dispiegata AMI per ogni distribuire, creare una nuova configurazione AS avvio e aggiornamento del gruppo come questo. Sembra molto, molto ingombrante, ma anche molto affidabile grazie all'approccio di lavagna pulita, e farà in modo che qualsiasi sistema modifichi il codice richiesto sarà qui. Inoltre, non sono necessari ulteriori passaggi per l'avvio dell'istanza, quindi è possibile eseguire più rapidamente &.
- Utilizzare una base AMI che non cambia molto spesso, ottenere automaticamente l'ultimo codice dell'app da git all'avvio, avviare server web. Una volta completato, esegui le distribuzioni manuali secondo necessità, come prima. Ma cosa succede se il nuovo codice dipende da una modifica nella configurazione del sistema (nuovo pacchetto, permessi, ecc.)? Sembra che devi iniziare a occuparti delle dipendenze tra versioni di codice e versioni di sistema/AMI, mentre l'approccio "esegui una corsa completa" era più integrato e più affidabile. È più di un semplice mal di testa nella pratica?
- Usa Docker? Ho una forte impressione che può essere utile, ma non sono ancora sicuro di come si adatti alla nostra immagine. Siamo un'app di front-end Django relativamente autonoma con solo RabbitMQ + memcache come servizi, che non avremo mai eseguito sullo stesso host in ogni caso. Quindi, quali benefici ci sono nella creazione di un'immagine Docker usando Ansible che contiene pacchetti di sistema + il codice più recente, piuttosto che avere Ansible lo faccia direttamente su un'istanza EC2?
Come si fa? Qualche visione/best practice? Grazie!