2016-06-07 9 views
1

Ich testen Elastic Beanstalk für meine node.js express.js App. Wenn ich ein Update bereitstelle, geht die App für ein paar Sekunden aus, und ich bekomme ein "schlechtes Gateway" von ngnix.AWS Elastic Beanstalk geht für einen Sekundenbruchteil auf Deployment

Ist das, weil ich gerade 1 Instanz gerade habe? Wie bekomme ich das für die Produktion bereit? Wie bei Null Ausfallzeiten.

Antwort

3

Versuchen Sie, die Bereitstellungsrichtlinie auf Unveränderbar zu setzen. Sie haben wahrscheinlich "Alles auf einmal" eingestellt, wodurch die vorhandene Instanz aktualisiert wird und Sie dadurch Ausfallzeiten erleben.

Mit der Immutable-Implementierungsrichtlinie erstellt Elastic Beanstalk eine neue Instanz und stellt sicher, dass sie vor dem Umschalten fehlerfrei ist.

Siehe http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.deploy-existing-version.html

5

Sie können dasselbe unerwünschte Verhalten auch bei einer Elastic Beanstalk-Umgebung mit mehr als einer Instanz erhalten. Der Grund ist, dass es vorkommen kann, dass alle Instanzen den Aktualisierungsprozess gleichzeitig ausführen.

Wenn Sie diese Ausfallzeit vermeiden möchten, gibt es eine integrierte Funktion für Elastic Beanstalk namens URLs austauschen. Es ist eine sehr einfache Implementierung einer Blue-Green-Implementierung Strategie.

Grundsätzlich haben Sie in einer Blue-Green-Bereitstellungsstrategie zwei Gruppen von Ressourcen: die blauen Ressourcen und die grünen Ressourcen. Nehmen Sie an, dass die Blue-Ressourcen zunächst den Produktionsdatenverkehr empfangen und verarbeiten. Die Strategie funktioniert wie folgt: (1) Sie stellen die neue Version Ihrer Anwendung in den Green-Ressourcen bereit; (2) Sie laufen irgendwelche Aufwärmverfahren, die Sie vielleicht wünschen, wenn Sie irgendwelche haben; (3) Sie verwenden eine Art "Traffic Manager", um Produktionsdaten in Ihre Green-Ressourcen zu senden; (4) Sobald der gesamte Datenverkehr von den Blue-Ressourcen in die Green-Ressourcen migriert ist, können Sie optional die Blue-Ressourcen herunterfahren.

In Elastic Beanstalk benötigen Sie 2 Umgebungen dafür. Nehmen wir an, wir haben 2-Umgebungen mit den folgenden Namen und URLs:

  • Erste Umgebung genannt Env-Blue, mit URL myapp-prod.elasticbeanstalk.com.

  • Zweite Umgebung namens Env-Green, mit URL myapp-staging.elasticbeanstalk.com.

Nehmen wir an, dass Sie Ihren eigenen Domain-Namen haben, www.myapp.com, die myapp-prod.elasticbeanstalk.com verweist. Du spielst gerade v1.0 auf Env-Blue, und du arbeitest hart daran, v1.1 herauszubekommen.

Wenn Sie bereit sind, Version 1.1 bereitzustellen, stellen Sie es in Env-Green bereit - und Sie tun das, weil es die aktuelle "Staging" -Umgebung ist. Dann können Sie sich damit verbinden, stellen Sie sicher, dass es genau so funktioniert, wie Sie es wollten.

Schließlich wählen Sie beide Umgebungen auf Elastic Beanstalk und wählen Sie die Funktion Swap URLs. Ihre Umgebungen werden dann wie folgt aussehen:

  • Erste Umgebung genannt Env-Blue, mit URL myapp-staging.elasticbeanstalk.com, die alte Version 1.0 ausgeführt wird.

  • Zweite Umgebung namens Env-Green, mit URL myapp-prod.elasticbeanstalk.com, die neue v1.1 läuft.

Da www.myapp.com noch myapp-prod.elasticbeanstalk.com Punkte, die Benutzer, die auf www.myapp.com anschließen, wird nun auf die Env-Grün gesendet werden, die v1.1 läuft. Wenn die Benutzer ihre DNS-Caches aktualisieren, werden sie schrittweise auf Version 1.1 migriert.

Eine sehr wichtige letzte Anmerkung: Damit diese Strategie ordnungsgemäß funktioniert, ist es sehr wichtig, dass Sie eine geeignete TTL für Ihre Domäneneinträge konfiguriert haben. Wenn es zu lange dauert, cachen Ihre Benutzer möglicherweise für eine sehr lange Zeit in Ihrem DNS und es würde eine Weile dauern, bis sie migriert werden. Und während dieser Zeit musst du zwei Ressourcen laufen lassen (für die du bezahlen würdest).

+0

Danke Bruno! Sehr gründliche Antwort. Was ist mit dem: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rollingupdates.html – Costa

+1

Dieser Link spricht speziell über Änderungen der Umgebungskonfiguration - zum Beispiel, wenn Sie Instanztypen ändern (t2. Mikro bis3.large, zum Beispiel). Dazu müssen Sie Ihre EC2-Instanzen ersetzen. Ein Rolling Update würde Elastic Beanstalk dazu veranlassen, sie nicht alle gleichzeitig zu ersetzen. Es gibt auch etwas Ähnliches, das "rollende Bereitstellungen" genannt wird - http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html. Es ist definitiv etwas, das es wert ist, untersucht zu werden. Im Vergleich zu Blau/Grün, ist der Hauptunterschied, dass es schwieriger ist, ein Rollback durchzuführen, wenn die Bereitstellung fehlschlägt! So viele Optionen ... –

+0

Danke Bruno! Ja, AWS ist ein riesiges, riesiges Ding-ma-Tech-Ding. Es war interessant darüber zu lernen. Danke, dass du diese Dinge geklärt hast! Ich schätze es sehr:) – Costa

1

Bruno hat die richtige Idee, wenn Blue-Green für null Ausfallzeiten einsetzt.

Nach meiner Erfahrung kann es nach dem Austausch von URLs bis zu 20 Minuten dauern, alle aktiven Verbindungen von Ihrer alten Umgebung zu Ihrer neuen zu trennen. Dies liegt daran, dass Browser, selbst wenn Ihre TTL niedrig ist, den DNS normalerweise für bis zu 15 Minuten zwischenspeichern.

Ich überwache die alten Umgebungen, bis die Verbindungen absterben.

Ein weiterer Vorteil ist, wenn Sie etwas falsch mit Ihrem neuen Einsatz Build während dieser Bekanntmachung 20min Zeitraum abkühlen, können Sie sofort ‚Roll-back‘ von Swap-Urls schlagen wieder zurück zu Ihrer vorherigen Umgebung zu wechseln;)

Verwandte Themen