코딩 범고래의 해저동굴

ECS + Github action을 위한 여정 (5) ~ ECR의 image를 ECS로 띄워보기 ~ 본문

AWS

ECS + Github action을 위한 여정 (5) ~ ECR의 image를 ECS로 띄워보기 ~

코딩범고래 2023. 4. 24. 14:59

이전글 :

 

ECS + Github action을 위한 여정 (4) ~ ECS에서 사용할 VPC 구성하기 ~

 

ECS + Github action + CodeDeploy를 위한 여정 (4) ~ ECS에서 사용할 VPC 구성하기 ~

이전글: ECS + Github action + CodeDeploy를 위한 여정 (3) ~ EC2에 있는 Docker image 파일을 ECR에 push하기 ~ ECS + Github action + CodeDeploy를 위한 여정 (3) ~ EC2에 있는 Docker image 파일을 ECR에 push하기 ~ 이전 글 : ECS +

coding-orca.tistory.com

 

 

이전에 설정한 VPC 혹은 default VPC와 이전에 구성한 ECR로 ECS 컨테이너를 띄워볼 예정이다.

 

1) 클러스터 만들기

 

 

우선 당연하게도 ECS 콘솔로 진입.

왼쪽 클러스터로 진입한다.

 

 

 

"클러스터 생성" 클릭

 

이름을 정해준 뒤 이전 포스팅에서 만든 VPC를 연결해준다. (이전 포스팅은 최상단에 있다)

만약, default VPC로 하고싶다면 그것으로 해도 무방.

 

인프라의 경우 EC2인스턴스를 사용할 것이므로 

1) EC2인스턴스를 체크해주고 

2) ASG는 새 ASG 생성 클릭,

3) 운영체제는 아무래도 AWS에서 사용하기 쉬운 Amazon Linux2를 선택해준다

4) EC2인스턴스는 원하는 것으로.. 필자는 적절한 용량이라 판단되는 c4.large를 선택했다.(요금발생에 주의)

5) SSH키페어는 직접 EC2로 접속하여 관리가 필요할 경우 필요하므로 

    미리 만들어준 SSH키페어 중 하나를 선택한다.

    만약 없다면 EC2콘솔에서 새로 생성이 가능하다.

6) 용량의 경우 defaultf로 띄울 인스턴스와 최대 인스턴스를 지정하는데

    default는 필요 없으므로 0, 최대는 마법의 숫자 3으로 정해준다

 

 

모니터링과 태그는 따로 설정할 필요 없으므로 바로 "생성" 클릭

 

Run Run!

뭔가 열심히 진행중인데 시간이 꽤 걸리므로 화장실이나 갔다오자.

만약 기다리기 싫다면 Task정도는 만들어도 되므로 왼쪽 메뉴에서 "테스크 정의"로 이동

 

 

완성되고 이동해도 된다.

 

 

2) 테스크 정의 

 

 

왼쪽 메뉴에서 "테스크 정의"를 클릭한다.

 

JSON으로 작성하는 것은 자신이 없기에 새 태스크 정의 생성 클릭

 

test-api라 이름 짓고

이미지 이름을 test

이미지 URI를 ECR에서 복사해서 가져온다

 

위 이미지의 근간이 되는 프로젝트는

 

https://github.com/kokomai/base-api

 

GitHub - kokomai/base-api: basic api project with Spring boot, JWT

basic api project with Spring boot, JWT. Contribute to kokomai/base-api development by creating an account on GitHub.

github.com

깃허브에 올려놨으니 위 링크에서 다운받아서 

 

https://coding-orca.tistory.com/9

 

ECS + Github action + CodeDeploy를 위한 여정 (1) ~ EC2 구성 및 Docker 설치 ~

기존의 모놀로식 환경에서 운영되던 시스템을 AWS에 올려 운영하기 위한 첫걸음 입니다. 우선 Docker image를 ECR에 push하기 위해 EC2구성부터 docker 설치까지 진행해보도록 하겠습니다. 1. 우선 EC2 콘

coding-orca.tistory.com

위의 여정대로 진행하면 된다.

 

 

...

 

계속 구성을 하자면, 위 base-api 프로젝트로 설정했을 경우 

 

 

 

매핑할 포트가 9000번으로 설정되어 있기 때문에 9000번으로 만든다.

만일 해당 컨테이너와 다른 컨테이너가 의존성이 있으면 컨테이너를 추가해야 하지만

단순 API서버 하나만 올릴 것이므로 "다음"클릭

 

1) 해당 컨테이너를 올리기 위해 EC2 인스턴스를 사용할 것이므로 (컴퓨팅을 직접 손봐야 할 필요성이 있을 수 있기에)

운영체제를 선택하고 CPU 와 메모리는 저정도면 충분할 것 같으니 저렇게 설정..

