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 init
commande 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 config
et 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 NumThreads
ou NumProcesses
, les paramètres respectifs sont modifiés wsgi.conf
comme prévu. Mais quoi que j'écrive dans les paramètres WSGIPath
et 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.push
et ayant le contenu de .ebextensions/python.config
fichier 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.
la source
Réponses:
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.
la source
Pensez à utiliser les extensions .eb documentées à:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
Vous pouvez utiliser
file:
pour provisionner votre fichier de configuration selon les besoins sur l'instance hôte. Et puis redémarrez / rechargez, si nécessaire, aveccommand:
la source