진짜 개발자
본문 바로가기

AWS/Computing

AWS - ECS Fargate를 이용한 서버리스 아키텍쳐 구축

728x90

ECS Fargate를 이용한 서버리스 아키텍쳐 구축

- ECS의 Fargate는 서버(EC2 Instance)를 관리할 필요없이 컨테이너를 실행할 수 있도록 돕는 컴퓨팅 엔진이다

  이를 이용해 서버리스 아키텍쳐를 구축한다


1. Fargate Cluster 생성

1) ECS 서비스 좌측의 클러스터 탭을클릭한 뒤 클러스터 생성을 누른다


2) AWS Fargate을 제공하는 네트워킹 전용을 선택


3) 원하는 클러스터 이름 입력후 생성을 클릭(DemoCluster)


2. Repository 생성

- docker hub의 repository를 그대로 사용할 수 있지만

  사내의 사적인 repository 구성시 사용할 수 있으며 네트워크 지연시간을 줄일 수 있다.


리포지토리 이름 입력 후 생성 버튼 클릭



3. aws cli 를 이용해 repository에 이미지 업로드

1. awscli 구성 

- https://galid1.tistory.com/444


2. 명령어를 이용해 repository에 업로드

1) docker repository 생성



2) repository 생성 후 설정

- docker repository 를 생성한뒤 나타나는 메시지의 우측 상단의 "푸시 명령 보기"를 클릭한다


- aws에 생성한 repository에 접근할 수 있는 로그인 방법을 출력하기 위해 아래의 명령어를 입력한다


- 입력 후 나타나는 전체 메시지를 복사하여 입력하면 aws repository에 로그인이 된다


- 생성한 repository로 업로드하기 위해 설명에 나타나는 대로 tag를 변경 (태그에 꼭 생성한 repository를 가리키도록 해야함)

  또한 아래 그림의 앞쪽의 빨간 네모칸에는 자신이 다운로드한 이미지를 지정하도록 한다



4. 작업 정의

- 컨테이너의 개수, 컨테이너가 사용할 리소스 , 컨테이너간 연결방식, 컨테이너가 사용할 호스트 포트 등의 정보를 기입

- 사용될 컨테이너를 추가 및 정의


1) 작업정의 클릭 후 새 작업 정의 생성 클릭


2) 관리형 인프라 Fargate 선택


3) 적업의 정의

작업 역할 : 컨테이너가 aws 기능 이용시 이용될 역할(IAM ROLE)


4) 작업 실행 IAM 역할

- 컨테이너 이미지를 가져오거나 CloudWatch에 로그게시시 사용될 역할

5) 작업 크기

- 컨테이너가 사용할 고정된 자원의 크기


6) 작업에 사용될 컨테이너를 추가하기 위해 컨테이너 추가를 클릭

      

*컨테이너에 사용될 이미지는 Repository 생성 후 업로드한 이미지를 사용한다  

ECS repository 의 업로드했던 이미지의 URI를 복사한다 


다시 컨테이너 설정으로 돌아와 이미지 에는 복사한 이미지의 URI를 기입한다

포트 매핑에는 컨테이너가 오픈할 포트를 입력한다(nginx 가 80포트에서 동작중이므로)



5. 서비스 생성

- 위에서 생성한 작업을 서비스로써 가동한다


1) 서비스를 생성하기 위해 좌측의 클러스터 탭을 클릭한뒤

    앞서 생성했던 클러스터를 클릭한다


2) 서비스, 작업 등등 여러 형태로 컨테이너를 실행할 수 있다

   서비스를 클릭하여 서비스를 생성한다.


3) 서비스 구성

시작 유형 : FARGATE (관리형)

작업 정의 : 앞서 생성한 적업 선택

작업 개수 : 로드밸런서를 통해 유지될 작업의 개수를 의미


4) 네트워크 구성

- 컨테이너들이 배치될 네트워크를 적절하게 구성한다


5) ELB

- 컨테이너로 부하분산하여 트래픽을 전달할 ELB를 구성


ELB 유형 : Application Load Balancer 선택

ELB 이름 : 위의 네트워크 구성에 트래픽을 전달할 수 있는 ELB 선택

  미리 생성되어있던 것이 없다면 따로 생성 후 새로고침 버튼을 눌러 선택할 수 있다.

 

 ELB가 로드밸런싱할 대상 컨테이너를 생성하기 위해 ELB에 추가를 클릭한다

 아래 작업의 결과로 Target Group과 , ELB에 리스너로 위 컨테이너가 등록이 된다

 


리스너 포트 : 대상 그룹이 트래픽을 받기 위한 포트

 사용자가 8080으로 요청시 niginx container로 트래픽 전달


 

6) AutoScaling (선택사항)

- 그냥 지나간다



6. 확인

1. 서비스가 정상적인지 확인

- 좌측 클러스터 탭을 클릭한 뒤 서비스를 생성한 클러스터를 클릭한다

  아래와 같이 생성한 서비스의 상태가 ACTIVE이면 서비스가 가능한 상태이다



2. 로드밸런서 DNS로 요청

- 로드밸런서의 :8080 포트로 요청