개요
AWS 관리형 서비스(RDS, EKS 등)는 정기적인 버전 업그레이드가 필요합니다. 이 문서는 개발 환경부터 단계적으로 운영 환경까지 안전하게 버전 업그레이드를 진행하기 위한 전략과 가이드라인을 제공합니다.
AWS 버전 업그레이드의 이해
버전 업그레이드가 발생하는 이유
AWS 관리형 서비스는 다음과 같은 이유로 정기적인 버전 업그레이드가 발생합니다:
- 보안 강화: 새로운 보안 취약점에 대응하기 위한 패치 적용
- 버그 수정: 소프트웨어의 안정성을 향상시키는 다양한 버그 수정
- 성능 개선: 엔진의 성능 최적화 및 리소스 활용도 향상
- 신기능 도입: 새로운 기능과 향상된 기능 지원
- 업스트림 종속성: 기반이 되는 오픈소스 프로젝트(MySQL, Kubernetes 등)의 지원 주기 준수
버전 지원 주기 이해하기
AWS는 대부분의 관리형 서비스에 대해 다음과 같은 지원 주기를 제공합니다:
표준 지원: 버전이 출시된 후 일정 기간 동안 정기적인 패치 및 업데이트 제공
- 예: RDS MySQL 메이저 버전은 일반적으로 출시 후 3-5년 동안 표준 지원
- 예: EKS 버전은 일반적으로 출시 후 약 14개월 동안 표준 지원
확장 지원: 표준 지원 종료 후 추가 비용을 지불하면 제한된 지원을 계속 받을 수 있음
- 예: RDS 인스턴스 비용의 약 5-20% 추가 요금이 발생할 수 있음
- 예: EKS는 확장 지원 프로그램을 통해 최대 12개월 추가 지원 가능
지원 종료: 더 이상 어떠한 패치나 업데이트도 제공되지 않음
업그레이드를 하지 않을 경우의 결과
버전 업그레이드를 미루거나 무시할 경우 다음과 같은 결과가 발생할 수 있습니다:
- 추가 비용 발생: 표준 지원이 종료된 버전을 계속 사용하려면 확장 지원 비용이 발생
- 보안 위험 증가: 보안 패치가 제공되지 않아 알려진 취약점에 지속적으로 노출
- 규정 준수 문제: 여러 산업 규제(PCI DSS, HIPAA 등)는 지원 종료된 소프트웨어 사용을 제한
- 성능 저하: 새로운 최적화와 성능 개선사항을 활용할 수 없음
- 기술 부채 증가: 앞으로의 업그레이드가 더 복잡하고 위험해짐
- 강제 업그레이드: 결국 AWS는 지원 종료된 버전을 강제로 업그레이드하게 되며, 이 경우 계획되지 않은 다운타임이 발생할 수 있음
단계별 업그레이드 계획
1단계: 현황 분석 및 계획 수립
인벤토리 확인: AWS 리소스 인벤토리 검토 및 업그레이드가 필요한 서비스 식별
AWS 콘솔에서 확인 방법:
- RDS 인스턴스:
- AWS 콘솔에 로그인하여 RDS 서비스로 이동
- 왼쪽 탐색 창에서 "데이터베이스"를 선택
- 각 데이터베이스 인스턴스의 "엔진" 및 "버전" 열에서 현재 버전 확인
- "구성" 탭에서 상세 버전 정보 확인 가능
- EKS 클러스터:
- AWS 콘솔에 로그인하여 EKS 서비스로 이동
- 왼쪽 탐색 창에서 "클러스터"를 선택
- 각 클러스터의 "Kubernetes 버전" 열에서 현재 버전 확인
- 클러스터를 선택하여 세부 정보 페이지에서 노드 그룹의 버전도 확인 가능
- RDS 인스턴스:
CLI를 통한 확인 방법:
- RDS:
aws rds describe-db-instances --query 'DBInstances[].{ID:DBInstanceIdentifier,Engine:Engine,Version:EngineVersion}'
- EKS:
aws eks list-clusters
후 각 클러스터의 버전 확인
- RDS:
애플리케이션 매핑: 각 리소스에 의존하는 애플리케이션과 서비스 매핑
- 데이터베이스에 연결된 모든 애플리케이션 목록 작성
- 클러스터에 배포된 모든 워크로드 목록 작성
호환성 검토: 새 버전과의 호환성 문제 식별
- RDS: SQL 쿼리, 저장 프로시저, 트리거, 애플리케이션 코드 등
- EKS: API 변경사항, 디프리케이션, 워크로드 호환성 등
업그레이드 윈도우 설정: 각 환경별 업그레이드 일정 수립
- 트래픽이 적은 시간대 선택 (예: 주말 또는 업무 외 시간)
- 충분한 롤백 시간 확보
2단계: 개발 환경 업그레이드
테스트 인스턴스 생성:
- 현재 운영 중인 서비스의 복제본 생성
- 업그레이드 전 성능 지표 측정 (기준점 설정)
예시(RDS):
aws rds create-db-snapshot --db-instance-identifier prod-mysql --db-snapshot-identifier pre-upgrade-snapshot aws rds restore-db-instance-from-db-snapshot --db-instance-identifier dev-mysql-new --db-snapshot-identifier pre-upgrade-snapshot
개발 환경 업그레이드 실행:
- 자동 마이너 버전 업그레이드 활성화 또는 수동 업그레이드 진행
- 업그레이드 프로세스 시간 측정 및 문제점 기록
예시(EKS):
aws eks update-cluster-version --name dev-cluster --kubernetes-version 1.XX
업그레이드 후 검증:
- 연결 및 기능 테스트
- 성능 테스트 및 비교 평가
- 로그 분석하여 잠재적 문제 식별
3단계: QA/테스트 환경 업그레이드
테스트 계획 수립:
- 개발 환경에서 발견된 문제점 기반으로 테스트 케이스 보완
- 부하 테스트 시나리오 준비
테스트 환경 업그레이드:
- 개발 환경에서 검증된 방식으로 업그레이드 실행
- 필요시 Blue/Green 배포 방식 테스트
종합 테스트 실행:
- 통합 테스트 수행
- 부하 테스트를 통한 성능 검증
- 장애 복구 시나리오 테스트
4단계: 스테이징 환경 업그레이드
사전 준비:
- 운영과 유사한 환경에서 최종 검증
- 운영 업그레이드 리허설 진행
- 롤백 절차 최종 점검
스테이징 환경 업그레이드:
- 예정된 유지보수 기간 동안 업그레이드 진행
- Blue/Green 배포 방식 최종 검증
최종 검증:
- 전체 애플리케이션 흐름 테스트
- 성능 지표 최종 평가
- 모니터링 시스템 점검
5단계: 운영 환경 업그레이드
사전 커뮤니케이션:
- 업그레이드 일정 및 예상 다운타임 관련 이해관계자에게 공지
- 비상 연락망 점검
백업 및 안전망 구축:
- 최종 백업 또는 스냅샷 생성
- 롤백 계획 준비
- 모니터링 강화
업그레이드 실행:
- 트래픽이 적은 시간대 선택
- 다운타임 최소화 방안 적용:
- RDS: Blue/Green 배포 방식 활용
- EKS: 노드 그룹 순차적 업그레이드
업그레이드 후 모니터링:
- 24-48시간 동안 집중 모니터링
- 성능 및 오류 로그 분석
- 필요시 신속한 문제 해결
서비스별 업그레이드 방법
RDS 업그레이드 방법
옵션 1: 자동 마이너 버전 업그레이드
AWS 콘솔에서 설정하는 방법:
- AWS 콘솔에 로그인하여 RDS 서비스로 이동
- 왼쪽 탐색 창에서 "데이터베이스"를 선택
- 업그레이드할 DB 인스턴스를 선택하고 "수정" 버튼 클릭
- "추가 구성" 섹션에서 "자동 마이너 버전 업그레이드 사용" 옵션 체크
- "계속" 버튼을 클릭하고 변경 사항 검토 후 "DB 인스턴스 수정" 클릭
CLI를 통한 설정:
aws rds modify-db-instance --db-instance-identifier mydb --auto-minor-version-upgrade
- 장점: 간편함
- 단점: 업그레이드 시점 예측이 어려움
옵션 2: 수동 업그레이드
AWS 콘솔에서 수행하는 방법:
- AWS 콘솔에 로그인하여 RDS 서비스로 이동
- 왼쪽 탐색 창에서 "데이터베이스"를 선택
- 업그레이드할 DB 인스턴스를 선택하고 "수정" 버튼 클릭
- "DB 엔진 버전" 드롭다운에서 원하는 새 버전 선택
- "수정 일정" 섹션에서 "즉시 적용" 또는 "다음 유지 관리 기간에 적용" 선택
- "계속" 버튼을 클릭하고 변경 사항 검토 후 "DB 인스턴스 수정" 클릭
CLI를 통한 수행:
aws rds modify-db-instance --db-instance-identifier mydb --engine-version new-version --apply-immediately
- 장점: 정확한 시점 제어 가능
- 단점: 직접 작업 필요
옵션 3: Blue/Green 배포 (권장)
AWS 콘솔에서 수행하는 방법:
- AWS 콘솔에 로그인하여 RDS 서비스로 이동
- 왼쪽 탐색 창에서 "데이터베이스"를 선택
- 업그레이드할 DB 인스턴스를 선택
- "작업" 메뉴에서 "블루/그린 배포 생성" 선택
- 배포 설정 구성:
- 블루/그린 배포 식별자 입력
- "대상 엔진 버전"에서 업그레이드할 버전 선택
- "블루/그린 배포 생성" 클릭
- 배포가 완료되면 "전환" 버튼을 클릭하여 트래픽을 새 인스턴스로 전환
CLI를 통한 수행:
# 블루/그린 배포 생성 aws rds create-blue-green-deployment --blue-green-deployment-name my-bgd --source db-instance-identifier mydb --target-engine-version new-version
# 전환 수행 aws rds switchover-blue-green-deployment --blue-green-deployment-identifier bgd-id
- 장점: 안전하고 다운타임 최소화, 롤백 용이
- 단점: 추가 비용 발생
EKS 업그레이드 방법
컨트롤 플레인 업그레이드
AWS 콘솔에서 수행하는 방법:
- AWS 콘솔에 로그인하여 EKS 서비스로 이동
- 왼쪽 탐색 창에서 "클러스터"를 선택
- 업그레이드할 클러스터를 선택
- "클러스터 세부 정보" 탭에서 현재 Kubernetes 버전 확인
- "클러스터 버전 업데이트" 버튼 클릭
- 드롭다운 메뉴에서 업그레이드할 Kubernetes 버전 선택
- "업데이트" 버튼 클릭하여 컨트롤 플레인 업그레이드 시작
CLI를 통한 수행:
aws eks update-cluster-version --name my-cluster --kubernetes-version 1.XX
노드 그룹 업그레이드
AWS 콘솔에서 수행하는 방법:
- AWS 콘솔에 로그인하여 EKS 서비스로 이동
- 왼쪽 탐색 창에서 "클러스터"를 선택
- 해당 클러스터를 선택한 다음 "컴퓨팅" 탭 선택
- "노드 그룹" 섹션에서 새 노드 그룹 생성:
- "노드 그룹 추가" 버튼 클릭
- 노드 그룹 이름 및 구성 설정
- "Kubernetes 버전"에서 최신 버전 선택
- 나머지 설정 구성 후 "생성" 클릭
- 워크로드 마이그레이션:
- Kubernetes 도구를 사용하여 노드에 cordon 및 drain 적용
- 이전 노드 그룹 삭제:
- 이전 노드 그룹을 선택하고 "삭제" 버튼 클릭
- 확인 메시지에 노드 그룹 이름을 입력하고 "삭제" 클릭
CLI를 통한 수행:
- 새로운 노드 그룹 생성:
aws eks create-nodegroup --cluster-name my-cluster --nodegroup-name new-nodes --kubernetes-version 1.XX
- 워크로드 마이그레이션 (Kubernetes cordon/drain 사용):
# kubectl 도구 사용 kubectl cordon node-name kubectl drain node-name --ignore-daemonsets
- 이전 노드 그룹 삭제:
aws eks delete-nodegroup --cluster-name my-cluster --nodegroup-name old-nodes
지속적인 버전 관리 전략
1. 버전 수명 주기 모니터링 시스템 구축
AWS 콘솔을 통한 모니터링 방법:
AWS Health Dashboard 활용:
- AWS 콘솔에 로그인
- 상단 검색창에 "AWS Health" 입력하여 서비스 접근
- "서비스 상태" 및 "내 계정 상태" 탭에서 서비스 관련 알림 확인
- "예정된 변경 사항" 섹션에서 버전 업그레이드 알림 확인
AWS 알림 센터 설정:
- AWS 콘솔의 상단 메뉴에서 종 모양 아이콘(알림) 클릭
- "기본 설정" 선택하여 알림 설정 구성
- "AWS Health" 알림을 받도록 설정
버전 지원 정보 확인:
- 각 서비스 콘솔(RDS, EKS 등)에서 "공지사항" 또는 "최신 정보" 섹션 확인
- AWS 공식 문서에서 해당 서비스의 버전 지원 정책 정기적으로 검토
CLI/API를 통한 모니터링:
- AWS Health API를 통한 알림 자동화:
aws health describe-events --filter 'eventTypeCategories=scheduledChange'
- 이메일 또는 Slack 알림을 위한 AWS EventBridge 규칙 설정
- 버전 업그레이드를 연간 IT 운영 계획에 포함
2. 정기적인 업그레이드 일정 수립
- 분기별 또는 반기별로 정기적인 마이너 버전 업그레이드 일정 수립
- 메이저 버전 업그레이드는 연간 계획에 포함
- 개발-테스트-스테이징-운영 환경으로 순차적 적용하는 패턴 정립
3. 자동화된 테스트 환경 구축
- 업그레이드 전후 성능 및 기능을 자동으로 검증하는 테스트 스위트 개발
- CI/CD 파이프라인에 호환성 테스트 포함
- 데이터베이스 스키마와 애플리케이션 코드의 버전 관리 강화
4. 기술 부채 관리
- 레거시 코드와 비호환성 이슈를 정기적으로 식별하고 해결
- 서비스 종속적인 코드를 점진적으로 리팩토링
- 버전 간 호환성 문제를 사전에 발견하는 프로세스 구축
5. 긴급 상황 대비 계획
- 예상치 못한 호환성 문제 발생 시 롤백 전략 마련
- 버전 업그레이드 실패에 대비한 비상 대응 팀 구성
- 주요 시스템의 다운타임이 비즈니스에 미치는 영향 평가 및 최소화 방안 마련
결론
AWS 관리형 서비스의 버전 업그레이드는 보안, 성능 및 기능 향상을 위해 필수적인 작업입니다. 개발 환경부터 단계적으로 진행하여 운영 환경의 위험을 최소화하고, 적절한 배포 전략을 통해 다운타임을 효과적으로 관리할 수 있습니다.
버전 업그레이드를 일회성 이벤트가 아닌 지속적인 운영 활동으로 접근하면 장기적으로 안정적인 클라우드 인프라를 유지할 수 있습니다. 클라우드 환경에서는 변화가 상수입니다. 업그레이드를 비용 지출이 아닌 비즈니스 연속성과 보안을 위한 투자로 인식하고, 체계적인 계획과 실행을 통해 관리해 나가는 것이 중요합니다.
클라우드로 서비스가 전환 되면서 운영의 편의성이 좋아졌지만 이러한 운영상의 방법론이나 절차들을 반드시 숙지 하셔야 안정적으로 서비스를 운영 하실 수 있습니다.
운영자가 없는 회사라면 본업에 집중하고 이러한 인프라에 대한 운영을 베스핀글로벌의 매니지드 서비스를 검토 해보시는 것도 좋은 방법이 될 수 있습니다.