gpt4 book ai didi

python - AWS Elastic Beanstalk 公开的源代码

转载 作者:太空狗 更新时间:2023-10-29 18:31:35 25 4
gpt4 key购买 nike

我曾尝试使用 AWS 论坛寻求帮助,但是,天哪,那里很难获得任何帮助。无论如何,the original post还在那里。

这是同一个问题。

我使用 Elastic Beanstalk 和 Python 容器部署了一个 Python (Flask) 应用程序。目录结构或多或少是这样的(简化到重点):

[app root]
- application.py
- requirements.txt
/.ebextensions
- python-container.config
/secrets
- keys.py
- secret_logic.py
/myapp
- __init__.py
/static
- image1.png
- some-other-file.js
/services
- __init__.py
- some-app-logic.py

我发现我的应用程序中的任何文件都可以通过浏览以下 URL 来检索:

我查了一下,发现是/etc/httpd/conf.d/wsgi.conf文件中的这个配置引起的:

Alias /static /opt/python/current/app/ 
<Directory /opt/python/current/app/>
Order allow,deny
Allow from all
</Directory>

基本上,这允许通过 /static 虚拟路径读取我的整个应用程序(部署在 /opt/python/current/app/)。

在这一点上,有人可能会建议使用 .config ebextension 文件覆盖默认的 Python 容器 staticFiles 选项(顺便说一下,这是一个多么可怕的默认值)是一件简单的事情。嗯,如果你看一下我的目录结构,你会看到 python-container.config,它有:

"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "app/myapp/static/"

但是在生成 Apache 配置文件时,这个文件会被完全忽略。为了(我认为)证明这一点,请查看这些文件中的 AWS EB 脚本(只是重要的几行):

/opt/elasticbeanstalk/hooks/configdeploy/pre/01generate.py:

configuration = config.SimplifiedConfigLoader().load_config()
config.generate_apache_config(
configuration, os.path.join(config.ON_DECK_DIR, 'wsgi.conf'))

/opt/elasticbeanstalk/hooks/appdeploy/pre/04configen.py:

configuration = config.SimplifiedConfigLoader().load_config()
config.generate_apache_config(
configuration, os.path.join(config.ON_DECK_DIR, 'wsgi.conf'))

/opt/elasticbeanstalk/hooks/config.py:

def _generate_static_file_config(mapping):
contents = []
for key, value in mapping.items():
contents.append('Alias %s %s' % (key, os.path.join(APP_DIR, value)))
contents.append('<Directory %s>' % os.path.join(APP_DIR, value))
contents.append('Order allow,deny')
contents.append('Allow from all')
contents.append('</Directory>')
contents.append('')
return '\n'.join(contents)

class SimplifiedConfigLoader(ContainerConfigLoader):
def load_config(self):
parsed = json.loads("path/to/containerconfiguration")
python_section = parsed['python']
converted = {}
#..snip...
static_files = {}
for keyval in python_section['static_files']:
key, value = keyval.split('=', 1)
static_files[key] = value
converted['static_files'] = static_files
#...
return converted

/opt/elasticbeanstalk/deploy/configuration/containerconfiguration:

{
"python": {
//...
"static_files": [
"/static="
],
//...
}

我为转储这么多代码而道歉,但它的要点是当 _generate_static_file_config 被调用以生成 wsgi.config 的那部分时,它从不使用任何这些 ebextension 配置文件中指定的值。 SimplifiedConfigLoader 仅使用固定文件 containerconfiguration,它具有 /static 映射的邪恶默认值。

我希望我遗漏了一些东西,因为如果不求助于自定义 AMI,我找不到防止这种情况发生的方法。

最佳答案

我最终向 AWS 支持提出了一个付费案例,他们确认这是 Python 容器代码中的错误。

由于这个问题,他们刚刚发布了 (10/25/2013) 容器的新版本,任何新环境都将包含此修复程序。要修复您现有的任何环境……好吧,您不能。您必须从头开始创建一个新环境(甚至不要使用已保存的配置),然后从旧环境切换过来。

希望这能帮助下一个可怜的灵魂。

2017-01-10 更新:当我回答无法将容器升级到更新版本时。从那时起,AWS 添加了该功能。您甚至可以使用托管平台更新 功能让它自动更新。

关于python - AWS Elastic Beanstalk 公开的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19363736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com