EC2-Instanz automatisch starten, wenn DNS angefordert wird

EC2-Instanz automatisch starten, wenn DNS angefordert wird

Ich habe einige EC2-Instanzen, die eine Webanwendung innerhalb eines Dockers ausführen, und habe sie so eingestellt, dass sie außerhalb der Arbeitszeit (z. B. zwischen 7 und 19 Uhr) automatisch gestoppt werden, um Kosten zu sparen. Ich würde gerne wissen, ob ich die Instanz so automatisieren kann, dass sie gestartet wird, wenn die URL der Webanwendung angefordert wird (auch wenn EC2 gestoppt ist), falls jemand außerhalb der zuvor konfigurierten Geschäftszeiten darauf zugreifen möchte.

Einige Leute haben mir empfohlen, die Anwendung innerhalb von AWS Lambda auszuführen, aber wie löse ich die Funktion aus, damit sie mit einem DNS-Aufruf startet?

Antwort1

Dies ist nicht ohne weiteres möglich. Sie finden möglicherweise eine komplexe Methode mit Lambda und Route 53-Protokollierung, aber selbst dann kann es 5 Minuten dauern, bis eine EC2-Instanz gestartet wird. Das bedeutet, dass die Anforderung zum Zeitpunkt des Starts der EC2-Instanz abgelaufen ist.

Lambda

Das Umschreiben Ihrer Anwendung auf Lambda/Serverless-Compute würde dieses Problem beheben. Sie zahlen nur pro Anfrage und in den meisten Fällen nicht viel. Die meisten Serverless-Anwendungen kosten sehr wenig. Einige können jedoch viel mehr kosten als EC2-Instanzen.

Praktische Option

Die praktischste Methode, die Kosten niedrig zu halten, ist wahrscheinlich die Verwendung von Autoscaling und kleinen Recheneinheiten und die Skalierung nach oben, anstatt weniger große Instanzen. Sie halten einen kleinen Satz von Ressourcen rund um die Uhr in Betrieb und nutzen in Spitzenzeiten mehr Ressourcen.

Bei Containern könnten Sie Fargate verwenden, um einen Container mit geringen Ressourcen rund um die Uhr laufen zu lassen und dann bei steigender Auslastung mehr Ressourcen hinzuzufügen. Dies könnte entweder eine automatische oder eine geplante Skalierung sein. Ich weiß nicht, ob Sie Fargate und EC2 innerhalb desselben ECS-Clusters verwenden können, aber wenn ja, könnte das das Problem lösen.

Antwort2

Es ist nicht möglich, eine EC2-Instanz zu starten, wenn die URL der Web-App angefordert wird. Die HTTP-Anforderung wird abgelaufen sein, bevor die Instanz bereit ist, die Anforderung zu verarbeiten.

Es wäre keine Authentifizierung erforderlich, was bedeutet, dass jede beliebige Anfrage eines Bots den Start der EC2-Instanz auslösen würde.

Theoretisch sollte es möglich sein, einen Stack zu erstellen, um dies zu tun, indem man beispielsweise ein ALB verwendet, das Anfragen an einen bestimmten Pfad zu einer Lambda-Funktion weiterleitet, die eine EC2-Instanz starten könnte. Aber die dafür erforderlichen Ressourcen wären teurer, als die Instanz rund um die Uhr laufen zu lassen.

Wenn Sie Kosten senken möchten, ist AWS möglicherweise nicht der beste Anbieter für Sie.

verwandte Informationen