출처 및 참고
제목: "[AWS,Github Action] Elastic Beanstalk에 SpringBoot 이미지 Docker로 배포하기 (1) = 왜 Amazon ECS가 아닌 Elastic Beanstalk을 선택했고, Docker를 사용하려 할까?"
작성자: tistory(EARTH_ROOPRETELCHAM)
작성자 수정일: 2021년11월2일
링크: https://earth-95.tistory.com/119
작성일: 2022년6월11일
EB vs ECS
EB를 이용하여 개발 환경 배포를 진행했었다. 개발 환경을 구축할때 Elastic Beanstalk을 이용한 이유는 짧은 시간 동안 기능 개발과 환경 구축을 한 번에 해야하다 보니, 간편한 방식이 필요했기 때문이다.
이번 포스팅에는 Elastic Container Service와 EB에 대해 간단히 알아보면서 왜 Docker를 사용하는 지금도 EB를 운영 배포에 선택했는지에 대해 이야기 해보자
추가적으로, 개발환경과 동일하게 서버 내 스프링부트를 띄우지 않고 도커 내에 서비스를 띄우게 되었는지에 대해서도 알아보자.
EB
- EB는 웹 어플리케이션 및 서비스를 배포하고 확장하기 위한 AWS 서비스이다.
- EB를 이용하면 필요한 AWS 리소스를 수동으로 실행할 필요 없이, 깃허브 액션과 같은 것을 사용하여 도커 컨테이너 이미지를 업로드할 수 있다.
- EB는 어플리케이션을 지원하기 위한 최신 패치 및 업데이트 제공을 포함한 인프라를 프로비저닝하고 기본 플랫폼을 관리하는 컨테이너 배포를 처리한다
- EB 콘솔을 사용하면 어플리케이션을 단일 단위로 중지 및 시작하여 관리할 수 있다.
- 이 때 , autoscaling 설정값을 통해 필요한 때에 어플리케이션을 자동으로 확장 및 축소할 수 있다.
- 또한, EB를 구축할 때에 ALB를 설정을 해주면 로드 밸런싱 또한 자동으로 처리가 가능해진다.
프로비저닝
사용자의 요구에 맞게 시스템 자원을 할당,배치,배포해두었다가 필요할 때 시스템을 즉시 사용할 수 있는 상태로 미리 준비해두는 것을 말한다.
ECS
- Elastic Container Service는 도커 컨테이너를 지원하는 오케스트레이션 서비스이다
- API를 호출하여 수천,수만개의 도커 컨테이너를 빠르게 시작하고 관리할 수 있다.
- ECS는 가상 머신 클러스터를 관리 및 확장하고, 해당 VM의 컨테이너를 예약하고 VM 가용성을 유지 관리한다.
- ECS는 AWS Fargate를 사용하여 컨테이너를 배포 및 관리하므로 서버를 프로비저닝할 필요가 없다.
- ECS는 장기실행에서 마이크로서비스에 이르기 까지 광범위한 컨테이너화된 어플리케이션을 지원하며 클라우드에서 컨테이너화된 어플리케이션으로 실행할 수 있도록 Legacy Linux & Windows 어플리케이션을 마이그레이션할 수 있다.
- ECS는 자체 Amazon VPC에서 컨테이너를 시작하여 세분화된 보안 제어를 제공하여 VPC 보안 그룹 및 네트워크 ACL을 사용할 수 있도록 한다.
- IAM을 사용하여 컨테이너가 접근할 수 있는 서비스와 리소스를 결정할 수 있다.
- ECS를 사용하면 LB,CloudWatch,ECR 등과 같은 서비스를 기본 통합으로 사용할 수 있다.
AWS Fargate
EB는 언제 사용하면 좋을까?
- AWS나 컨테이너화 개념을 처음 접하는 경우, 또는 Docker를 막 시작하거나 새로운 어플리케이션을 개발하는 경우 EB를 통해 도커 컨테이너를 지원하면 좋다.
- EB는 간단한 인터페이스를 제공하고, 공개 또는 비공개 Registry에서 도커 이미지를 가져올 수 있다.
- Elastic Beanstalk을 사용하면 어플리케이션 확장 및 용량에 대한 제어 권한은 줄어들지만, AWS에 도커 컨테이너를 배포하는 것을 매우 간단하게 진행할 수 있다.
ECS는 언제 사용하면 좋을까?
- EB와 비교하여 ECS는 도커 컨테이너의 어플리케이션 아키텍처 및 오케스트레이션에 대해 더 많은 제어를 제공한다
- 클러스터 노드의 크기와 수를 지정하고 자동 크기 조정을 사용해야 하는지 등을 결정한다
- ECS는 도커 컨테이너를 시작하기 위해 task를 사용한다. Task에는 함께 시작하고 동시에 종료해야 하는 글부을 지정할 수 있다.
- ECS는 스케줄링, CPU 및 메모리 활용에 있어 높은 유연성과 사용자 정의를 제공한다. 또한 ECS는 다른 AWS 서비스와 함께 작동하기 위한 특별한 통합 노력이 필요하지 않다.
- 따라서 ECS는 다른 AWS 서비스와 통합이 필요한 마이크로 서비스를 실행하거나 사용자 지정 또는 관리형 스케쥴러를 사용해 Ec2 온디맨드, 예약 또는 배치 워크로드를 실행해야 할 때 적합하다.
- 추가적으로 레거시 코드를 컨테이너화하고 코드를 다시 작성할 필요 없이 AWS로 마이그레이션하려는 경우에는 ECS를 선택해야 쉽게 마이그레이션이 가능하다.
왜 운영 배포에 EB를 이용하기로 결정했을까?
- 나는 Docker나 AWS에 익숙하지 않기에 EB를 통한 배포를 하는 것이 더 좋다고 생각했다
- 현재 필자의 AWS에 대한 수준을 고려했을 때 ECS를 쓰는것이 오버스펙이라고 생각되어 좀 더 사용하기에 용이한 EB를 선택하게 되었다.
왜 운영 배포에 도커를 이용하기로 결정했을까?
- 도커를 사용하는 이유는 이미지로 현재 버전의 어플리케이션을 만들어두기 때문에 어느 서버에 띄우던 동일한 환경으로 배포가 가능하기 때문이다.
- 만약 EC2에 직접 스프링 부트를 올리게 되면 scaling이 필요할 때에 신규 서버를 구축하여 JAVA 설치 등 스프링부트 실행에 필요한 항목들을 매번 설치해주어야 한다.
- 물론 EB의 경우는 autoscaling 기능을 켜주면 알아서 신규 EC2를 만들고 프로비저닝된 환경을 기준으로 신규 서버에 배포가 가능하다
- 도커 내에 이미지로 만들어 서비스를 하게 되면, 서버 내 자바 설치 등 신규 서버 구성시 세팅 필요한 부분을 신경 쓰지 않고 동일한 환경으로 서비스를 할 수 있다.