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.