Come amministrate le vostre scatole EC2 Linux?


8

Ho alcune immagini Linux EC2 che eseguono lavori notturni di elaborazione per uno dei miei progetti. Di tanto in tanto, devo entrare, apportare alcune modifiche al codice, configurare alcune cose e raggruppare l'immagine.

Il mio set di strumenti per queste operazioni è dolorosamente scarso (SSH nella casella, modifica i file in VIM, file remoti WGET di cui ho bisogno) e sospetto che ci sia un modo molto migliore per farlo. Sono curioso di sapere cosa stanno facendo le altre persone nella mia posizione.

  • Stai usando una qualche forma di sistema Windowing ed equivalente desktop remoto per accedere al box, o è tutta riga di comando? La gestione delle finestre di Windows EC2 è banale, dal momento che è possibile semplicemente accedere al desktop remoto e trasferire file sulla rete. Esiste un equivalente a questo nel mondo Linux?

  • Stai apportando le modifiche alla configurazione / le modifiche dello script direttamente sulla macchina? O hai qualcosa impostato nella tua casella locale per modificare questi file da remoto? O li stai semplicemente modificando in remoto e trasferendoli ad ogni salvataggio?

  • Come si spostano i file avanti e indietro tra EC2 e l'ambiente locale? FTP? Una sorta di Mapped Drive via VPN?

Avrei davvero bisogno di mettere in atto alcune buone pratiche per amministrare queste scatole. Qualsiasi suggerimento per rimuovere parte del dolore sarebbe il benvenuto!

EDIT: Evidentemente, non ero chiaro sopra, poiché le prime due risposte ruotavano attorno alla gestione e alla configurazione delle istanze EC2. Voglio solo sapere come eseguire il desktop remoto in un server Linux in esecuzione in modo che spostare i file e modificarli sia meno doloroso.


Potresti aver ottenuto risposte sulla gestione e configurazione delle istanze EC2 perché il tuo titolo è "Come amministrare le tue scatole EC2 Linux?"
Bill Weiss,

Risposte:


13

Non faccio più molta amministrazione manuale del sistema. Vedo la mia infrastruttura come entità programmabile e la tratto come tale, configurando i sistemi con strumenti che automatizzano la gestione della configurazione, la manutenzione dei nodi EC2, ecc. Strumenti nella mia cassetta degli attrezzi:

  • Ruby (il mio linguaggio di scripting / tool preferito)
  • Git (controllo versione)
  • Opscode's Chef (scritto in Ruby) (1)
  • Capistrano (manutenzione di massa ad hoc)
  • Strumenti API EC2 di Amazon per esempio e manutenzione delle immagini.
  • Gemma AWS di Rightscale (attacchi Ruby per EC2)

(1) - Divulgazione, lavoro per Opscode. Altri strumenti riempiono questo spazio come il burattino di Reductive Lab.

Faccio un AMI quando ho un nodo creato nel modo che mi serve per una funzione specifica. Ad esempio, se sto costruendo un server di app Rails, otterrò tutti i pacchetti di prerequisiti installati per risparmiare tempo durante la compilazione.

Quando tutto il resto fallisce, accedo ai sistemi con SSH. Ho fatto l'amministrazione manuale del sistema per molti anni, questo è un vecchio cappello.

Stai usando una qualche forma di sistema Windowing ed equivalente desktop remoto per accedere al box, o è tutta riga di comando?

Non installo alcuna GUI sui server a meno che un pacchetto non abbia una dipendenza e uno venga installato automaticamente.

Esiste un equivalente a questo nel mondo Linux? (trasferimento di file)

Normalmente eseguo due tipi di trasferimento file / manutenzione file.

  • Installazione del pacchetto
  • File di configurazione

Per i pacchetti nativi della piattaforma, utilizzo lo strumento di gestione dei pacchetti standard come APT o YUM. Per le installazioni di sorgenti (something.tar.gz) generalmente scarico tramite wget.

