Déploiement incorrect de l'application WSGI sur AWS à l'aide d'Elastic Beanstalk

8

lien vers les forums AWS

J'ai développé un service Web Python simple à l'aide de WSGI et je souhaite le déployer sur le cloud AWS à l'aide d'Elastic Beanstalk. Mon problème est que je ne peux pas faire toutes les options que je spécifie dans la configuration Elastic Beanstalk pour être correctement configurées dans le cloud.

Pour le déploiement, j'utilise l'utilitaire Elastic Beanstalk CLI. J'ai exécuté la eb initcommande et mis en place les paramètres requis. Après cela, un répertoire nommé a .elasticbeanstalkété créé dans mon arbre source. Il a deux fichiers de configuration qui sont utilisés pour le déploiement, à savoir configet optionsettings. Cette dernière parmi les autres options contient la configuration WSGI qui doit être mise /etc/httpd/conf.d/wsgi.confà jour au niveau des instances. Après certains de mes ajustements, le fichier a les paramètres suivants:

[aws: élastiquebeanstalk: application: environnement]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

[aws: élastiquebeanstalk: conteneur: python]
WSGIPath = handler.py
NumProcesses = 2
StaticFiles = / static =
NumThreads = 10

[aws: elasticbeanstalk: container: python: staticfiles]
/ statique = statique /

[aws: elasticbeanstalk: hostmanager]
LogPublicationControl = false

[aws: mise à l'échelle automatique: configuration de lancement]
InstanceType = t1.micro
EC2KeyName = zmicier-aws

[aws: élastiquebeanstalk: application]
URL de vérification de l'état de l'application = 

[aws: mise à l'échelle automatique: asg]
MaxSize = 10
MinSize = 1
Zones de disponibilité personnalisées = 

[aws: élastiquebeanstalk: surveillance]
Mettre fin automatiquement aux instances malsaines = true

[aws: elasticbeanstalk: sns: sujets]
Point de terminaison de notification = 
Protocole de notification = email

Il s'avère que toutes ces options ne sont pas prises en compte lorsque je démarre l'environnement ou le mets à jour. Ainsi, lorsque je mets à jour NumThreadsou NumProcesses, les paramètres respectifs sont modifiés wsgi.confcomme prévu. Mais quoi que j'écrive dans les paramètres WSGIPathet StaticFiles, je ne peux pas changer automatiquement les valeurs respectives de wsgi.conf, ils restent

Alias /static /opt/python/current/app/
WSGIScriptAlias / /opt/python/current/app/application.py

ce qui me rend fou. De plus, lorsque je déploie mon application en utilisant git aws.pushet ayant le contenu de .ebextensions/python.configfichier suivant, aucune des options que je spécifie n'affecte le déploiement.

option_settings:
     - espace de noms: aws: élastiquebeanstalk: conteneur: python
       nom_option: WSGIPath
       valeur: mysite / wsgi.py
     - espace de noms: aws: élastiquebeanstalk: conteneur: python
       nom_option: NumProcesses
       valeur: 5
     - espace de noms: aws: élastiquebeanstalk: conteneur: python
       nom_option: NumThreads
       valeur: 25
     - espace de noms: aws: élastiquebeanstalk: conteneur: python: fichiers statiques
       nom_option: / statique /
       valeur: app / statique / 

Je me demande ce que je dois faire pour forcer AWS à utiliser tous les paramètres que je spécifie dans la configuration, à savoir le chemin WSGI et le chemin vers mes données statiques.

Zmicier Zaleznicenka
la source
J'ai ce problème. Je n'arrive pas à obtenir WSGIPath pour mettre à jour maintenant, j'ai eu recours à la création d'un nouvel environnement. Ceci est un territoire sérieux "WTF" ...
aendrew

Réponses:

1

Vous pouvez envisager de créer un conteneur Docker et de le déployer sur Elastic Beanstalk. AWS a un exemple Python pour ce faire sur https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample et un repo complet de github sur https: // github.com/aws-samples/eb-py-flask-signup/tree/docker

Ce sera beaucoup plus facile de tester localement et vous aurez beaucoup plus de flexibilité. Ma règle d'or est qu'une fois que je passe du temps à lutter contre le cadre qui devrait me faciliter la vie, il est temps de changer d'approche. Je dirais que vous avez atteint ce point.

Cela facilitera également la migration de votre application vers quelque chose comme Fargate.

Sam Bashton
la source