배경
우리 회사에서는 AWS를 사용하여 서비스를 운영하고 있다. API 서버는 Node.js를 플랫폼으로 하여 ElasticBeanstalk 을 사용하고 있는데, 2025년 7월에 현재 사용중인 Node.js 18 버전이 지원 종료되어, 22 버전으로 업그레이드하였다.
요약
운영 중인 서비스에 영향 없이 버전을 업그레이드해야 했다. Route53을 활용하여 RDS 의 블루/그린 배포와 유사한 방법으로 진행할 수 있었다.
작업 순서
1. .nvmrc와 관련 의존성 업그레이드를 위한 package.json과 package-lock.json 수정
2. Elastic Beanstalk - 해당 애플리케이션에서 Node.js v22 플랫폼의 환경 신규 생성
3. 서버와 연결된 데이터베이스 보안그룹의 인바운드 규칙에 신규 환경의 EC2 보안그룹 추가
4. 변경사항 배포
4-1. 이 단계 이전에 CodePipeline 배포 단계의 타겟 환경을 신규 환경으로 변경하였다.
5. 신규 환경의 헬스체크, API 호출 테스트
6. Route53 에서 서버 도메인의 환경을 신규 환경으로 변경
7. 모니터링
7-1. 서비스 접속하여 동작을 확인 및 기존 인스턴스 액세스 로그가 더 이상 없는 것을 확인했다.
8. 기존 환경 제거(Terminate)
기타 사항, 회고
환경의 구성(Configuration) 중 인스턴스 타입(예: t3micro) 을 실수로 기존 환경과 다르게 생성하여, 6번 작업 이후에 추가로 수정 하는 과정에서 또한 서버 다운타임이 발생하지 않도록 구성 Update, Monitoring and logging 하위의 배포 전략을 RollingWithAdditionalBatch로 설정하였다.(이 때, Batch 크기는 Instance Traffic and Scaling 하위의 Capacity 의 최소 인스턴스 보다 작거나 같아야 한다.) 이렇게 설정하면 인스턴스가 추가로 생성된 후 업데이트되고, 기존 인스턴스가 제거되어 다운타임 없이 인스턴스 타입 업데이트가 가능하며, 이 과정은 Elastic Beankstalk 콘솔의 Event 탭에서 확인할 수 있다.
'배운 것들 > AWS' 카테고리의 다른 글
| AWS SAA-C03 준비 기록 (2) | 2025.12.04 |
|---|---|
| Firecracker 살펴보기 (0) | 2025.05.06 |
| Lambda@Edge 를 이용한 대용량 이미지 리사이즈 (0) | 2025.03.18 |
| Online DDL을 사용하지 않고 테이블 락 없이 스키마 변경하기 (3) | 2025.03.18 |
| IAM 역할을 이용하여 AWS(Amazon Web Services) 의 서비스를 연동하기 (3) | 2024.12.22 |