오늘 중요한 업뎃이 있었는데 오전부터 ELB 콘솔에서 zip 파일 업로드가 안되며, 배포가 안되는 현상이 발생했다.
ELB콘솔 -> S3 업로드가 안되는 상황으로 보였지만, AWS CLI와 친숙해질겸 CLI로 배포를 해보았다.
오늘 배포 문제를 겪은, 내가 담당하고있는 서비스는 kotlin + Spring Boot 조합으로 이루어져있는데, 다음의 과정을 거쳐 배포된다.
- 코틀린으로 코드 작성후 compile
- compile된 jar 파일이 Docker에서 실행되도록 하는 Dockerfile과 함께
- jar파일을 압축하여 zip 파일로 만듦
- ELB 콘솔에서 직접 파일 업로드하여 배포
기본적으로 AWS에서는 AWS의 전체적인 서비스와 상호작용 할 수 있는 커맨드 라인 인터페이스인 AWS CLI와 ELB 환경을 컨트롤하는데 특화된 EB CLI를 제공하고 있다
다만 EB CLI는 ELB 콘솔에서 제공하는 "ZIP"파일 배포를 지원하지 않고, git 을 통한 버전관리 형태로 배포 커맨드를 지원한다.
그걸 설정할 시간이 없었던지라, AWS CLI를 통해 EB의 콘솔에서 ZIP파일을 배포할때 EB가 처리해주는 배포과정을 하나하나 수동을 진행하는 방법을 택했다.
EB에서 Zip 파일을 배포하는 과정은 다음과 같다.
- zip 파일을 S3에 업로드
- S3에 업로드된 zip 파일을 가져와 해당 어플리케이션에 버전으로 생성
- 배포하도록 설정한 해당 환경의 인스턴스에서 zip 파일 압축을 풀고 배포 진행
- Docker 환경의 경우 Dockerrun.aws.json이 있다면 해당 설정을 주입하며 docker-compose run을 하던지 Docker run을 하던지 ...
이를 AWS CLI 로 구현해보자.
#bash
cd {project 폴더}
aws s3 cp {압출파일명.zip} s3://{eb가 zip파일을 올려놓는 버킷명}/{버킷에 올릴 파일명}.zip
#bash
aws elasticbeanstalk create-application-version --application-name {배포하고자 하는 대상 어플리케이션 명} --version-label {만들고자 하는 버전명} --source-bundle S3Bucket='{방금 업로드한 zip파일이 있는 S3버킷명}',S3Key='{방금 업로드한 zip파일 명}'
#bash
aws elasticbeanstalk update-environment --application-name {배포하고자 하는 대상 어플리케이션 명} --environment-name {배포하고자 하는 환경 명} --version-label {위에서 만든 version-lable 이름}
이제 AWS 콘솔에 문제가 생기더라도 쉽게 배포할 수 있고,
셸스크립트 등을 작성하여 좀 더 쉽게 배포할 수 있어졌다.
오늘도 감사하다