Falsche Bereitstellung der WSGI-App in AWS mithilfe von Elastic Beanstalk

8

Querverbindung zu AWS-Foren

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 initBefehl ausgeführt und die erforderlichen Parameter eingerichtet. Danach .elasticbeanstalkwurde in meinem Quellbaum ein Verzeichnis mit dem Namen erstellt. Es verfügt über zwei Konfigurationsdateien, die für die Bereitstellung verwendet werden, nämlich configund optionsettings. Die letztere unter den anderen Optionen enthält die WSGI-Konfiguration, die /etc/httpd/conf.d/wsgi.confan 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 NumThreadsoder NumProcesses, werden die jeweiligen Parameter wsgi.confwie erwartet geändert . Aber was auch immer ich in die WSGIPathund 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.pushund mit den folgenden .ebextensions/python.configDateiinhalten 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.

Zmicier Zaleznicenka
quelle
Ich habe dieses Problem. Ich kann WSGIPath anscheinend nicht zum Aktualisieren bringen, habe eine neue Umgebung erstellt. Dies ist ein ernstes "WTF" Gebiet ...
aendrew

Antworten:

1

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.

Sam Bashton
quelle