我想在应用程序启动时从云动态加载 Django 设置文件中的一些值,即:
- 数据库密码
- 数据库 IP 地址
将python代码添加到设置文件以从云中检索这些值是否是一种好的做法?
我相信这些只会在应用程序启动时加载一次,即它们不会对我的应用程序的性能产生不利影响。
例如:
# ~ settings.py ~
# retrieve data from the cloud, directly in the settings file
db_password = get_my_secrets()
db_ip_address = discover_db_ip()
# configure the database with these dynamic values
DATABASES = {
'default': {
'PASSWORD': db_password,
'HOST' : db_ip_address,
}
}
这是一篇相关文章(由@Adiii分享(:云中的Django设置
您可以使用多个选项来加载这些配置,而无需更改代码。
- AWS 密钥管理器
- 点环境文件 从 s3
- 环境变量
机密管理器
AWS Secrets Manager 可帮助您保护访问 应用程序、服务和 IT 资源。该服务使您能够 轻松轮换、管理和检索数据库凭据、API 密钥、 以及整个生命周期中的其他秘密
使用 AWS 密钥管理器,您可以在不更改代码的情况下更改/更新数据库主机或密钥。
secret_name = "db_password"
region_name = "us-west-2"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
db_password = get_secret_value_response
机密管理器
点环境与 s3
点 ENV 是从.env file
读取键值对并将它们添加到环境变量中。它非常适合使用 12 因素原则在开发和生产期间管理应用设置。
使用您的所有密钥创建点 ENV 文件并将文件放在 s3 上,然后再启动应用程序从 s3 中提取文件并启动应用程序。
import os
SECRET_KEY = os.getenv("EMAIL")
db_password = os.getenv("db_password")
Python Dot ENv
另一种选择可以只使用系统环境变量。
db_password=os.getenv('db_password', default_pass)