使用Elastic Beanstalk将WSGI应用程序错误地部署到AWS


8

交叉链接到AWS论坛

我已经使用WSGI开发了一个简单的Python Web服务,并希望使用Elastic Beanstalk将其部署到AWS云。我的问题是我无法使在Elastic Beanstalk配置中指定的所有选项都可以在云中正确配置。

对于部署,我使用Elastic Beanstalk CLI实用程序。我已经运行eb init命令并设置了所需的参数。之后,.elasticbeanstalk在我的源代码树中创建了一个名为目录。它具有两个用于部署的配置文件,即configoptionsettings。其他选项中的后一个包含必须/etc/httpd/conf.d/wsgi.conf在实例上更新的WSGI配置。经过一些调整后,文件具有以下设置:

[aws:elasticbeanstalk:应用程序:环境]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

[aws:elasticbeanstalk:container:python]
WSGIPath = handler.py
NumProcesses = 2
StaticFiles = / static =
NumThreads = 10

[aws:elasticbeanstalk:container:python:staticfiles]
/ static =静态/

[aws:elasticbeanstalk:hostmanager]
LogPublicationControl =假

[aws:autoscaling:launchconfiguration]
InstanceType = t1.micro
EC2KeyName = zmicier-aws

[aws:elasticbeanstalk:应用程序]
应用程序运行状况检查URL = 

[aws:autoscaling:asg]
最大大小= 10
最小大小= 1
自定义可用区= 

[aws:elasticbeanstalk:monitoring]
自动终止不正常的实例= true

[aws:elasticbeanstalk:sns:topics]
通知端点= 
通知协议=电子邮件

事实证明,启动环境或更新环境时,并未考虑所有这些选项。因此,当我更新NumThreads或时NumProcesses,各个参数wsgi.conf将按预期更改。但是,无论我写到WSGIPathStaticFiles参数如何,都无法自动更改的相应值wsgi.conf,它们仍然

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

这让我发疯。而且,当我使用文件git aws.push的以下内容来部署我的应用程序时.ebextensions/python.config,在其中指定的任何选项都不会影响部署。

option_settings:
     -名称空间:aws:elasticbeanstalk:container:python
       option_name:WSGIPath
       值:mysite / wsgi.py
     -名称空间:aws:elasticbeanstalk:container:python
       option_name:NumProcesses
       价值:5
     -名称空间:aws:elasticbeanstalk:container:python
       option_name:NumThreads
       价值:25
     -名称空间:aws:elasticbeanstalk:容器:python:staticfiles
       option_name:/ static /
       值:app / static / 

我想知道如何强制AWS使用我在配置中指定的所有参数,即WSGI路径和我的静态数据的路径。


我有这个问题。我似乎无法立即更新WSGIPath,而是不得不创建一个新环境。这是一些严重的“ WTF”领域……
赞成

Answers:


1

您可能需要研究构建一个Docker容器并将其部署到Elastic Beanstalk。AWS在https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample上提供了用于执行此操作的Python示例,并在https://上提供了完整的github回购。github.com/aws-samples/eb-py-flask-signup/tree/docker

在本地进行测试会容易得多,并且您具有更大的灵活性。我的经验法则是,一旦我花时间与应该使我的生活变得更轻松的框架进行抗争,那么该是时候改变方法了。我想你已经达到了这一点。

它还可以使您轻松地将应用迁移到日后的Fargate之类的应用中。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.