Wie verwalten Sie Ihre EC2 Linux-Boxen?


8

Ich habe einige EC2-Linux-Images, die nächtliche Verarbeitungsjobs für eines meiner Projekte ausführen. Von Zeit zu Zeit muss ich einsteigen, einige Codeänderungen vornehmen, einige Dinge konfigurieren und das Image neu bündeln.

Mein Toolset für diese Vorgänge ist äußerst spärlich (SSH in die Box, Dateien in VIM bearbeiten, WGET-Remote-Dateien, die ich benötige), und ich vermute, dass es einen viel besseren Weg gibt, dies zu tun. Ich bin gespannt, was andere Leute in meiner Position tun.

  • Verwenden Sie eine Art Fenstersystem und Remotedesktop, um auf die Box zuzugreifen, oder ist alles eine Befehlszeile? Das Verwalten von EC2-Windows-Boxen ist trivial, da Sie einfach Remotedesktop in Dateien über das Netzwerk übertragen können. Gibt es ein Äquivalent dazu in der Linux-Welt?

  • Führen Sie Ihre Konfigurationsänderungen / Skript-Optimierungen direkt auf dem Computer durch? Oder haben Sie auf Ihrer lokalen Box etwas eingerichtet, um diese Dateien remote zu bearbeiten? Oder bearbeiten Sie sie einfach aus der Ferne und übertragen sie dann bei jedem Speichern?

  • Wie verschieben Sie Dateien zwischen EC2 und Ihrer lokalen Umgebung hin und her? FTP? Eine Art zugeordnetes Laufwerk über VPN?

Ich müsste wirklich einige Best Practices für die Verwaltung dieser Boxen einrichten. Vorschläge, um einige der Schmerzen zu beseitigen, wären sehr willkommen!

EDIT: Offensichtlich war ich oben nicht klar, da sich die ersten beiden Antworten um die Verwaltung und Konfiguration von EC2-Instanzen drehten. Ich möchte nur wissen, wie man einen Remotedesktop in einen laufenden Linux-Server einbindet, damit das Verschieben und Bearbeiten von Dateien weniger schmerzhaft ist.


Möglicherweise haben Sie Antworten zum Verwalten und Konfigurieren von EC2-Instanzen erhalten, da Ihr Titel "Wie verwalten Sie Ihre EC2-Linux-Boxen?" Lautet.
Bill Weiss

Antworten:


13

Ich mache nicht mehr viel manuelle Systemadministration. Ich betrachte meine Infrastruktur als programmierbare Einheit und behandle sie als solche, indem ich Systeme mit Tools konfiguriere, die das Konfigurationsmanagement, die Wartung von EC2-Knoten usw. automatisieren. Tools in meiner Toolbox:

  • Ruby (meine Lieblingsskript- / Werkzeugsprache)
  • Git (Versionskontrolle)
  • Opscodes Chef (geschrieben in Ruby) (1)
  • Capistrano (Ad-hoc-Massenwartung)
  • Zum Beispiel die EC2-API-Tools von Amazon und die Image-Wartung.
  • Das AWS-Juwel von Rightscale (Ruby-Bindungen für EC2)

(1) - Offenlegung, ich arbeite für Opscode. Andere Werkzeuge füllen den Raum wie die Puppe von Reductive Lab.

Ich bündle ein AMI, wenn ich einen Knoten so aufgebaut habe, wie ich es für eine bestimmte Funktion benötige. Wenn ich beispielsweise einen Rails-App-Server erstelle, werden alle erforderlichen Pakete installiert, um beim Erstellen Zeit zu sparen.

Wenn alles andere fehlschlägt, melde ich mich mit SSH bei Systemen an. Ich habe viele Jahre lang manuelle Systemadministration betrieben, das ist ein alter Hut.

Verwenden Sie eine Art Fenstersystem und Remotedesktop, um auf die Box zuzugreifen, oder ist alles eine Befehlszeile?

Ich installiere keine GUI auf Servern, es sei denn, ein Paket ist abhängig und wird automatisch installiert.

Gibt es ein Äquivalent dazu in der Linux-Welt? (Dateien übertragen)

Normalerweise mache ich zwei Arten der Dateiübertragung / Dateipflege.

  • Paketinstallation
  • Konfigurationsdateien

Für plattformeigene Pakete verwende ich das Standard-Paketverwaltungstool wie APT oder YUM. Für Quellinstallationen (Something.tar.gz) lade ich normalerweise über wget herunter.

Konfigurationsdateien sind normalerweise ERB-Vorlagen, die von Chef verwaltet werden.

Ich verwende SSH und SCP / SFTP, um Dateien manuell zu übertragen.

