Ich habe einen einfachen Python-Webdienst mit WSGI entwickelt und möchte ihn mit Elastic Beanstalk in der AWS-Cloud bereitstellen. Mein Problem ist, dass ich nicht alle Optionen, die ich in der Elastic Beanstalk-Konfiguration angegeben habe, so einstellen kann, dass sie in der Cloud korrekt konfiguriert sind.
Für die Bereitstellung verwende ich das Dienstprogramm Elastic Beanstalk CLI. Ich habe eb init
Befehl ausgeführt und die erforderlichen Parameter eingerichtet. Danach .elasticbeanstalk
wurde in meinem Quellbaum ein Verzeichnis mit dem Namen erstellt. Es verfügt über zwei Konfigurationsdateien, die für die Bereitstellung verwendet werden, nämlich config
und optionsettings
. Die letztere unter den anderen Optionen enthält die WSGI-Konfiguration, die /etc/httpd/conf.d/wsgi.conf
an den Instanzen aktualisiert werden muss. Nach einigen meiner Anpassungen hat die Datei die folgenden Einstellungen:
[aws: elastischer Bohnenstiel: Anwendung: Umwelt] DJANGO_SETTINGS_MODULE = PARAM1 = PARAM2 = PARAM4 = PARAM3 = PARAM5 = [aws: elastischer Bohnenstiel: Behälter: Python] WSGIPath = handler.py NumProcesses = 2 StaticFiles = / static = NumThreads = 10 [aws: elasticbeanstalk: container: python: staticfiles] / static = static / [aws: elasticbeanstalk: hostmanager] LogPublicationControl = false [aws: autoscaling: launchconfiguration] InstanceType = t1.micro EC2KeyName = zmicier-aws [aws: elastischer Bohnenstiel: Anwendung] Application Healthcheck URL = [aws: autoscaling: asg] MaxSize = 10 MinSize = 1 Benutzerdefinierte Verfügbarkeitszonen = [aws: elastischer Bohnenstiel: Überwachung] Ungesunde Instanzen automatisch beenden = true [aws: elastischer Bohnenstiel: sns: Themen] Benachrichtigungsendpunkt = Benachrichtigungsprotokoll = E-Mail
Es stellt sich heraus, dass nicht alle diese Optionen berücksichtigt werden, wenn ich die Umgebung starte oder aktualisiere. Wenn ich also aktualisiere NumThreads
oder NumProcesses
, werden die jeweiligen Parameter wsgi.conf
wie erwartet geändert . Aber was auch immer ich in die WSGIPath
und StaticFiles
-Parameter schreibe , ich kann die jeweiligen Werte von nicht automatisch ändern wsgi.conf
, sie bleiben
Alias /static /opt/python/current/app/
WSGIScriptAlias / /opt/python/current/app/application.py
das macht mich verrückt. Wenn ich meine Anwendung mit git aws.push
und mit den folgenden .ebextensions/python.config
Dateiinhalten bereitstelle , wirkt sich keine der darin angegebenen Optionen auf die Bereitstellung aus.
option_settings: - Namespace: aws: elastischer Bohnenstiel: Container: Python Optionsname: WSGIPath Wert: mysite / wsgi.py - Namespace: aws: elastischer Bohnenstiel: Container: Python Optionsname: NumProcesses Wert: 5 - Namespace: aws: elastischer Bohnenstiel: Container: Python Optionsname: NumThreads Wert: 25 - Namespace: aws: elasticbeanstalk: container: python: staticfiles Optionsname: / static / Wert: app / static /
Ich frage mich, was ich tun soll, um AWS zu zwingen, alle in der Konfiguration angegebenen Parameter zu verwenden, nämlich den WSGI-Pfad und den Pfad zu meinen statischen Daten.
quelle
Antworten:
Vielleicht möchten Sie einen Docker-Container erstellen und diesen für Elastic Beanstalk bereitstellen. AWS hat ein Python-Beispiel dafür unter https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample und ein vollständiges Github-Repo unter https: // github.com/aws-samples/eb-py-flask-signup/tree/docker
Es wird viel einfacher sein, lokal zu testen, und Sie haben viel mehr Flexibilität. Meine Faustregel lautet: Sobald ich Zeit damit verbringe, gegen die Rahmenbedingungen zu kämpfen, die mein Leben erleichtern sollen, ist es Zeit, den Ansatz zu ändern. Ich würde sagen, Sie haben diesen Punkt erreicht.
Es macht es auch einfach, Ihre App später auf etwas wie Fargate zu migrieren.
quelle
Erwägen Sie die Verwendung von .ebextensions, dokumentiert unter:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
Sie können
file:
Ihre Konfigurationsdatei nach Bedarf auf der Hostinstanz bereitstellen. Und dann neu starten / neu laden, falls erforderlich, mitcommand:
quelle