EC2 부팅 시간 단축하기
(depot.dev)- EC2 인스턴스의 부팅 시간을 40초에서 5초로 줄이는 것이 가능함
- 이는 특정 작업을 처리하기 위해 새로운 EC2 인스턴스가 필요한 경우 매우 중요
부팅 시간이 오래 걸리는 이유
- 새로운 EC2 인스턴스를 요청할 때 AWS는 여러 작업을 수행함:
- 선택한 AMI에서 루트 EBS 볼륨 생성
- 인스턴스에 사설 IP 주소 할당
- 인스턴스를 위한 호스트 선택
- 실제로 머신 부팅
- 하드웨어가 켜진 후에도 부트로더, 커널, 사용자 공간 프로세스가 시작되어야 함.
문제 회피 방법
- 대기 중인 컴퓨팅 풀을 운영하여 빌드 요청을 이미 실행 중인 EC2 인스턴스로 라우팅함.
- 그러나 모든 작업에 대해 경제적으로 실행 가능하지 않음.
- GitHub Actions 러너의 경우 각 작업이 전용 EC2 인스턴스로 라우팅됨.
- 50개의 병렬 작업을 처리하기 위해 50개의 EC2 인스턴스를 온라인 상태로 유지하는 것은 비현실적임.
더 빠른 부팅 시간
- 특정 작업에 대해 불필요한 작업을 하지 않는 것이 항상 더 빠름.
- EC2 인스턴스 생성, 부팅 및 애플리케이션 시작의 각 단계를 체계적으로 최적화함.
- 인스턴스를 한 번 부팅하고, 종료한 후 필요할 때 다시 부팅하는 방법을 사용함.
EBS 루트 볼륨 스트리밍
- EBS 루트 볼륨 준비는 EC2 인스턴스 부팅 시간과 애플리케이션 성능에 큰 영향을 미침.
- AMI에서 EBS 볼륨을 생성할 때 데이터 블록이 처음으로 액세스될 때 S3에서 가져와야 함.
- AWS는 모든 데이터 블록을 미리 로드하는 방법을 권장함.
인스턴스 한 번 부팅하기
- EBS 지원 인스턴스를 중지한 후 다시 시작할 수 있음.
- 중지된 인스턴스는 구성만 유지되며, 루트 EBS 볼륨에 대한 비용만 지불함.
- 인스턴스를 한 번 부팅하여 초기화 작업을 수행한 후 중지하면 "워밍된" EBS 루트 볼륨이 생성됨.
오토스케일링 워밍 풀
- AWS는 EC2 오토스케일링을 위한 워밍 풀을 제공함.
- 그러나 오토스케일링 그룹은 요청에 반응하는 데 시간이 걸림.
- 최상의 성능을 위해 LaunchInstances 및 StartInstances API 호출을 사용하여 직접 EC2 인스턴스를 시작함.
인스턴스 크기 조정
- 워밍된 인스턴스의 유형을 변경하여 부팅 시간을 최적화함.
- 초기화 작업에는 저렴한 인스턴스 유형을 사용하고, 실제 작업 시 더 높은 성능의 인스턴스 유형으로 변경함.
전체 흐름
- GitHub Actions 러너 인스턴스는 다음과 같은 흐름을 거침:
- t3.large 인스턴스로 생성
- 대상 VPC에 사설 IP 주소 할당
- 커널 및 사용자 공간 프로세스가 한 번 시작됨
- 인스턴스 중지
- 작업 요청이 도착하면 인스턴스 유형을 m7a로 업데이트하고 시작
- m7a 인스턴스 용량이 없으면 백업 유형으로 업데이트하고 다시 시작
- 이 흐름으로 작업을 위한 인스턴스 준비 시간이 40초에서 5초로 단축됨.
댓글과 토론
Hacker News 의견
요약
- 부팅 시간: 자동 확장 성공의 핵심 요소로, 부팅 시간이 짧을수록 예측 창이 작아져 예측 정확도가 높아짐. 비용 절감을 위해 EBS 볼륨을 미리 준비하는 것이 합리적일 수 있음.
- 아마존의 최적화: 아마존은 Firecracker와 같은 기술로 초고속 부팅을 구현했으며, EC2에서도 유사한 기능을 제공할 가능성이 있음.
- 불변 설정: 불변/원자적 설정을 통해 EBS 볼륨을 공유하고, 최소 부팅 AMI를 사용해 최적화할 수 있음.
- 부팅 시간 측정: EC2 인스턴스 부팅 시간이 이중 모드로 나타나며, 15-20초 또는 80초로 분포됨. 원인 파악 필요.
- GitHub 액션: GitHub 액션 러너의 부팅 최적화에도 불구하고, 작업 전달 시간이 길어져 최적화 필요.
- AWS와 비교: AWS와 다른 클라우드 제공업체의 부팅 시간 비교. Hetzner는 몇 초 만에 인스턴스를 생성함.
- EC2 자동 확장기: EC2 자동 확장기의 한계와 개선 필요성 언급. AWS 제공 자동 확장기는 느리고 제한적임.
- EBS 사용 이유: EBS는 내구성을 위해 비용과 성능을 희생함. 네트워크 연결된 볼륨으로 느림. 최소한의 Linux 설치와 빠른 로컬 스토리지 사용이 더 적합함.
- EBS의 Copy-On-Write 지원 부족: EBS는 Copy-On-Write를 지원하지 않으며, 스냅샷이 S3에 저장되어 IOPS 할당이 지연됨.
- 온프레미스 하드웨어로 이동: Depot은 온프레미스 하드웨어로 이동해 성능을 최적화하고 비용을 절감할 수 있음. 고객 CI 작업을 직접 하이퍼바이저에서 부팅하는 것이 더 나은 접근법일 수 있음.