Die Realität beim Ausführen einer Produktionsknoten-App auf AWS Elastic Beanstalk

Lehren aus 2 Jahren Betrieb einer Produktionsknoten-App auf der ELB-Plattform von AWS

Front-Angelegenheit

Seien wir ehrlich, der AWS-Preisrechner ist verwirrend. Ein Teil davon ist auf die von AWS angebotene Zahlungsmethode à la carte zurückzuführen . Dies macht es schwierig, einem Kunden ein gutes Angebot zu machen. Hoffentlich kann dieser Artikel Aufschluss darüber geben, wie viel es kostet, eine App auszuführen, und wie Sie die Kosten senken können.

Die tatsächlichen Kosten für den Betrieb einer App

Ich verwalte seit ungefähr zwei Jahren eine Node-Web-App auf ELB. Das erste Jahr war großartig, sie gaben dir alles kostenlos (meistens)! Danach müssen Sie anfangen, für Dinge wie EC2-Instanzen zu bezahlen.

Dieser Artikel konzentriert sich auf meine spezifischen App-Anforderungen, bei denen es sich um eine knotenbasierte Express-App handelt, die auf Elastic Beanstalk gehostet wird.

Ausführliche Informationen zum Build finden Sie in meinem vorherigen Artikel hier.

Nervenzusammenbruch

Folgendes verwende ich derzeit auf AWS:

Single EBS Environment (Region West West):

  • 1 klassischer Load Balancer
  • 1 t2.micro EC2-Instanz
  • S3 Bucket mit Bildern (7 GB zum Zeitpunkt des Schreibens)
  • 1 Hosted Zone Route 53

18 US-Dollar (Load Balancer) + 5 US-Dollar (EC2 mit einem RI) + 0,50 US-Dollar (Route 53) + 0,17 US-Dollar (S3) + 0,21 US-Dollar (Datenübertragung) = ca. 25 US-Dollar pro Monat.

Außerdem hoste ich eine MongoDB an einer anderen Stelle. Wenn Sie also vorhaben, eine Datenbank in AWS zu hosten, entstehen zusätzliche Kosten. Lassen Sie uns die verschiedenen Kosten aufschlüsseln.

Lastenausgleicher

Dies ist der teuerste Teil des Stapels. Es kostet:

  • 0,025 USD pro Classic Load Balancer-Stunde (oder Teilstunde)
  • 0,008 USD pro GB Daten, die von einem Classic Load Balancer verarbeitet werden

Das bedeutet, wenn Sie Ihre App 24 Stunden am Tag ausführen, kostet sie jeden Monat ungefähr 18 US-Dollar + Datengebühren.

EC2-Instanz

On-Demand-EC2-Instanzen sind teurer als sie sein sollten. Um hier etwas Geld zu sparen, lesen Sie den folgenden Abschnitt über reservierte EC2-Instanzen. Falls Sie sich fragen, würde es 8,40 USD kosten, denselben EC2-Instanztyp wie oben erwähnt bei Bedarf auszuführen.

S3

Ich habe ein paar S3-Eimer. Eine für meine statische Homepage, eine zum Speichern von Bildern und eine zum Speichern der Anwendungsversion. Soweit ich weiß, erstellt ELB automatisch die für die Verwaltung der Anwendungsversionen.

Der S3 ist ziemlich billig, daher mache ich mir keine Sorgen darüber, Nickel und Cent zu verdienen, aber es gibt Möglichkeiten, über das Gletschersystem Geld zu sparen.

Datenbank

Ich hoste meine MongoDB-Datenbank bei mLab, die bald verschwinden wird. Also werde ich das aktualisieren, wenn ich herausfinde, wie viel das tatsächlich kosten wird, wenn ich gezwungen bin, zu Mongos Atlas überzugehen.

Reservierte EC2-Instanzen

Lassen Sie uns über Reserved Instances (RI) sprechen. Das komplizierte Abrechnungssystem von Amazon ist der verwirrendste Teil bei der Verwaltung von AWS-Inhalten. Reservierte Instanzen können einen Teil der Kosten senken, sind jedoch viel zu verwirrend.

Nachdem ich viel gelesen und mit dem AWS-Kundendienst gesprochen habe, habe ich das irgendwie herausgefunden.

Erstens gibt es zwei verschiedene Möglichkeiten, wie Sie reservieren können, wo sich der RI befindet: Regional- und Verfügbarkeitszone. Regional bedeutet, dass es spezifisch für eine der Hauptregionen ist, z. us-west-2 (Oregon). Die Verfügbarkeitszone (AZ) ist spezifisch für eine Zone innerhalb dieser Region, z. B. us-west-2 a (Oregon).

Ich habe ein RI in us-west-2 gekauft und es wurde automatisch auf meine Instanz angewendet, die in diesem Bereich ausgeführt wird. Wenn Sie eine innerhalb der AZ kaufen, gilt diese nur für die jeweilige AZ, z. B. us-west-2a. Wenn ELB also eine EC2-Instanz in us-west2b hochfährt, haben Sie kein Glück.

Darüber hinaus gibt es Standard- und konvertierbare RI-Typen. Ich weiß nicht zu 100%, was das bedeutet, aber nach meinem Verständnis ist Cabrio flexibler in Bezug auf das, worauf Sie es austauschen können, aber teurer.

Schließlich gibt es drei Arten von Zahlungsarten: Nein im Voraus, teilweise im Voraus, Alle im Voraus. Dies ist ziemlich einfach. Sie zahlen entweder nichts, einige oder alle, wenn Sie die Instanz reservieren. Es gibt keinen Kostenvorteil, den ich sehen kann. Als neues Konto können Sie jedoch höchstwahrscheinlich keine Vorab-Aktionen ausführen.

