0

Ich habe eine schwere App auf AWS gehostet. Ich verwende CodeDeploy & Code Pipeline (Aktualisierung von Github), um die Server zu aktualisieren, wenn ein neues Release bereit ist (derzeit 6 ec2-Instanzen in der Produktionsumgebung ausgeführt).Verwenden von CodeDeploy ValidateService Hook mit Python-Anwendung

Ich habe die codedeploy so eingerichtet, dass sie einzeln ausgeführt werden kann, und habe außerdem eine 300-Sekunden-Verbindung definiert, die den Load Balancer löscht.

Noch ist meine Anwendung schwer (es lädt große Dicleus Pickle-Dateien von der Festplatte in den Speicher), dauert der Prozess der Zündung etwa ~ 60 Sekunden. In diesen 60 Sekunden markiert CodeDeploy den Prozess der Bereitstellung einer Instanz als abgeschlossen und veranlasst sie, sich als fehlerfreie Instanz dem Load Balancer anzuschließen - dies könnte zu Fehlern bei Benutzern führen, die versuchen, die Anwendung zu erreichen.

Ich dachte über die ValidateService Haken verwenden, aber ich bin nicht sicher, wie in meinem Fall ..

Alle Ideen, wie für eine volle Beladung und Bereitschaft der Anwendung zu warten, bevor er zur nächsten Instanz fortfahren ?

Dies ist mein aktueller AppSpec.yml version: 0.0 os: linux files: - source: /deployment destination: /deployment - source: /webserver/src destination: /vagrant/webserver/src permissions: - object: /deployment pattern: "**" owner: root mode: 644 type: - directory - object: /webserver/src owner: root mode: 644 except: [/webserver/src/dictionaries] type: - directory hooks: ApplicationStop: - location: /deployment/aws_application_stop.sh BeforeInstall: - location: /deployment/aws_before_install.sh AfterInstall: - location: /deployment/aws_after_install.sh ApplicationStart: - location: /deployment/aws_application_start.sh

Antwort

0

Ich würde Schleife im ValidateService Haken, für den Zustand Prüfen Sie erwarten, OR nur schlafen für 60 Sekunden, für die Annahme, daß die normale Initialisierung.

Der Hook ValidateService sollte genau das tun: Stellen Sie sicher, dass der Dienst vollständig ausgeführt wird, bevor Sie die Bereitstellung fortsetzen/abschließen. Das hängt natürlich von deiner App ab. Aber bedenken Sie eine Schleife, die eine speziell gestaltete Seite EG http://localhost/service-ready zieht. Testen und bestätigen Sie in dieser URL alles, was für Ihren Service geeignet ist. Geben Sie eine Zeichenfolge -Pending- zurück, wenn der Dienst noch nicht validiert wurde. Geben Sie eine -OK- zurück, wenn alles 100% ist

Vielleicht Schleife, die 10-20 mal mit einem 10 Sekunden Schlaf, und beenden, wenn es -OK- zurückgibt, dann einen Fehler werfen, wenn der Dienst nie validiert.