psycopg2.OperationalError

이후에 같은 에러가 발생했을 때 스스로 삽질을 하지 않기 위해 기록 😇

상황 :
AWS EB 환경 복제 후 deploy했을 때 에러 발생

확인한 로그 파일 :
cfn-init-cmd.log

로그 파일 내 에러 메시지 :

manage.py:22: UserWarning: Not reading .env - it doesn't exist.
2022-03-20 03:59:45,821 P3687 [INFO] 	  dotenv.read_dotenv()
2022-03-20 03:59:45,821 P3687 [INFO] 	Traceback (most recent call last):
2022-03-20 03:59:45,821 P3687 [INFO] 	  File "/var/app/venv/staging-LQM1lest/lib/python3.8/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection
2022-03-20 03:59:45,821 P3687 [INFO] 	    self.connect()
2022-03-20 03:59:45,821 P3687 [INFO] 	  File "/var/app/venv/staging-LQM1lest/lib/python3.8/site-packages/django/db/backends/base/base.py", line 195, in connect
2022-03-20 03:59:45,821 P3687 [INFO] 	    self.connection = self.get_new_connection(conn_params)
2022-03-20 03:59:45,821 P3687 [INFO] 	  File "/var/app/venv/staging-LQM1lest/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
2022-03-20 03:59:45,822 P3687 [INFO] 	    connection = Database.connect(**conn_params)
2022-03-20 03:59:45,822 P3687 [INFO] 	  File "/var/app/venv/staging-LQM1lest/lib64/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
2022-03-20 03:59:45,822 P3687 [INFO] 	    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
2022-03-20 03:59:45,822 P3687 [INFO] 	psycopg2.OperationalError: could not connect to server: Connection timed out

원인 : RDS의 보안 그룹 규칙(Security group rules)에서 inbound rule을 잘못 설정했기 때문. 즉 Elastic Beanstalk와 EC2는 같은 보안 그룹에 속해있지만 RDS의 경우 해당 그룹에 속해 있지 않기 때문에 서로 통신을 할 수 없는 상황 발생한 것. 이로 인해 psycopg2.operation 에러가 발생.

해결 :

step 1.
AWS RDS로 이동하여 보안 그룹 규칙 선택 (보통 default로 시작)

step 2.
보안그룹 ID 선택

step 3.
'인바운드 규칙 편집' 클릭

step 4.
아래와 같이 모든 트래픽으로, elastic beanstalk 환경을 선택.

좋은 웹페이지 즐겨찾기