Per AWS-Support:

Keine Upfront Reserved Instances (RIs) können ein erhebliches Abrechnungsrisiko für neue Konten darstellen, da sie eine vertragliche Verpflichtung zur monatlichen Zahlung für die gesamte Laufzeit des RI darstellen. Aus diesem Grund können sich neue Konten und wenig genutzte Konten erst dann für No Upfront RIs anmelden, wenn mit uns ein erfolgreicher Abrechnungsverlauf erstellt wurde.

Dieser Fehler kann auftreten, wenn Sie versuchen, ein Nein im Voraus zu kaufen.

Fehler: Mit Ihrem aktuellen Kontingent können Sie nicht die erforderliche Anzahl reservierter Instanzen erwerben (Service: AmazonEC2; Statuscode: 400; Fehlercode: ReservedInstancesLimitExceeded;)

Vorsichtsmaßnahme: Aus irgendeinem Grund dauert es ein bisschen, bis die reservierte Instanz aktiviert ist, was bedeutet, dass der erste Tag des Monats immer mehr kostet. Ich bin mir nicht sicher, warum das so ist, aber wenn ich es herausfinde, werde ich es aktualisieren. Siehe Grafik unten:

Schmerzstellen

Dies sind nur einige geringfügige Beschwerden über die gesamte EBS, die ich als Ergänzung zu meinem ursprünglichen Artikel aufgenommen habe, falls Sie neugierig sind.

Automatische Updates sind nicht wirklich so automatisch

Knotenversionen werden nicht von Version zu Version ausgerichtet.

Im folgenden Schritt erfahren Sie, wie ich das Ändern von Linux-Versionen verwalte, wenn Node nicht funktioniert.

Ausführen von mehr als einer Umgebung

Eine Entwicklungsumgebung und eine Produktion gleichzeitig zu haben ist einfach, aber teuer. Es verdoppelt es tatsächlich. Daher zerstöre ich normalerweise die Entwicklungsumgebung, sobald ich damit fertig bin.

Die Dokumentation ist schrecklich

AWS ist zu groß für sich. Deshalb schreibe ich das auch. Es war wirklich schwer, Antworten auf meine spezifischen Bedürfnisse zu finden.

Wie verwalte ich Updates?

Ich habe zwei separate Instanzen meines Git-Repos auf meinem Laptop installiert. Ich habe eine für Entwickler und eine für die Produktion.

Ich benutze die Entwicklungsumgebung, um mich zu entwickeln! Ziemlich einfach. Ich verwende den Produktionsordner ausschließlich zum Abrufen von Updates aus dem Git-Hauptzweig, zum Ausführen meiner Webpack-Konfiguration und zum Bereitstellen auf dem Produktionsserver.

Der Grund, warum sie getrennt sind, liegt darin, dass ich separate elastische Bohnenstangenkonfigurationen beibehalten kann und mich nicht um die Bereitstellung am falschen Ort kümmern muss.

Updates, für die keine Änderung der Linux-Umgebung erforderlich ist

Für Updates, für die keine Änderungen an der Linux-Umgebung erforderlich sind, ist es so einfach wie das Ausführen eb deployim Terminal. Es ist erstaunlich und dauert ungefähr 10 Minuten, um sich zu verbreiten.

Updates, die eine Änderung der Linux-Umgebung erfordern

Gelegentlich möchten Sie die Linux-Umgebung aktualisieren, können dies aber auch nicht, da AWS verdammt dumm ist (ich bin sicher, es gibt einen Grund) und nur bestimmte Versionen von Node für jeden Linux-Build zulässt. Dafür ist es etwas komplizierter, aber überschaubar.

  1. Push zur Produktionskonfiguration unter neuer Umgebung. Das letzte Mal habe ich eine neue Instanz über erstellt eb create prod-1. Es wird alles tun, was es braucht, und Ihre App in einer neuen Umgebung bereitstellen.
  2. Stellen Sie sicher, dass alle Ihre Updates funktionieren. Scheint ziemlich offensichtlich, aber dies ist ein guter Zeitpunkt, um sicherzustellen, dass es mit dem neuen Build keine Probleme gab.
  3. Stellen Sie sicher, dass Ihre Umgebungsvariablen korrekt eingerichtet sind. Dies ist ein Teil der vorherigen Version, aber stellen Sie sicher, dass Sie aus der richtigen Datenbank ziehen oder was auch immer.
  4. Stellen Sie sicher, dass Ihr Load Balancer über dasselbe SSL-Zertifikat verfügt (falls zutreffend). Unterhaltsame Tatsache, wenn Sie versuchen, auf eine ELB-Instanz in https ohne Zertifikat zuzugreifen, schlägt dies fehl!
  5. Tauschen Sie die Instanzen aus. Nachdem alles gut aussieht, gibt es in der Konsole eine Schaltfläche zum Austauschen der Instanz-URLs. KINDERLEICHT. Sie müssen an der Route 53 nichts ändern, sie erledigt alles für Sie.

Also, da hast du es. So verwalten Sie Ihre Updates. Ziemlich einfach.

Abschließende Gedanken

Wenn Sie Vorschläge haben, um es billiger / einfacher zu machen, würde ich sie gerne hören. Ich mag die Diskussion über Tools und Optionen genauso wie der nächste Entwickler!

Damit gehe ich mit folgendem: Viel Spaß beim Codieren!