1.
AWS 에서 권장하는 방법은 블루-그린 배포이다. 블루는 기존환경, 그린은 신규환경을 말한다. 업그레이드 된 그린 환경을 만들어 놓고 블루 환경과 바꿔치기 하는 방법이다. 그런데 기존 설정과 동일한 설정의 버전을 또 만들어야 한다는 게 부담이다. 놓치는 게 있을 수도 있어 이 방법은 피하고 싶었다.
2.
우연히 찾은 게 콘솔에서 AWS CLI 명령어를 통해 업그레이드 하는 방법이다. 아래 블로그를 참조했다.
3.
AWS CLI 가 설치되어 있다고 가정하고 아래와 같이 명령어를 실행해 주면 된다. 업그레이드 하려는 환경 이름을 쓰고 원하는 버전을 명시해 준다. 버전 업그레이드, 기존 버전으로 다운그레이드도 가능하다.
# Python 3.11
aws elasticbeanstalk update-environment --environment-name "Ebtest-env" --platform-arn "arn:aws:elasticbeanstalk:ap-northeast-2::platform/Python 3.11 running on 64bit Amazon Linux 2023/4.2.0"
# Python 3.9
aws elasticbeanstalk update-environment --environment-name "Ebtest-env" --platform-arn "arn:aws:elasticbeanstalk:ap-northeast-2::platform/Python 3.9 running on 64bit Amazon Linux 2023/4.2.0"
# Python 3.8 (기존 버전 원복용)
aws elasticbeanstalk update-environment --environment-name "Ebtest-env" --platform-arn "arn:aws:elasticbeanstalk:ap-northeast-2::platform/Python 3.8 running on 64bit Amazon Linux 2/3.7.4"
# Python 3.12 (어플리케이션 에러나 사용하지 않음)
aws elasticbeanstalk update-environment --environment-name "Ebtest-env" --platform-arn "arn:aws:elasticbeanstalk:ap-northeast-2::platform/Python 3.12 running on 64bit Amazon Linux 2023/4.2.0"
4.
간편한 건 맞지만 이 방법을 사용하지는 않았다. 이유는 다운 타임이 발생하기 때문이다. 약 2분 정도. 짧은 시간이지만 어쨌건 다운 타임이 발생하면 안 되므로 사용할 수 없었다. 그리고 환경의 구성이나 어플리케이션의 규모에 따라 다운 타임은 더 길어질 수 있다.
5.
명령어를 실행하면 자동으로 EC2 서버를 만들고 환경을 새로 올리고 어플리케이션을 올리는 작업을 진행한다. 기존 서버를 업그레이드 하는 게 아니라 새로운 서버를 다시 만드는 것이다. 그 과정에서 서버가 올라오는 시간이 필요하고 다운 타임이 발생한다.
6.
Elastic Beanstalk 운영 시 서버를 이중화 해 놓고, 롤링으로 배포하는 설정이 있다. 한 대에 배포하고 성공하면 다른 한 대에 배포한다. 하지만 이 설정이 되어 있어도 업그레이드 명령어를 입력하면 서버를 동시에 만들기 때문에 어쨌건 다운 타임이 발생한다.