3 回答

TA貢獻(xiàn)1906條經(jīng)驗 獲得超10個贊
看起來這是一個嚴(yán)重的錯誤,AWS 并不關(guān)心它。我想出了幾種方法來完成這項工作,但所有這些方法都需要登錄到 EB 環(huán)境并執(zhí)行一些手動工作。
解決方案1
創(chuàng)建 AWS 秘密管理器
檢查
IAM instance profile
EB的環(huán)境Configuration->Security->Edit
。然后轉(zhuǎn)到 IAM 用戶控制臺并轉(zhuǎn)到
Roles
.?從那里,您可以將策略附加到秘密管理器的實例配置文件。完成后,部署項目
然后登錄環(huán)境(
eb ssh environment_name
)。轉(zhuǎn)到
/var/app/current/
目錄并運行以下命令:source /var/app/venv/*/bin/activate
。終于跑了
python3 manage.py migrate
。
解決方案2
編輯
.bash_profile
并在文件末尾添加導(dǎo)出這些變量:?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
現(xiàn)在您可以部署您的項目了。
解決方案3
在 EB 環(huán)境配置中設(shè)置所有環(huán)境屬性。(轉(zhuǎn)到
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)
轉(zhuǎn)到數(shù)據(jù)庫部分并將其替換為此代碼片段
?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'],
? ? ?}
?}
部署項目。
登錄環(huán)境 (?
eb ssh environment_name
)。轉(zhuǎn)到
/var/app/current/
目錄并運行以下命令:source /var/app/venv/*/bin/activate
。終于跑了
python3 manage.py migrate
。
結(jié)論:
解決方案 1不太復(fù)雜,而且秘密管理器不是免費的(僅限 30 天試用)。
解決方案 2是最簡單的一種,但我不建議在 EB 上手動調(diào)整任何文件。
解決方案 3是一個干凈的解決方案,我將使用它。該解決方案還可以在將來修復(fù)此錯誤。

TA貢獻(xiàn)1779條經(jīng)驗 獲得超6個贊
在系統(tǒng)中使用環(huán)境屬性,例如。運行 Symfony 命令(使用 envs)你可以簡單地運行這個:
/opt/elasticbeanstalk/bin/get-config environment | jq -r "to_entries|map(\"export \(.key)='\(.value|tostring)'\")|.[]" >> /home/ec2-user/.bash_profile
它將在 .bash_profile 中添加您的所有道具,因此當(dāng)您通過 SSH 登錄時,它們將全部設(shè)置完畢。當(dāng)然,最好將其添加到 .ebextensions/*.config 的 Commands: 部分下。

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊
AWS 官方提供的從 EC2 級別提供環(huán)境變量的解決方案也解決了這個問題:
https://aws.amazon.com/premiumsupport/knowledge-center/elastic-beanstalk-env-variables-shell/
添加回答
舉報