AWS ECS 는 관리형 컨테이너 서비스다. ECS를 기반으로 3가지 유형의 컨테이너 서비스들을 실행 할 수 있다.
EKS : ECS를 기반으로 하는 Kubernetes 서비스다. Kubernetes를 ECS 클러스터의 오케스트레이션 툴로 사용한다.
ECS : AWS에서 제공하는 도커 컨테이너 서비스다. ECS는 관리형 컨테이너 서비스로 관리 범위에 따라서 2개 서비스로 분류한다.
EC2 Linux 타입 : EC2 인스턴스로 도커 컨테이너 클러스터를 구성한다. 사용자 VPC에 인스턴스가 올라간다. EC2 Linux 타입은 EC2 Linux 기반의 ECS 서비스를 참고하자.
Fargate 타입 : EC2 인스턴스 자체가 필요 없는 서버리스(Serverless) 서비스다.
EC2 Linux 타입과 구성에 별 차이 없을 것으로 생각한다.
ECS Fargate 서비스 구성요소
ECS Fargate 서비스를 위해서는 3개의 구성요소가 필요하다.
ECS Fargate Cluster
ECR
Task Definition
ECS Fargate Cluster 는 도커 컨테이너를 실행하기 위한 클러스터 자원이다. 컴퓨터 클러스터라고 보면 되겠다. ECS Fargate의 경우에는 이 클러스터를 구성하기 위한 서버도 필요 없는 서버리스 서비스다.
ECR(Elatic Container Registry)는 완전관리형 도커 이미지 저장소다.
Task Definition은 도커 컨테이너 기반 애플리케이션을 실행하기 위한 애플리케이션 정의정보를 담고 있다. 어느 정도의 메모리와 CPU를 가진 컨테이너를 몇 개 실행 할지. 해당 컨테이너를 실행할 도커 이미지의 위치 정보등을 포함하고 있다.
ECS 클러스터 생성
Create Cluster 버튼을 누르면 템플릿 선택 화면으로 넘어간다.
Networking Only : 사용자는 VPC 네트워크만 제공하면 된다. 클러스터는 AWS에서 제공하는 서버리스 클러스터다. AWS ECS Fargate라고 부르는 서비스다.
EC2 Linux + Networking : 사용자의 VPC에 컨테이너를 올릴 EC2 인스턴스들이 설치된다.
Windows + Networking : 리눅스 대신 윈도우즈 운영체제가 올라간 EC2 인스턴스들이 설치된다.
Next 버튼을 누르면 설정화면으로 넘어간다.
Cluster name : 클러스터 이름. joinc-cluster로 설정했다.
Create VPC : ECS Fargate를 위한 VPC를 새로 만들경우 선택한다. 나는 이전에 만들어 놓은 VPC를 사용하기로 했다.
Create 버튼을 클릭하면 클러스터가 만들어진다. 서버리스 이므로 EC2 인스턴스를 설정하는 등의 작업을 할 필요가 없다.
ECR 만들기
ECR은 AWS의 완전관리형 Docker Image Registry 다.
Create repository를 클릭하면 설정화면으로 넘어간다.
레포지토리의 이름은 "helloworld"로 설정했다. Create repository를 클릭하면 이미지 저장소가 만들어진다.
ECR 대시보드에서 레포지토리 정보를 확인 할 수 있다. 이제 ECR에 Docker 이미지를 등록해보자.
테스트 용 애플리케이션과 Dockerfile
테스트를 위해서 간단한 Go 애플리케이션을 만들었다.
package main
import (
"fmt"
"net/http"
)
func main() {
fmt.Println("vim-go")
http.HandleFunc("/v1/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello world Version 1")
})
err := http.ListenAndServe(":8088", nil)
if err != nil {
fmt.Println(err.Error())
}
}
테스트를 수행했다.
# go build -o hello
# ./hello
# curl localhost:8088/v1/hello
Hello world Version 1
ECS Fargate
ECS Fargate 서비스 구성요소
ECS 클러스터 생성
ECR 만들기
테스트 용 애플리케이션과 Dockerfile
Recent Posts
Archive Posts
Tags