8

Sto utilizzando AWS Cloudformation per configurare numerosi elementi dell'infrastruttura di rete (VPC, SecurityGroups, Sottoreti, Gruppi di scalabilità automatica ecc.) Per la mia applicazione web. Voglio che l'intero processo sia automatizzato. Voglio fare clic su un pulsante e essere in grado di accendere il tutto.Cosa inserire in un AMI AWS e cosa eseguire il provisioning utilizzando cloud-init?

Ho creato con successo un modello di Cloudformation che imposta tutta questa infrastruttura di rete. Tuttavia, le istanze EC2 sono attualmente lanciate senza alcun software necessario su di esse. Ora sto cercando di capire il modo migliore per ottenere quel software su di loro.

Per fare ciò, sto creando AMI utilizzando Packer.io. Ma alcune persone mi hanno invece chiesto di usare Cloud-Init. Quale euristica dovrei usare per decidere cosa inserire nelle AMI e/o cosa configurare tramite Cloud-Init?

Ad esempio, voglio preconfigurare un'istanza EC2 per consentirmi (saqib) di accedere senza password dal mio portatile. Quindi l'EC2 deve avere un utente. Quell'utente deve avere una directory home. E in quella home directory deve vivere un file .ssh/known_hosts contenente codici crittografati. Devo infornare queste directory nell'AMI? O dovrei usare cloud-init per configurarli? E come dovrei decidere in questo e in altri casi simili?

+1

avete bisogno di burattinaio o chef per eseguire il lavoro di automazione con 'dati utente' definiti in CloudFormation. – BMW

+0

Grazie. Puoi per favore spiegare cosa dovrei mettere nell'AMI ?? Come posso decidere se qualcosa deve essere nell'AMI o essere configurato tramite 'dati utente'? –

+0

AWS ha una pagina completa che discute le opzioni https://aws.amazon.com/answers/configuration-management/aws-ami-design/ – Jason

risposta

13

Mi piace separare il provisioning della macchina dal provisioning dell'ambiente.

In generale, io uso il seguente come guida:

Fase di Costruzione

  • costruire una macchina Base Immagine con qualcosa di simile Packer, compreso tutto il software necessario per eseguire l'applicazione. Crea un AMI fuori da questo.
  • Installa l'applicazione o le applicazioni sull'immagine della macchina base creando un'immagine dell'applicazione. Tagga e modifica questo artefatto. Non incorporare elementi specifici dell'ambiente qui come le connessioni al database, ecc., In quanto ciò impedisce di riutilizzare facilmente questa AMI in diversi runtime dell'ambiente.
  • Assicurarsi che tutti i servizi vengono arrestati

uscita Fase

  • Spin di un ambiente costituito da immagini e infra richiesti, utilizzando qualcosa di simile CFN.
  • Usa Cloud-Init user-data-configurare l'ambiente applicativo (connessioni al database, log spedizionieri, ecc) e poi iniziare a le applicazioni/servizi

Questo approccio offre la massima flessibilità e in modo pulito separa la varie preoccupazioni di una condotta di consegna continua.

4

Uno dei fattori importanti che determina come assemblare server, AMI e pianificazione dell'infrastruttura è rispondere alla domanda: In produzione, quanto velocemente avrò bisogno di una nuova istanza lanciata?

La risposta a questa domanda determinerà quanto si cuoce nell'AMI rispetto a quanto si costruisce dopo l'avvio.

NOTA: La mia esperienza è con Chef Server, quindi userò la terminologia Chef ma i concetti sono gli stessi per qualsiasi altro stack di gestione della configurazione.

La regola generale è di trattare la vostra "infrastruttura come codice". Ciò significa pensare al processo di avvio delle istanze, alla creazione di utenti su quella macchina e al processo di gestione di un file known_hosts e delle chiavi SSH allo stesso modo del codice dell'applicazione. Essere in grado di tenere traccia delle modifiche apportate all'infrastruttura nel codice sorgente semplifica la gestione, le ridistribuzioni e persino l'infrastruttura.

This Chef Introduction copre la terminologia in Cuoco di libri di cucina, ricette, risorse e altro. Ti mostra come costruire un semplice stack LAMP e come puoi riavviarlo altrettanto facilmente con un solo comando.

Quindi, dato l'esempio nella sua interrogazione, ad alto livello che vorrei fare le seguenti operazioni:

  • lancio una base di Ubuntu Linux AMI (attualmente 14,04) con uno script Cloudformation.
  • Nella sezione Dati utente della configurazione dell'istanza, avviare il processo di installazione del client Chef.
  • Esegui una ricetta per creare un utente.
  • esegue una ricetta per creare il file known_hosts per l'utente vengono utilizzati

Strumenti come Chef, perché si è in grado di abbattere l'infrastruttura in piccoli blocchi di codice che svolgono funzioni specifiche. Esistono già numerosi libri di cucina built and available che eseguono gli elementi costitutivi fondamentali per la creazione di servizi, l'installazione di pacchetti software, ecc.

Tutto ciò detto, ci sono alcune volte in cui devi discostarti dalle migliori pratiche nell'interesse del tuo dominio e dei tuoi requisiti specifici. Potrebbero esserci situazioni in cui, dati tutti i vantaggi di una gestione dell'infrastruttura, sarà comunque necessario inserire elementi nell'AMI.

Supponiamo che l'applicazione esegua l'elaborazione delle immagini e che sia necessario utilizzare ImageMagick. Supponiamo che sarà necessario creare ImageMagick dal sorgente. Se lo facessi tramite Chef Recipes, questo potrebbe aggiungere altri 7 minuti di compilazione di ImageMagick al normale tempo di avvio dell'istanza. Se attendere 10-12 minuti è troppo lungo perché una nuova istanza venga online, si consiglia di prendere in considerazione la cottura della propria AMI con ImageMagick già compilata e installata.

Questa è una soluzione accettabile, ma è necessario tenere presente che la gestione della propria flotta di AMI preconfezionate aggiunge ulteriore sovraccarico dell'infrastruttura. Sarà necessario mantenere aggiornate le AMI personalizzate man mano che vengono rilasciate nuove AMI, espandersi in diversi tipi di istanza e in diverse regioni AWS.