3 回答
TA贡献1906条经验 获得超10个赞
看起来这是一个严重的错误,AWS 并不关心它。我想出了几种方法来完成这项工作,但所有这些方法都需要登录到 EB 环境并执行一些手动工作。
解决方案1
创建 AWS 秘密管理器
检查
IAM instance profile
EB的环境Configuration->Security->Edit
。然后转到 IAM 用户控制台并转到
Roles
. 从那里,您可以将策略附加到秘密管理器的实例配置文件。完成后,部署项目
然后登录环境(
eb ssh environment_name
)。转到
/var/app/current/
目录并运行以下命令:source /var/app/venv/*/bin/activate
。终于跑了
python3 manage.py migrate
。
解决方案2
编辑
.bash_profile
并在文件末尾添加导出这些变量:export RDS_DB_NAME=your_dbname export RDS_USERNAME=user export RDS_PASSWORD=pass export RDS_HOSTNAME=host_endpoint export RDS_PORT=3306
跑步
source ~/.bash_profile
现在您可以部署您的项目了。
解决方案3
在 EB 环境配置中设置所有环境属性。(转到
Configuration->Software->Edit->Environment properties
并添加键和值)。
2. 在开头添加此代码片段settings.py
from pathlib import Path
import os
import subprocess
import ast
def get_environ_vars():
completed_process = subprocess.run(
['/opt/elasticbeanstalk/bin/get-config', 'environment'],
stdout=subprocess.PIPE,
text=True,
check=True
)
return ast.literal_eval(completed_process.stdout)
转到数据库部分并将其替换为此代码片段
if 'RDS_HOSTNAME' in os.environ:
DATABASES = {
'default': {
' ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['RDS_DB_NAME'],
'USER': os.environ['RDS_USERNAME'],
'PASSWORD': os.environ['RDS_PASSWORD'],
'HOST': os.environ['RDS_HOSTNAME'],
'PORT': os.environ['RDS_PORT'],
}
}
else:
env_vars = get_environ_vars()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': env_vars['RDS_DB_NAME'],
'USER': env_vars['RDS_USERNAME'],
'PASSWORD': env_vars['RDS_PASSWORD'],
'HOST': env_vars['RDS_HOSTNAME'],
'PORT': env_vars['RDS_PORT'],
}
}
部署项目。
登录环境 (
eb ssh environment_name
)。转到
/var/app/current/
目录并运行以下命令:source /var/app/venv/*/bin/activate
。终于跑了
python3 manage.py migrate
。
结论:
解决方案 1不太复杂,而且秘密管理器不是免费的(仅限 30 天试用)。
解决方案 2是最简单的一种,但我不建议在 EB 上手动调整任何文件。
解决方案 3是一个干净的解决方案,我将使用它。该解决方案还可以在将来修复此错误。
TA贡献1779条经验 获得超6个赞
在系统中使用环境属性,例如。运行 Symfony 命令(使用 envs)你可以简单地运行这个:
/opt/elasticbeanstalk/bin/get-config environment | jq -r "to_entries|map(\"export \(.key)='\(.value|tostring)'\")|.[]" >> /home/ec2-user/.bash_profile
它将在 .bash_profile 中添加您的所有道具,因此当您通过 SSH 登录时,它们将全部设置完毕。当然,最好将其添加到 .ebextensions/*.config 的 Commands: 部分下。
TA贡献1802条经验 获得超5个赞
AWS 官方提供的从 EC2 级别提供环境变量的解决方案也解决了这个问题:
https://aws.amazon.com/premiumsupport/knowledge-center/elastic-beanstalk-env-variables-shell/
添加回答
举报