Führen Sie Ihre Konfigurationsänderungen / Skript-Optimierungen direkt auf dem Computer durch? Oder haben Sie auf Ihrer lokalen Box etwas eingerichtet, um diese Dateien remote zu bearbeiten? Oder bearbeiten Sie sie einfach aus der Ferne und übertragen sie dann bei jedem Speichern?

Ich behalte alles, was mit der Verwaltung von Systemen zu tun hat, in einem Softwaresteuerungs-Repository. Hier ist mein typischer Workflow beim Aktualisieren der Konfiguration auf einem oder mehreren Systemen. Ich starte von meiner lokalen Workstation aus.

  • Ziehen Sie aus dem Master-Git-Repository, um die Änderungen anderer zu erhalten.
  • Bearbeiten Sie die Datei (en) lokal (z. B. aktualisieren Sie eine Konfigurationsdatei).
  • Übernehmen Sie die Änderung, drücken Sie zum Master.
  • Ziehen Sie auf dem Chef-Server (über SSH angemeldet) die letzte Änderung ab, die ich gerade festgeschrieben habe.
  • Stellen Sie die Konfiguration an der entsprechenden Stelle auf dem Chef-Server bereit (ich verwende hierfür Rake).
  • Chef-Kunden werden in regelmäßigen Abständen ausgeführt, sodass sie alle 30 Minuten Änderungen vornehmen. Wenn ich sofort etwas brauche, führe ich Chef-Client manuell aus.
  • Überprüfen Sie die Änderung!

Wie verschieben Sie Dateien zwischen EC2 und Ihrer lokalen Umgebung hin und her? FTP? Eine Art zugeordnetes Laufwerk über VPN?

Es gibt einige Speicherorte, an denen Dateien, die ich auf EC2-Knoten verwende, möglicherweise gespeichert werden.

  • Chef Server. Konfigurationsvorlagen hauptsächlich, einige kleine Pakete auch.
  • GitHub. Wir speichern unseren Code (Open Source-Projekte) auf GitHub. EC2-Knoten können dies leicht erreichen (z. B. zum Auschecken der neuesten Version von etwas).
  • Amazon S3 Eimer. Einige Dinge werden in einem Eimer aufbewahrt.

Ich arbeite viel in EC2 und teste hauptsächlich Umgebungen und Änderungen. Aufgrund meiner Tools und meines Workflows verbringe ich mehr Zeit mit der Arbeit an Dingen, die mir wirklich wichtig sind, und weniger mit dem Umgang mit einzelnen Dateien und dem Nachdenken über bestimmte Konfigurationen.


"Ich verwende das Standard-Paketverwaltungstool wie APT oder YUM" - apt-get / yum wählt immer die neuesten aus. Wie gehen Sie vor, wenn Sie eine andere Version des Pakets installieren müssen (erforderlich aufgrund der besonderen Anforderungen Ihrer Anwendung)? Oder haben Sie sich dem noch nie gestellt?
Talonx

6

Alle unsere Software wird über RPM bereitgestellt. Jeder EC2-Instanztyp wird durch eine Kickstart-Datei beschrieben (in der die zu installierenden RPMs aufgelistet sind ...). Durch das Kickstart-Setup kann eine funktionierende Maschine jedes Instanztyps in etwa 10 Minuten von Grund auf neu erstellt werden.

Wir haben dann ein Programm, das anaconda (das Red Hat-Installationsprogramm) aufruft, um eine Kickstart-Datei zu erstellen, das System in einem Verzeichnis zu installieren, das Verzeichnis zu bündeln und es als Amazon Machine Image an S3 zu übertragen. Das ist alles ein Schritt, also tippe ich einfach:

kickstart2ami webserver.ks

Da eine Maschine in etwa 40 Minuten vollständig neu erstellt, hochgeladen und ausgeführt werden kann, ist es einfacher, neue Maschinenabbilder zu erstellen, als Sysadmin für die tatsächlichen (wegwerfbaren) EC2-Instanzen auszuführen. Daher wird auf EC2-Instanzen tatsächlich kein Systemadministrator ausgeführt.


Sie erstellen also bei jedem Start die gesamte Box von Grund auf neu? Autsch. Sogar die kleine Arbeit, die meine Box erledigt, hat ein Dutzend zufälliger Abhängigkeiten und eine Menge benutzerdefinierten Codes in drei Sprachen. Es dauerte einen Monat, bis alles richtig eingerichtet war, also konnte ich mir das komplexe Skript nicht vorstellen, das all das auf einmal reproduzieren würde. Wie haben Sie Ihr Skript erstellt und getestet?
Jason Kester

