Facts
✅ GithubAction + ElasticBeanstalk + Docker + AWS ECR로 무중단 배포
Findings
도커를 활용한 무중단 배포는 산 넘어 산이었다. 에러 하나 고치면, 또다른 에러가 나왔다.
도커를 활용한 무중단 배포를 하면서 여러 에러들을 디버깅했다.
👻 1. Missing region in config Error
문제 원인
Amazon ECR에 로그인을 해주려면, AWS 사용자 access key 필요한데, 이를 추가해주지 않았다.
해결
AWS 사용자 access key 추가
👻 2. Push Image Error
문제 원인
Image가 Elastic Container Registry에 Push 되지 않았다.
Registry를 Public으로 설정하면 Registry의 URI가 달라져, Push가 안 되었다.
해결
Registry를 public에서 private로 바꿔주어 Error를 해결
👻 3. EB Deploy가 안되는 Error
EB가 배포되는 것을 거부했다.
문제 원인
EB의 상태를 확인해보니, Application version이 Expected version이 아니여서 failled가 되었다.
해결
이에 대한 해결책을 구글링해보니, EB 재부팅하면 된다고해서 재부팅해주었고 EB에 배포되는 것이 정상적으로 되었다.
👻 4. 사이트 연결할 수 없음 Error
문제 원인
분명히 배포도 잘되어있고, EB Status도 정상인데 사이트가 연결이 되지 않았다.
EB안에 있는 AWS EC2인스턴스와 AWS ECR과 연결이 되지 않아 이미지가 EC2에 배포되지 않았기 때문이다.
ECR을 IAM 사용자나 EC2 인스턴스에 연결할 수 있는 여러 개의 관리형 정책이 있다.
연결하기 위해, AWS EB의 IAM 인스턴스 프로파일인 aws-elasticbeanstalk-ec2-role에 역할을 추가해주어
EC2에게 Amazon ECR에 대한 읽기 전용 권한을 부여해주었다.
해결
aws-elasticbeanstalk-ec2-role에 AmazonEC2ContainerRegistryReadOnly 역할을 추가
👻 5. 502 Bad Gateway
EB의 상태도 정상이고 EB내의 EC2에 Dockerrun.aws.json 파일 배포가 잘 되어있는데
502 Bad Gateway 에러가 발생했다.
502 Bad Gateway 에러 해결방안에 대해 검색해봐도 어떻게 해결해야할지 발견하지 못하여,
EB 로그를 확인해서 원인을 찾아보려고 했다.
도커에서 application.jar를 찾을 수 없다는 로그가 발생했다.
문제 원인
Dockerfile의 ENTRYPOINT를 잘못 설정해준 것을 발견했다.
build할 때 app.jar로 build했지만, ENTRYPOINT를 application.jar로 잘못 설정해두었다.
해결
Dockerfile의 ENTRYPOINT를 제대로 설정해주니, 드디어 서버 접근이 되었다.
너무 보고싶었다! 🕺🕺🕺
👻 6. CORS Error 갑자기 발생
사이트가 갑자기 CORS에러가 떴다.
CORS 설정 잘못 해주었다고 착각하고 CORS 관련 파일들을 수정했다.
문제 원인
CORS 관련 파일들을 확인해보니, CORS 설정이 잘 되어 서버에 기록된 로그들을 확인했다.
해당 원인은 함께 개발한 팀원분이 서버 모니터링 기능을 추가해주셨는데,
그 과정에서 EB의 환경변수 값에 잘못된 값이 들어가서 생긴 오류였다.
해결
환경변수 값을 맞게 수정하여 해결
처음 CORS에러 뜨는 것을 보고, CORS를 잘못 설정해두었다고 착각하여 관련 파일을 수정했었다.
에러가 나면 무지성으로 시도하기 보다는 에러의 정확한 원인을 찾는 것이 중요하다고 생각이 들었고
에러의 원인을 찾으려면 정말 다양한 각도에서 접근해야하고, 서버에 기록된 로드를 먼저 확인하고 에러의 원인을 명확히 찾는 것이 중요하다는 것을 배우게 되었다.
이 6가지 에러 외에도 EB가 로드밸런서를 자동으로 생성 안 해주는 등의 에러들이 있었다. 😛
배포하시는 개발자분들 다같이 홧팅!! 🔥
Feelings
- 배포하면서, EB Status가 심각해질 때마다 내 마음도 심각해졌다. 😱 (ㅋㅋ)
- 배포를 직접 해보니 클라우드랑 조금 더 친해졌다. 앞으로도 더 친해져야겠다. ☁️
Future
- 에러가 발생했을 때, 해당 원인을 명확히 찾아 문제 정의를 잘하는 것이 중요하다.
'Project > TIL, WIL' 카테고리의 다른 글
TIL(56) 회원가입 중복 아이디 예외처리 추가, 알고리즘 문제 해결 스터디 시작 (0) | 2021.12.27 |
---|---|
TIL(55) AWS RDS 연동하면서 발생한 에러 고치기 (0) | 2021.12.27 |
TIL(53) JPA 연관관계 에러 고치기 (0) | 2021.12.27 |
TIL(52) Elasticbeanstalk에 HTTPS를 연결 (0) | 2021.12.27 |
TIL(51) JPA 관련 에러 고치기 (0) | 2021.12.27 |