Eine EC2 Instanz ist eine der Dinge, die in AWS nicht von Haus aus ausfallsicher sind. Eine Instanz kann kaputt gehen.
Wie bekomme ich nun eine Applikation, die genau auf einer Instanz laufen kann, möglichst kostengünstig hoch verfügbar?
Ansatz
Der Trick liegt darin, dass man die Instanz in einer AutoScaling Gruppe mit:
- MinSize: 1
- MaxSize: 1
- DesiredCapacity: 1
erstellt. Die AutoScaling Gruppe sorgt nun dafür, dass immer genau eine Instanz läuft. Geht diese Instanz kaput wir sie automatisch ersetzt.
Das Problem dabei ist nun, dass sich damit auch die IP-Adresse der Instanz ändert. Wie können wir die Instanz entkoppeln? Dazu nutzen wir Route53. Beim starten der Instanz legt die Instanz selbst ein Record Set in Route53 an, sodass zum Beispiel servicexyz.meinedomain.de auf die öffentliche Adresse der Instanz zeigt.
Genau das kann mit den Tools:
- Node.js basiert: https://github.com/widdix/node-route53-updater
- Java basiert: https://github.com/taimos/route53-updater
erreicht werden. Nun einfach beim starten der Instanz folgenden Zeile ausführen
route53-updater --action UPDATE --hostedZoneName meinedomain.de. --recordSetName servicexyz.meinedomain.de.
Und innerhalb von einer Minute zeigt servicexyz.meinedomain.de auf die neue Instanz.