Ich verwende AWS Cloudformation, um zahlreiche Elemente der Netzwerkinfrastruktur (VPCs, Sicherheitsgruppen, Subnetze, Autoscaling-Gruppen usw.) für meine Webanwendung einzurichten. Ich möchte, dass der gesamte Prozess automatisiert wird. Ich möchte auf einen Knopf klicken und in der Lage sein, das Ganze zu feuern.
Ich habe erfolgreich eine Cloudformationsvorlage erstellt, die all diese Netzwerkinfrastruktur aufbaut. Die EC2-Instanzen werden derzeit jedoch ohne erforderliche Software gestartet. Jetzt versuche ich herauszufinden, wie man diese Software am besten bekommt.
Dafür erstelle ich AMIs mithilfe von Packer.io . Aber einige Leute haben mich stattdessen dazu gedrängt, Cloud-Init zu verwenden. Welche Heuristik sollte ich verwenden, um zu entscheiden, was in den AMIs gebrannt wird und was ich über Cloud-Init konfigurieren soll?
Ich möchte zum Beispiel eine EC2-Instanz vorkonfigurieren, damit ich ( saqib
) mich ohne ein Passwort von meinem eigenen Laptop aus anmelden kann. Daher muss der EC2 einen Benutzer haben. Dieser Benutzer muss ein Home-Verzeichnis haben. Und in diesem Home-Verzeichnis muss eine Datei .ssh/known_hosts
enthalten sein, die verschlüsselte Codes enthält. Soll ich diese Verzeichnisse in den AMI brennen? Oder sollte ich cloud-init verwenden, um sie einzurichten? Und wie soll ich mich in diesem und anderen ähnlichen Fällen entscheiden?
Ich möchte die Maschinenbereitstellung von der Bereitstellung der Umgebung trennen.
Im Allgemeinen verwende ich Folgendes als Leitfaden:
Erstellungsphase
Release-Phase
user-data
to konfigurieren Sie die Anwendungsumgebung (Datenbankverbindungen, Log Forwarder usw.) und starten Sie dann start die Anwendungen / Dienste Dieser Ansatz bietet die größte Flexibilität und trennt die verschiedenen Belange einer Pipeline für die kontinuierliche Lieferung klar voneinander ab.
Einer der wichtigen Faktoren, die bestimmen, wie Sie Server, AMIs und die Infrastrukturplanung zusammenstellen sollten, ist die Beantwortung der Frage: Wie schnell muss ich in der Produktion eine neue Instanz starten?
Die Antwort auf diese Frage bestimmt, wie viel Sie in das AMI einheizen und wie viel Sie nach dem Booten aufbauen.
HINWEIS: Meine Erfahrung ist mit Chef Server, daher werde ich Chef-Terminologie verwenden, aber die Konzepte sind für jeden anderen Konfigurationsverwaltungs-Stack identisch.
Die allgemeine Faustregel lautet, Ihre "Infrastruktur als Code" zu behandeln. Dies bedeutet, dass Sie den Prozess des Startens von Instanzen, des Erstellens von Benutzern auf diesem Computer und des Prozesses zum Verwalten von known_hosts-Dateien und SSH-Schlüsseln genau so betrachten müssen wie Ihren Anwendungscode. Die Möglichkeit, die Änderungen an Infrastructure im Quellcode zu verfolgen, erleichtert die Verwaltung, die Neueinrichtung und sogar CI erheblich.
Diese Einführung in den Küchenchef deckt die Terminologie in Kochbüchern, Rezepturen, Ressourcen und mehr ab. Es zeigt Ihnen, wie Sie einen einfachen LAMP-Stack erstellen und wie Sie ihn einfach mit einem Befehl neu starten können.
Wenn ich das Beispiel in Ihrer Frage anführe, würde ich auf einer hohen Ebene Folgendes tun:
Tools wie Chef werden verwendet, da Sie die Infrastruktur in kleine Code-Blöcke unterteilen können, die bestimmte Funktionen ausführen. Es gibt zahlreiche bereits gebaute und verfügbare Kochbücher, die die Grundbausteine zum Erstellen von Diensten, Installieren von Softwarepaketen, etc. ausführen.
Alles in allem gibt es Zeiten, in denen Sie im Interesse Ihrer spezifischen Domäne und Anforderungen von den besten Praktiken abweichen müssen. Es kann Situationen geben, in denen Sie alle Vorteile eines Infrastrukturmanagements nutzen müssen, um Elemente in das AMI zu brennen.
Lassen Sie uns so tun, als ob Ihre Anwendung Bildverarbeitung durchführt und ImageMagick verwenden muss. Angenommen, Sie müssen ImageMagick aus der Quelle erstellen. Wenn Sie dies über Chefrezepte tun, könnte dies noch weitere 7 Minuten dazu führen, dass ImageMagick nur zur normalen Startzeit der Instanz kompiliert wird. Wenn das Warten auf 10 bis 12 Minuten zu lange dauert, damit eine neue Instanz online gehen kann, sollten Sie in Erwägung ziehen, ein eigenes AMI zu erstellen, auf dem ImageMagick bereits kompiliert und installiert wurde.
Dies ist eine akzeptable Lösung, aber Sie sollten bedenken, dass die Verwaltung Ihrer eigenen Flotte von vorgebackenen AMIs zusätzlichen Infrastrukturaufwand verursacht. Sie müssen Ihre benutzerdefinierten AMIs auf dem neuesten Stand halten, wenn neue AMIs veröffentlicht werden. Sie können dann auf verschiedene Instanztypen und auf verschiedene AWS-Regionen erweitern.
Tags und Links amazon-web-services cloud-init ami amazon-cloudformation packer