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

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

交叉链接到 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 =
参数1 =
参数2 =
参数4 =
参数3 =
参数5 =

[AWS:Elasticbeanstalk:容器:Python]
WSGIPath = handler.py
进程数 = 2
静态文件 = /static=
线程数 = 10

[aws:elasticbeanstalk:容器:python:静态文件]
/静态=静态/

[aws:elasticbeanstalk:主机管理器]
LogPublicationControl = false

[aws:自动缩放:启动配置]
实例类型 = t1.micro
EC2KeyName = zmicier-aws

[aws:elasticbeanstalk:应用程序]
应用程序健康检查 URL =

[AWS:自动缩放:ASG]
最大尺寸 = 10
最小尺寸 = 1
自定义可用区域 =

[AWS:Elasticbeanstalk:监控]
自动终止不健康实例 = true

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

事实证明,当我启动或更新环境时,并非所有这些选项都会被考虑。因此,当我更新NumThreads或时NumProcesses,相应的参数会按预期发生变化。但无论我向和参数wsgi.conf写入什么,我都无法自动更改相应的值,它们保持不变WSGIPathStaticFileswsgi.conf

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

git aws.push这让我很抓狂。此外,当我使用并具有以下内容的文件部署应用程序时.ebextensions/python.config,我在其中指定的任何选项都不会影响部署。

选项设置:
     - 命名空间:aws:elasticbeanstalk:container:python
       选项名称:WSGIPath
       值: mysite/wsgi.py
     - 命名空间:aws:elasticbeanstalk:container:python
       选项名称:NumProcesses
       值: 5
     - 命名空间:aws:elasticbeanstalk:container:python
       选项名称:NumThreads
       值: 25
     - 命名空间:aws:elasticbeanstalk:container:python:staticfiles
       选项名称:/static/
       值:app/static/

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

答案1

您可能需要考虑构建 Docker 容器并将其部署到 Elastic Beanstalk。AWS 有一个用于执行此操作的 Python 示例,网址为https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample以及完整的 github 仓库https://github.com/aws-samples/eb-py-flask-signup/tree/docker

在本地测试会容易得多,而且灵活性也会更高。我的经验法则是,一旦我花时间与本应让我的生活更轻松的框架作斗争,就该改变方法了。我想你已经到了那个地步。

它还可以让您轻松地将应用程序迁移到 Fargate 之类的系统。

答案2

考虑使用以下文档中的 .ebextensions:

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

您可以file:根据需要在主机实例上配置配置文件。然后,如果需要,可以使用command:

相关内容