-
[트러블슈팅] ELB (Elastic Beanstalk) 에 대해 알아두면 좋은 지식들 (feat. ebextensions)Back End/트러블슈팅 2022. 10. 28. 16:13
... 너무 삽질을 많이 했다. 😭
Elastic Beanstalk(ELB) 에 모니터링 알람 설정, 환경 커스터마이징 등을
소스코드레벨에서 관리 할 수 있도록 하는 작업을 진행하면서 알게된 정보를 공유하고자 한다.
특히 httpd.conf 파일이 apache 버전으로 남아있던 현상은 두고두고 기억에 남을 것 같다.
ELB & .ebextensions
1. *.config 파일들은 이름의 오름차순으로 실행된다.
작업 순서가 중요한 config 들은 00_tomcat.config , 01_unzip_font.config 와 같이 네이밍하여 작성한다.
2. *.config 파일 내부에 사용되는 프로퍼티인 commands 와 container_commands 는 실행시점에서 차이가 있다.
# commands
build 파일이 ec2 에서 압축해제 되기전에 실행된다.
따라서 .ebextension 폴더 내의 static resource 들을 참조하지 못한다.# container_commands
build 파일이 ec2 에서 압축해제 되고, tomcat 서버에 deploy 되기전에 실행된다.
.ebextension 폴더 내의 static resource 들을 참조할 수 있다.
staging directory 에서 실행되며 staging directory 는 . 를 이용하여 참조한다.
3. Jenkins 빌드 성공과 Elastic Beanstalk 배포 성공은 별개이다.
*.config 파일들에 정의 된 커맨드가 하나라도 실패하면 모든 사항은 롤백되며 이전 버전을 계속 유지한다.
4. BeanStalk 은 빌드파일이 배포되면 staging 이라는 단계를 갖는다.
staging 단계에서는 war 파일을 압축해제 하여 .ebextension 내의 커맨드를 실행한다.
.ebextension 가 성공적으로 모두 실행되면 .ebextension 폴더를 삭제하고 /var/app/current 경로에 deploy 에 필요한 파일들이 옮겨지며, /var/lib/tomcat/webapps/ROOT 에 soft link 를 생성한다.
(AWS Docs - 각 플랫폼 별 Staging Directory 위치)# 실행순서
1. ebextensions.command 실행 2. staging directory 생성 (UNZIP /opt/elasticbeanstalk/deployment/app_source_bundle) 3. ebextensions.container command 실행 4. ebextensions 삭제 5. X-Ray, proxy, tomcat stop 6. soft link 생성 (FROM /var/app/current TO /var/lib/tomcat/webapps/ROOT) 7. X-Ray, tomcat, proxy 실행
/opt/elasticbeanstalk/deployment/app_source_bundle 를 unzip 하여 /var/app/staging 에 staging directory 가 생성된다.
5. BeanStalk 배포에 관한 로그는 /var/log/eb-engine.log 에서, command 수행에 관한 로그는 /var/log/cfn-init.log 에서 확인할 수 있다.
6. ELB 는 인스턴스가 생성될 때(Scale-out 또는 종료후 재시작) 아래와 같은 순서로 httpd.conf 파일을 교체한다. (Onetime-Only)
1. Apache 의 httpd 를 설치한다. (따라서 httpd.conf 는 Apache provided 상태이다.) 2. .ebextension 을 실행한다. 3. httpd.conf 를 ELB provided 로 변경한다.
중요한 점은 httpd.conf 교체 작업이 Onetime-Only 작업이라는 것이다. (진짜 너무함..)
그래서 2번에서 실패할 경우 3번이 실행되지 않기에, 3번을 기반으로 한 커맨드는 다 무시가 되고 에러가 난다.
ebextension 의 ignoreErrors 를 true 로 하고
소스코드를 재배포 해봤자 이미 httpd.conf 는 Apache provided 상태이기 때문에
3번을 기반으로 한 커맨드는 다 fail 이다.
그리고 ELB provided httpd.conf 가 아니면 MPM 라이브러리가 없어 apache 커맨드도 안먹힌다.
apache 가 실행은 되고 있었는지 모르겠다 (추후 재현하여 확인해본 후 업데이트 하겠음)728x90'Back End > 트러블슈팅' 카테고리의 다른 글