我有一个Flask应用程序,我想部署到Amazon Elastic Beanstalk,但有以下问题:
在我们部署源代码时,有没有办法让我们的配置文件自动上传到AWS EB?我考虑将它放在一个通过.ebextensions /中的配置创建的文件中,但是无论如何都需要在Git中,打败对象。
或者我们是否必须(a)将所有代码转换为从环境变量中读取配置,以及(b)创建某种预启动脚本,将当前配置脚本中的值注入环境中?根据它是否在AWS上运行,必须维护两种完全不同的方式将配置数据读入我们的应用程序是不理想的。
我已经看到了这个问题/答案 - How to specify sensitive environment variables at deploy time with Elastic Beanstalk - 并且我认为没有充分解决这个问题,因为它不能很好地扩展到大量的配置选项,也没有处理Flask通常期望它的事实以不同的格式配置。
答案 0 :(得分:0)
如果您正在使用12因子应用程序,处理此类配置的最简单方法是默认情况下查找环境变量,并使用硬编码配置:
from os import environ
from flask.config import Config
class EnvConfiguration(Config):
"""Configuration sub-class that checks its environment
If no environment variable is available,
it falls back to the hard-coded value provided"""
def __getitem__(self, key):
environ.get(key, super(EnvConfig, self).__getitem__(key))
然后您可以覆盖Flask.config_class
(v1 +)或Flask.make_config
以确保使用的配置是您想要的配置:
class CustomApp(Flask):
# 1.0+ way
config_class = EnvConfiguration
# 0.8+ way (you only need one of these)
def make_config(self, instance_relative=False):
config = super(CustomApp, self).make_config(instance_relative=instance_relative)
config = EnvConfig(**config)
return config