前提
djangodでWEBアプリを作成しています。
自動デプロイの設定をcircleciで試しておりますが、
circleciの仮想マシンからEC2にSSH接続した場合、EC2のOSの環境変数が受け取れず困っています。
原因わからず、お力添えいただけますと幸いです。
実現したいこと
circleciの仮想マシンからEC2にSSH接続した後、EC2のOSの環境変数が受け取りたい
発生している問題・エラーメッセージ
pipenv run python3 /home/**/app//*/manage.py migrateでSECRET_KEYが読み込めずエラーになっています。
+ ssh ***********@************ ' cd ~/app/***** && git pull origin master && python3 -m pip install --upgrade pip && python3 -m pipenv install --skip-lock && cd ~/app/*****/***** && pipenv run python3 /home/***********/app/*****/*****/manage.py migrate && pipenv run python3 /home/***********/app/*****/*****/manage.py collectstatic --noinput && pipenv run sudo systemctl reload nginx.service && pipenv run pkill gunicorn && pipenv run gunicorn --bind 127.0.0.1:8000 *****_pj.wsgi -D && pipenv run ps -aux | grep gunicorn ' Warning: Permanently added '************' (ED25519) to the list of known hosts. From https://github.com/keydean130/***** * branch master -> FETCH_HEAD 60fbb8e..9903910 master -> origin/master Merge made by the 'ort' strategy. .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Defaulting to user installation because normal site-packages is not writeable Requirement already satisfied: pip in /home/***********/.local/lib/python3.7/site-packages (22.3) Installing dependencies from Pipfile... To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. Traceback (most recent call last): File "/home/***********/app/*****/*****/manage.py", line 22, in <module> main() File "/home/***********/app/*****/*****/manage.py", line 18, in main execute_from_command_line(sys.argv) File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line utility.execute() File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute django.setup() File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/apps/registry.py", line 122, in populate app_config.ready() File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/contrib/admin/apps.py", line 27, in ready self.module.autodiscover() File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/contrib/admin/__init__.py", line 24, in autodiscover autodiscover_modules('admin', register_to=site) File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/utils/module_loading.py", line 47, in autodiscover_modules import_module('%s.%s' % (app_config.name, module_to_search)) File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib64/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/contrib/auth/admin.py", line 6, in <module> from django.contrib.auth.forms import ( File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/contrib/auth/forms.py", line 11, in <module> from django.contrib.auth.tokens import default_token_generator File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/contrib/auth/tokens.py", line 117, in <module> default_token_generator = PasswordResetTokenGenerator() File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/contrib/auth/tokens.py", line 18, in __init__ self.secret = self.secret or settings.SECRET_KEY File "/home/***********/.local/share/virtualenvs/*****-COasu-hY/lib/python3.7/site-packages/django/conf/__init__.py", line 90, in __getattr__ raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.") django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty. + aws ec2 revoke-security-group-ingress --group-id sg-0dd95220d0b64b53a --protocol tcp --port 22 --cidr 54.147.101.198/32 { "Return": true } Exited with code exit status 1 CircleCI received exit code 1
該当のソースコード
circleci/config.yml
1# circleCIのバージョン指定 2version: 2.1 3jobs: 4 # Djangoのテストを実行 5 build: 6 ~略~ 7 8 # EC2にSSH接続し、デプロイを実行する 9 deploy: 10 machine: 11 image: ubuntu-2204:2022.04.2 12 steps: 13 - checkout 14 # CircleCIに登録した秘密鍵を呼び出す。 15 - add_ssh_keys: 16 fingerprints: 17 - ${KEY_FINGERPRINT} 18 - run: sudo pip install awscli 19 - run: 20 name: ec2 deploy 21 command: | 22 set -ex 23 24 export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} 25 export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} 26 export AWS_DEFAULT_REGION="us-west-2" 27 28 MY_SECURITY_GROUP="sg-0dd95220d0b64b53a" 29 MY_IP=`curl -f -s ifconfig.me` 30 31 trap "aws ec2 revoke-security-group-ingress --group-id $MY_SECURITY_GROUP --protocol tcp --port 22 --cidr $MY_IP/32" 0 1 2 3 15 32 aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP --protocol tcp --port 22 --cidr $MY_IP/32 33 ssh ${USER_NAME}@${HOST_NAME} ' 34 cd ~/app/nyapu && 35 git pull origin master && 36 python3 -m pip install --upgrade pip && 37 python3 -m pipenv install --skip-lock && 38 cd ~/app/nyapu/nyapu && 39 pipenv run python3 /home/nyapu_admin/app/nyapu/nyapu/manage.py migrate && 40 pipenv run python3 /home/nyapu_admin/app/nyapu/nyapu/manage.py collectstatic --noinput && 41 pipenv run sudo systemctl reload nginx.service && 42 pipenv run pkill gunicorn && 43 pipenv run gunicorn --bind 127.0.0.1:8000 nyapu_pj.wsgi -D && 44 pipenv run ps -aux | grep gunicorn 45 ' 46 47# テストが成功した場合のみ、deployを実行する。 48workflows: 49 version: 2.1 50 build_and_deploy: 51 jobs: 52 - build 53 - deploy: 54 requires: 55 - build 56 # masterブランチがpushされた場合のみdeployするようにする。 57 filters: 58 branches: 59 only: master 60
SECRET_KEYは以下のようにOSの環境変数を読み込んでおり、ユーザの~/.bash_profileに環境変数設定しています。
settings_common.py
1import os 2from django.contrib.messages import constants as messages 3 4SECRET_KEY = os.environ.get('SECRET_KEY') 5 6~略~
試したこと
circleciを使用せず、${USER_NAME}と同じユーザでEC2にssh接続して、
同じコマンド実行した場合は、正常に環境変数を読み取れます。
補足情報(FW/ツールのバージョンなど)
Python 3.7
Django 3.2.14
CircleCI 2.1
Amazon Linux2

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。