지금까지 ec2 인스턴스 하나만 배포하여 사용하고 있었다.
생각보다 꽤나 잘버티고 있지만 저번에 동시에 엄청난 요청을 받아들이면서 서버가 매우 느려진 시기가 있었다.
지금은 그정도는 아니지만 나름 여유가 있을때 ecs 로 바꾸면서 오토스케일링 및 롤링업데이트도 적용하려고 한다.
기존에는 ecr 에 이미지를 올리고 ec2 에서 그 이미지를 pull 땡겨와서 배포를 진행했다.
굳이 eks 까지 쓸이유는 없다고 판단해서 기존 배포를 ecs 배포로 마이그레이션 하려고 한다.
1. EC2 vs Fargate
제일 먼저 맞닥뜨린 고민은 ecs에서 launch type인 ec2와 fargate의 선택이다.
나는 ecs뿐만 아니라 서버리스의 환경을 운영해본적은 없고 ec2에 훨씬 익숙하다.
예전이라면 주저없이 ec2를 사용했을것이다. 더 싸고 익숙하니까.
하지만 지금은 인프라에 많은 리소스를 쏟아붓고 싶지 않고 좀 더 비즈니스 쪽으로 집중하고 싶었다.
그리고 확장성을 고려한다면 ec2보다 fargate가 유리하다고 생각했다.
현재는 하나의 서버를 돌리지만 부하가 되는 몇몇 도메인을 분리해야겠다는 생각이 있기 때문이다.
msa 까진 아니더라도 여러 도메인의 서버가 늘어날수 있는 상황이기 때문이다.
이것저것 찾아보다가 fargate로 굳히게된 글이 있었다.
"ecs 비용이 백만원 넘어가면 이미 회사는 돈이 넘쳐날것이다."
이 글을 보고 고민이 확신으로 바뀌게 되었다.
비용은 Compute Savings Plan, AWS fargate spot 등을 이용하여 최대한 효율적으로 내보려고 한다.
추가로 최근에 fargate 에서 ec2 인스턴스를 사용할수 있도록 서비스를 내놓았다고 하는데 서울지역을 지원하지 않기 때문에 패스했다. 서울지역까지 추가된다면 충분히 고려할만한 조건이다. 비용적으로도 관리적으로도 ec2가 훨씬 나에게 익숙하기 때문이다.
2. ecs 세팅
아래는 미래의 까먹을 나를 위해 정리한 순서.
여기 참고해서 구성했다.
(1) 클러스터 생성
fargate생성하고 클러스터 생성했다.
(2) ALB 구성
target group 과 alb 를 설정해준다.
타겟그룹에선 ip로 만들고 ec2 안잡아줘도 된다.
alb 에서 http:80 포트를 target group 으로 설정
(3) 태스크 정의
새 태스크 생성
태스크 역할에 ecsTaskExecutionRole 부여
(4) 서비스 구성
컴퓨팅 옵션 - 시작 유형으로 선택
배포옵션 - 디폴트가 롤링 업데이트로 되어있음
3. 구성하는데 이슈
(1) 환경변수 이슈
기존 환경변수는 key value 값이 아닌 yaml 파일형식으로 관리하고 있었음.
하지만 ecs 에서 제공하는 형식에 따르기 위해 key value 형식으로 바꿔서 주입해주는것으로 결정하고 바꿈
(2) inbound 이슈
첫번째는 rds 와의 연결 이슈가 있었다.
ecs service 에서 rds 와 연결하는 과정에서 rds 의 security group 이슈가 있음.
ecs 에서 사용하고 있는 security group 을 인바운드로 허용해줌으로 트래픽 허용
두번째는 alb 와 ecs 사이에서의 인바운드 이슈이다.
alb 와 ecs 서비스에서 각각 다른 security group 을 사용했는데
ecs 에서 alb 의 트래픽을 허용하고 있지 않았다.
이것도 마찬가지로 alb 의 security group 을 ecs 에서 허용해주는거로 설정했다.
맨날 ip 로만 inbound를 설정해오다가 security group 자체를 인바운드 설정으로 추가할 수 있다는 사실을 처음 알게 되었다. 앞으로도 많이 써먹을것 같다. 그만큼 security 관리도 해야하겠지만..
'개발 > AWS' 카테고리의 다른 글
| [AWS] aws 서버에 ssh 로 깃설정하기 (ubuntu 22.04) (0) | 2024.01.11 |
|---|---|
| [AWS] AMI로 EC2 인스턴스 공장 만들기 (0) | 2023.06.13 |