※ 부하가 더 걸리는 컨테이너일 경우에는 CPU와 메모리를 더 올려도 좋으나, 

처음 만든 클러스터(나의 경우엔 C4.large)의 용량을 초과하는 일이 없도록 한다.

 

2) 테스크 역할은 만들어서 사용해도 되지만 default인 ecsTaskExecutionRole을 사용해도 좋다.

 

3) 네트워크 모드는 vpc로 구성한것을 활용하기 위해 awsvpc로..

 

선택 사항들은 default로 놔두고

(모니터링 및 로깅은 상당히 요긴해 보이는데 운영시 활용하면 좋을듯 하다.)

"다음" 클릭

 

확인..

 

확인..

 

전체적으로 확인한 뒤, "생성"클릭

 

이제 이 테스크로 서비스를 만들어 클러스터에서 사용할 수 있게 해야한다.

 

 

3. 서비스 만들기

 

클러스터에 들어와 "서비스" 탭에서 "생성"클릭

 

필자는 ECS cluster에서 띄운 EC2에서 용량(자원)을 가져올 것이므로 

사용자 지정 사용(고급)클릭 후 test-cluster의 이름이 들어간 사항을 선택

 

나머지는 default로 놔둔 뒤 아래로..

 

 

서비스 패밀리에 아까 설정한 task인 test-api를 선택 후

서비스 이름을 test-service로 지정..

서비스 연결 까지 default사항으로 놔둔 뒤 아래로..

 

네트워킹의 경우 이전 포스트에서 만든 test-vpc를 사용한 뒤 서브넷은 모두  선택한다.

보안그룹의 경우 일종의 포트 인바운드 규칙을 설정하는 것인데,

새 보안 그룹을 생성해서 api라 이름 짓고 9000번 포트를 어디서든 접속할 수 있게 허용하도록 한다.

 

Cloud Front에서 연결할 로드밸런서를 설정..!

Application Load Balancer를 사용할 것 이며

test-api-alb로 이름을 붙이고 

default로 설정된 컨테이너를 놔둔다

 

리스너는 9000번에 대한 LB니까 9000번으로 동일하게 맞춰준 뒤

 

target 이름을 설정하고 유예기간은 30초로 설정한다.

 

!! 상태확인의 경우 로드밸런싱을 할 때 반드시 필요하므로 !!
(만약 설정 안하면 서비스가 Creating 상태만 지속되다가 죽어버린다)

어플리케이션에서 HTTP GET 방식의 200 OK를 떨어뜨리는 컨트롤러 하나를 구성하길 바란다

필자는 /healthCheck라는 GetMethod를 구성했으므로 이 url을 적는다.

 

나머지는 default로 놔두고 "생성" 클릭하면 서비스가 생성된다.

 

돌고 돌고 돌고

 

좀 오래걸리니, 화장실을 다녀오거나 물을 떠오도록 하자.

궁금하면 저기에있는 CloudFormation에서 보기를 클릭해서 진행상황을 봐도 된다.

 

 

4. 만들어진 서비스 확인하기

 

 

 

시간이 조금 지나고 Cluster에서 새로고침을 누르면 

 

 

 

"1개 실행 중"이 눈에띈다

해당 클러스터를 들어가주자

 

오오..활성!

만들었던 test-service가 잘 활성화 되어있다

이제 해당 service를 들어가 "구성 및  테스크" 탭에 들어간다

 

우리가 설정한 이미지 URI의 컨테이너 하나가 활성화 되어있다!

 

이제 해당 서버가 잘 작동하는지 봐야한다

 

 

 

 

해당 DNS주소를 복사하고 끝에 :9000번 포트를 붙인 다음 

아까 기재해준 /healthCheck url을 붙여서 엔터..!

 

 

오케이! 땡큐!

성공!

 

다음 포스팅에선 이제 깃허브에 특정 브랜치로 push하면 

자동 maven build -> docker build하여 ECR에 배포한 뒤 ECS에서도 해당 버전으로 

서비스 업데이트를 하는 것 까지 진행해보려 한다.

 

다음 포스팅:

 

ECS + Github action을 위한 여정 (6) ~ Github Action으로 ECS 작업 정의(Task Definition)에 자동 배포하기 ~

 

ECS + Github action을 위한 여정 (6) ~ Github Action으로 ECS 작업 정의(Task Definition)에 자동 배포하기 ~

이전글: ECS + Github action을 위한 여정 (5) ~ ECR의 image를 ECS로 띄워보기 ~ ECS + Github action + CodeDeploy를 위한 여정 (5) ~ ECR의 image를 ECS로 띄워보기 ~ 이전글 : ECS + Github action + CodeDeploy를 위한 여정 (4) ~ EC

coding-orca.tistory.com

 

Comments