I file di configurazione sono in genere modelli ERB gestiti da Chef.

Uso SSH e SCP / SFTP per trasferire manualmente i file.

Stai apportando le modifiche alla configurazione / le modifiche dello script direttamente sulla macchina? O hai qualcosa impostato nella tua casella locale per modificare questi file da remoto? O li stai semplicemente modificando in remoto e trasferendoli ad ogni salvataggio?

Conservo tutto ciò che riguarda la gestione dei sistemi in un repository di controllo software. Ecco il mio tipico flusso di lavoro durante l'aggiornamento della configurazione su uno o più sistemi. Comincio dalla mia workstation locale.

  • Estrai dal repository Git principale per le modifiche degli altri.
  • Modifica i file localmente (come, aggiorna un file di configurazione).
  • Conferma la modifica, spingi verso il master.
  • Sul server Chef (effettuato l'accesso tramite SSH), scarica l'ultima modifica che ho appena eseguito.
  • Distribuire la configurazione nella posizione appropriata sul server Chef (per questo uso Rake).
  • I clienti dello chef vengono eseguiti a intervalli, quindi raccolgono le modifiche ogni 30 minuti. Se ho bisogno di qualcosa immediatamente, eseguo lo chef-client manualmente.
  • Verifica la modifica!

Come si spostano i file avanti e indietro tra EC2 e l'ambiente locale? FTP? Una sorta di Mapped Drive via VPN?

Esistono alcune posizioni in cui è possibile archiviare i file che utilizzo sui nodi EC2.

  • Server Chef. Principalmente i template di configurazione, anche alcuni piccoli pacchetti.
  • GitHub. Archiviamo il nostro codice (progetti open source) su GitHub. I nodi EC2 possono arrivare facilmente a questo (come per un checkout dell'ultima versione di qualcosa).
  • Benne Amazon S3. Alcune cose vengono archiviate in un secchio.

Lavoro molto in EC2, testando principalmente ambienti e cambiamenti. Come risultato dei miei strumenti e del mio flusso di lavoro, dedico più tempo a lavorare su cose a cui tengo davvero e meno a gestire singoli file e pensare a configurazioni specifiche.


"Uso lo strumento di gestione dei pacchetti standard come APT o YUM" - apt-get / yum sceglie sempre le ultime novità. Come gestisci se devi installare un'altra versione del pacchetto (reso necessario dalle particolari esigenze della tua applicazione)? O non l'hai mai affrontato?
Talonx,

6

Tutto il nostro software è distribuito tramite RPM. Ogni tipo di istanza EC2 è descritto da un file kickstart (che elenca gli RPM da installare ...). La configurazione kickstart significa che una macchina funzionante di ogni tipo di istanza può essere costruita da zero in circa 10 minuti.

Abbiamo quindi un programma che invoca anaconda (il programma di installazione di Red Hat) per prendere un file kickstart, installare il sistema in una directory, quindi raggruppare la directory e inviarla a S3 come Amazon Machine Image. Questo è tutto un passo, quindi scrivo solo:

kickstart2ami webserver.ks

Poiché una macchina può essere completamente ricostruita, caricata ed eseguita in circa 40 minuti, è più semplice creare nuove immagini della macchina che eseguire sysadmin sulle istanze EC2 effettive (usa e getta). Pertanto, nessun amministratore di sistema viene effettivamente eseguito su istanze EC2.


Quindi in realtà ricostruisci l'intera scatola da zero ogni volta che la avvii? Ahia. Anche il piccolo lavoro che la mia scatola fa ha una dozzina di dipendenze casuali e un sacco di codice personalizzato in 3 lingue. Ci sono voluti un mese di modifiche per impostarlo correttamente, quindi non riuscivo a immaginare la complessa sceneggiatura che avrebbe riprodotto tutto in una volta sola. Come hai costruito e testato quel tuo script?
Jason Kester,

tutto il codice è impacchettato in pacchetti RPM ( en.wikipedia.org/wiki/RPM_Package_Manager ), quindi ogni complessità dell'installazione di vari pezzi di codice viene sottratta all'interno dei pacchetti. La maggior parte dello sforzo è quindi nel confezionare il codice. In generale, considero corposo tutto ciò che è installato non tramite la gestione dei pacchetti. Il kickstart installa semplicemente un elenco di questi pacchetti, quindi il suo lavoro è piuttosto semplice. Dal momento che non esiste alcuna configurazione / modifica magica, nessuna macchina è speciale o preziosa. "kickstart2ami" chiama semplicemente anaconda, quindi gli strumenti di caricamento / registrazione ec2 in ordine, con un po 'di colla.
tfh1985,

1
Puoi condividere il tuo script kickstart2ami?
Noah Campbell,

@JasonKester Qualunque cosa importante che "ci sono voluti un mese di messa a punto per farlo funzionare bene" sicuramente vale la pena documentare i passaggi da riprodurre. Quale modo migliore per documentarlo che copiarlo?
Skyhawk,

3

Mi piace NX per l'accesso remoto alla GUI. Molto ben documentato anche.


3

Uso nautilus per un bel po 'di gestione dei file e ssh per i comandi. Si collega direttamente al tuo sistema come se fossi su di esso fisicamente nel data center. Se lo stai facendo da una finestra di Windows, questo tipo di connettività non funzionerà poiché i vfs in Windows sono limitati.


2

Penso che non ti serva un Desktop remoto per queste attività.

Come altri hanno già detto, è possibile utilizzare SFTP per trasferire i file tra le caselle. Usa il client WinSCP per connetterti tramite sftp, che puoi anche usare per modificare i file sul tuo computer Windows (facendo doppio clic su di essi) come se fosse sul tuo computer locale. Puoi anche usarlo per copiare / spostare i file in remoto.

Puoi anche prendere in considerazione l'uso di Midnight Commander (mc) sulla console ssh per velocizzare le operazioni sui file. Per installare utilizzare il comando yum install mco apt-get install mc. Successivamente è possibile avviarlo digitando mcsul terminale. Ha anche un visualizzatore e un editor integrati che sono più semplici di Vim.

Se vuoi davvero avere la GUI - che di solito non abbiamo sui server - devi installare l'ambiente X e collegarti ad esso con VNC. In questi casi ci colleghiamo al server VNC attraverso un tunnel ssh che aggiunge maggiore sicurezza ad esso.


1

In risposta alla tua domanda sull'impostazione di un desktop remoto con X, se stai usando Debian, leggi questo . Non è esattamente il miglior documento su come configurarlo. Ti fa installare troppi pacchetti, ma ha l'idea giusta. Hai davvero solo bisogno di un driver video fittizio per X e quindi avere VNC per avviare un desktop X.


0

Se stai usando Ubuntu: stiamo pensando di usare landscape per questo, è un prodotto commerciale del team ubuntu (canonico) e sarà integrato con i comandi ec2.


Grazie, ma questo sembra essere uno strumento per la gestione delle istanze EC2, piuttosto che il desktopping remoto in una singola casella, che è quello che sto cercando gli strumenti da fare.
Jason Kester,

0

Potresti provare qualcosa come capistrano ma se non è abbastanza per quello che cerchi, sembra che tu sia un candidato per una sorta di gestione della configurazione.
Puppet, reductivelabs.com/products/puppet/, è un vero spicco in questo campo, ma potrebbe essere un po 'eccessivo per te a meno che tu non abbia piani di diventare più grande e quindi valga la pena il duro lavoro in avanti.
Se stai usando una delle distro debian / ubuntu, allora darei un'occhiata a Slack Roles È
un wrapper di fantasia per rsync e script di shell. Questo ha pochissimo apprendimento iniziale e funziona bene, tuttavia man mano che cresci può diventare un po 'confuso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.