Der gesamte Code wird in RPM- Paketen ( en.wikipedia.org/wiki/RPM_Package_Manager ) gepackt, sodass die Komplexität der Installation verschiedener Codeteile in den Paketen abstrahiert wird. Der größte Aufwand besteht dann darin, Code zu verpacken. Ich halte im Allgemeinen alles, was nicht über die Paketverwaltung installiert wurde, für fehlerhaft. Der Kickstart installiert nur eine Liste dieser Pakete, sodass seine Aufgabe ziemlich einfach ist. Da es keine magische Konfiguration / Optimierung gibt, ist keine Maschine speziell oder wertvoll. "kickstart2ami" ruft nur anaconda auf, dann die ec2 Upload / Register-Tools in der richtigen Reihenfolge mit etwas Kleber.
tfh1985

1
Können Sie Ihr kickstart2ami-Skript teilen?
Noah Campbell

@JasonKester Alles Wichtige, was "einen Monat gedauert hat, um es richtig einzurichten", ist es sicher wert, die Schritte zur Reproduktion zu dokumentieren. Wie kann man es besser dokumentieren als per Skript?
Skyhawk

3

Ich mag NX für den Remote-GUI-Zugriff. Sehr gut dokumentiert.


3

Ich benutze Nautilus für einiges an Dateiverwaltung und SSH für Befehle. Es wird direkt in Ihr System eingesteckt, als wären Sie physisch im Rechenzentrum. Wenn Sie dies über eine Windows-Box tun, funktioniert diese Art der Konnektivität nicht, da vfs in Windows eingeschränkt ist.


2

Ich denke, Sie brauchen für diese Aufgaben keinen Remotedesktop.

Wie bereits erwähnt, können Sie die Dateien mit SFTP zwischen den Boxen übertragen. Verwenden Sie den WinSCP-Client , um eine Verbindung über SFTP herzustellen, mit der Sie auch die Dateien auf Ihrem Windows-Computer bearbeiten können (indem Sie darauf doppelklicken), als wären sie auf Ihrem lokalen Computer. Sie können damit auch Dateien aus der Ferne kopieren / verschieben.

Sie können auch Midnight Commander (mc) auf der SSH-Konsole verwenden, um den Dateivorgang zu beschleunigen. Verwenden Sie zum Installieren den Befehl yum install mcoder apt-get install mc. Anschließend können Sie es starten, indem Sie mcauf dem Terminal tippen. Es hat auch einen eingebauten Viewer und Editor, der einfacher als vim ist.

Wenn Sie wirklich eine GUI haben möchten, die wir normalerweise nicht auf Servern haben, müssen Sie die X-Umgebung installieren und mit VNC eine Verbindung herstellen. In solchen Fällen stellen wir über einen SSH-Tunnel eine Verbindung zum VNC-Server her, der ihm mehr Sicherheit bietet.


1

In Antwort auf Ihre Frage über einen Remote - Desktop mit X einrichten, wenn Sie Debian verwenden, lesen diese . Es ist nicht gerade das beste Dokument zum Einrichten. Sie haben viel zu viele Pakete installiert, aber es hat die richtige Idee. Sie benötigen wirklich nur einen Dummy-Grafiktreiber für X, und dann muss VNC einen X-Desktop starten.


0

Wenn Sie Ubuntu verwenden: Wir erwägen, hierfür die Landschaft zu verwenden. Dies ist ein kommerzielles Produkt des ubuntu (kanonischen) Teams und wird mit ec2-Befehlen integriert.


Vielen Dank, aber das scheint ein Tool zum Verwalten von EC2-Instanzen zu sein, anstatt Remote-Desktopping in einer einzelnen Box durchzuführen. Ich suche nach Tools, die ich tun kann.
Jason Kester

0

Sie könnten so etwas wie Capistrano ausprobieren, aber wenn das nicht genug für das ist, was Sie danach wollen, dann klingt es so, als wären Sie ein Kandidat für eine Art Konfigurationsmanagement.
Puppet, reductivelabs.com/products/puppet/, ist ein echtes Highlight in diesem Bereich, kann aber für Sie ein wenig übertrieben sein, es sei denn, Sie haben Pläne, größer zu werden, und dann ist es die harte Arbeit im Vorfeld wert.
Wenn Sie eine der Debian / Ubuntu-Distributionen verwenden, würde ich Slack Roles ausprobieren.
Es ist ein ausgefallener Wrapper für Rsync- und Shell-Skripte. Dies hat sehr wenig Vorab-Lernen und funktioniert gut, aber wenn Sie wachsen, kann es etwas ungeschickt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.