
사이드 프로젝트에 참가하게 되어 기존의 EC2
를 사용한 방법대신 ECS
를 사용한 배포를 진행했다.
우선, Amazon ECS on Fargate가 뭘까?
AWS Fargate는 EC2 인스턴스와 달리 서버리스 방식으로 Amazon ECS에서 컨테이너를
실행할 수 있도록 도와주는 서비스이다.
Amazon ECS on Fargate를 사용하면 컨테이너를 실행하기 위해 가상 머신 서버의 클러스터를
프로비저닝
하거나 구성하고, 관리할 필요가 없다.
또한, 서버 사용량을 고려하여 유형을 선택하거나, 클러스터를 조정해야 할 시점을 고민하거나 클러스터 패킹을
최적화 할 필요가 없어지는 AWS 컨테이너 생성 및 관리 서비스이다.
무중단 배포(블루/그린, 롤링)도 알아서 해주기에 굉장히 편리하다는 장점이 있다.
1. ECR 생성
Amazon ECR -> 프라이빗 레지스트리 -> 리포지토리 -> 리포지토리 생성


이름은 적절히 설정해서 생성을 하면 되는데 만약 이미지를 기존에 만든것을 사용하지 않는다면,
위에서 작성한 이름이 곧 이미지 이름이 되게 된다.
(필자의 경우는 그렇게 했다.)
그 후, 해당 ECR 서비스를 이용하기 위한 ECR 권한을 갖는 IAM 권한을 생성해주어야 한다.(aws cli
사용을 위함)
IAM -> 권한 설정을 해주자

그 후, 해당 권한을 갖는 액세스 키와 시크릿키를 IAM에서 마찬가지로 생성해주도록 하자.
해당 액세스 키를 이용하여 우리는 이제 ECR에 접근할 수 있다.
이때, 로컬에서 해당 작업을 하려면 aws-cli
를 설치하고 로그인 해야 한다.
따라서, 아래 명령어를 따라 치자.
# awscli 설치
brew install awscli
# 설치 확인
aws --version
$ aws configure
$ aws configure --profile <PROFILE NAME>
AWS Access Key ID [None] : {발급받은 IAM의 Access Key ID}
AWS Secret Access Key [None] : {발급받은 IAM의 Secret Access Key}
Default region name [None] : {리전}
Default output format [None] :
만약, 자신의 자격 증명 프로파일을 확인하려면 아래 명령어로 확인하면 된다.
cd $HOME/.aws
vi credentials
[default]
aws_access_key_id={ }
aws_secret_access_key={ }
[user1]
aws_access_key_id={ }
aws_secret_access_key={ }
Amazon ECR -> 프라이빗 레지스트리 -> 리포지토리 -> {생성한 리포지토리 } -> 푸시 명령 보기로
해당 명령어를 수행해주자.

이렇게 하면 이미지가 정상적으로 생성이 될텐데 이때 이미지 URI
를 복사하자(ECS에서 사용)
2. ECS 클러스터 생성
ECR 설정을 완료했다면 이젠 ECS 클러스터를 생성할 차례이다.
Amazon Elastic Container Service -> 클러스터 생성

필자는 Fargate로 설정했다.
그 후, ECS의 태스크를 정의해주자.


태스크 역할도 지정해주는 것이 좋은데 이것은 컨테이너가 AWS 서비스에 API 요청을 할 수 있게 도와주기 때문이다.
(필요하다면 IAM에 해당 권한도 추가해주자.)
이때, CPU는 0.25에 램은 500MB로 설정했는데, 이 정도면 무중단 배포시 조금 느리지만, 충분하다.

컨테이너는 본인에 맞게 적절하게 설정하면 되는데 나는 SpringBoot 8080 포트를 사용하기에 8080 포트를 열어주었다.
그 후, 해당 태스크에 접근하여 서비스를 생성해주어야 한다.

서비스 생성

여기서 중요한 점은 용량 고급자인데 용량 공급자에는 FARGATE
와 FARGATE_SPOT
이 존재한다.
둘다 서버리스 방식이지만, SPOT
의 경우 비용이 좀 더 절약된다고 한다.
(대규모 서비스가 아닌 경우 고려해도 좋을 것 같다.)

그 후, 원하는 태스크 수(컨테이너 갯수로 생각하면 될 거 같다.)
그리고 최소 실행 작업 비율은 최대 실행 작업 비율보다 2배로 해준다.
알아서 무중단 배포를 진행해준다.
그 후, 네트워킹과 관련해서 필자는 VPC는 기본값으로 설정해주었고 Pvt를 제외한 모든 서브넷은 선택했다.
그리고 보안 그룹도 기본 보안 그룹으로 지정해주었다.

그 후, 서비스에서 로드밸런서를 지정해주어야 하는데 관련된 부분은
- Route53
- ALB
- 대상 그룹
- ICM 인증서
과 관련이 있기 때문에 다음 포스팅에서 다루도록 한다.
'DevOps > AWS' 카테고리의 다른 글
[AWS] ECR + ECS + ALB + Route53 + Spring + Github Actions - 3 (0) | 2024.08.25 |
---|---|
[AWS] ECR + ECS + ALB + Route53 + Spring + Github Actions - 2 (0) | 2024.08.23 |