반응형
이번 포스트에서는 ECS 클러스터, ECS 서비스, ECS 태스크 정의를 생성하고 사용해 보자
ECS 클러스터에 대해서 설명하자면 ECS클러스터는 그 자체로는 아무런 역할을 하지 못한다. 클러스터 내부에 EC2가 생성되어야 비로소 클러스터의 역할을 하게 되는 것이다. 이를 위해 ECS클러스터 생성을 할때는 EC2생성을 동시에 설정하게 된다.
그리고 ECS 클러스터 내부에는 ECS서비스 생성해서 기동시켜줘야하는데 이 서비스는 ECS 태스크를 관리해주는 서비스다.
즉, 세팅 순서는 ECS 클러스터 -> 태스크 정의 -> 서비스 생성이다.
1. ECS 클러스터 생성하기
1-1. 클러스터 생성
- ECS 메뉴 우측의 "클러스터 생성" 버튼을 클릭한다.
1-2. 클러스터 구성 작성
- 여기서는 클러스터 이름과 기본 네임스페이스를 작성한다.
- 기본 네임스페이스는 클러스터 이름을 작성하면 자동으로 세팅된다.
1-3. 인프라 설정
- 인프라 설정에서는 원하는 EC2 인스턴스 유형을 선택한다.
- 운영체제는 Amazon Linux 2023(arm64)를 선택하고 Auto Scailing 그룹은 새로운 것을 생성하도록 한다.
- 중요한건 여기서 ECS클러스터에 연결될 EC2의 인스턴스 유형을 선택한다. (t4g.small을 선택했다.)
- 원하는 용량은 최소1 최대1로 설정해 주면 ASG가 늘리지도 줄이지도 못하고 1개의 EC2를 유지한다.
1-4. 인스턴스 네트워크를 설정
- VPC는 default를 선택했고 서브넷은 public subnet 4개를 다 선택했다.
- 보안 그룹도 기본적으로 설정되어있는 "default"를 선택했다. "22, 80, 443, 8080, 8081" 포트가 인바운드로 열려있는 상태다.
1-5. ECS 클러스터 생성하기
- 하단의 남은 2가지 설정은 pass 하고 "생성" 버튼을 누른다.
1-6. 생성버튼을 누르면 자동으로 "클러스터 개요" 페이지로 이동된다.
- 처음에는 생성이 진행중이라고 팝업이 생성된다. (대기하고 있으면 된다.)
- 생성이 완료되면 아래와 같이 팝업이 변경된다.
1-7. ECS클러스터와 EC2가 잘 연결되었는지 확인하기
- 클러스터의 이름을 클릭해서 개요로 들어간다. 이후 우측의 "클러스터 업데이트" 버튼을 클릭한다.
- 용량 공급자를 클릭해서 잘 연결되었는지 확인한다.
- EC2CapacityProvider가 잘 연결된 것을 확인할 수 있다. (AutoScailingGroup의 용량 공급자(EC2)가 연결된 것이다.)
- 마지막으로 EC2에 들어가서 잘 연결되었는지 확인한다.
- 아래와 같이 잘 생성되어있는것을 확인할 수 있다. (이름에도 ECS Instance라고 적혀있다.)
클러스터를 생성을 완료했다. 이제 태스크를 생성하자
2. ECS 태스크 생성하기
2-1. ECS 좌측 메뉴에서 "태스크 정의"를 클릭해서 들어간다.
2-2. 우측의 "새 태스크 정의 생성" 버튼을 누른다"
2-3. 이동한 "새 태스크 정의 생성" 페이지에서 패밀리의 이름을 작성한다.
2-4. 태스크의 인프라 요구 사항을 구성한다.
- EC2인스턴스를 선택한다.
- 운영 체제는 Linux/ARM64를 선택한다. (ECS클러스터의 EC2가 t4g이므로 arm 아키텍쳐다.)
- 네트워크 모드는 bridge를 사용한다. (default가 bridge다.)
- 태스크 크기는 EC2의 자원을 얼만큼 사용할것인지 설정하는 것이다. 적당히 설정해주면 된다.
- 태스크 실행 역할은 꼭 넣어주도록 하자
이때 태스크 실행 역할을 넣어줘야 하는 이유는?
1. AWS 서비스 접근 |
|
2. 로그 관리 |
|
3. 시크릿 관리 |
|
2-5. 컨테이너 설정을 한다.
- 이미지URI에는 ECR의 주소를 넣어줬다. (스프링 부트 Docker 이미지다.)
- 포트 매핑에는 호스트 포트는 0으로 해줘서 랜덤 포트를 지정해줬고 컨테이너 포트는 SpringBoot 프로젝트에 지정해준 8081 포트를 작성했다. (application.yml에도 8081 포트로 설정해줬다.)
- 나는 환경 변수도 설정을 해줬다. (여기서 위에서 설정한 태스크 실행 역할이 동작한다. 왜냐하면 저 값들은 전부 Secrets Manager에서 받아와서 적용되도록 해놔서 IAM권한이 필요하기 때문이다.)
환경변수가 없다면 적지않고 넘어가면 된다.
2-6. 마지막으로 로깅 설정을 한다.
- CloudWatch에서 태스크의 로그 (스프링부트 로그)를 봐야하므로 꼭 선택해주도록 하자 (default로 선택되어있다.)
2-7. "태스크 정의" 생성이 완료되면 아래와 같이 화면이 보일것이다.
마지막으로 ECS 서비스를 생성해보자
3. ECS 서비스 생성하기
3-1. ECS의 클러스터 개요에 들어와서 “서비스” 목록에서 “생성”버튼을 누른다.
3-2. ECS 서비스를 생성하는 페이지로 이동된다.
- 여기서 컴퓨팅 옵션으로 "시작 유형"을 선택하고 하단의 시작 유형에는 EC2를 선택한다.
3-3. “배포 구성” 내용을 설정한다.
- 애플리케이션 유형에 "서비스"를 선택하고 패밀리에 방금 만든 "ECS 태스크 정의"를 선택한다.
- 하단의 서비스 이름에는 원하는 ECS 서비스명을 적어주면 된다.
3-4. 로드 밸런싱을 설정한다.
- 로드 밸런서 유형을 ALB를 선택한다.
이전 포스트에서 만든 ALB가 여기에서 사용된다.
아래 글을 통해 만들고 오는것을 추천한다. 👇🏻👇🏻
- 로드 밸런서(ALB)를 선택하고 기존 리스너와 기존 대상 그룹을 적용시켜 준다.
3-5. 다 작성하고 하단의 “생성” 버튼을 클릭하면 아래와 같이 "클러스터 개요"로 창이 이동한다.
- 여기서는 ECS 서비스가 배포중이라고 나온다.
- 조금 기다리면 아래와 같이 배포에 성공하면서 초록색 팝업으로 변경된다.
이렇게 EC2를 기반으로 하는 ECS 클러스터를 생성하고 ECS 서비스, ECS 태스크까지 만들어보며 실제 배포까지 진행해 봤다. ECS는 순서를 잘 지켜서 생성하면 생각보다 간단하니 꼭 천천히 순서대로 만들어보자
ECS를 테라폼으로 만들어보기위해 테라폼을 알아보자
반응형
'AWS > ECS, ECR' 카테고리의 다른 글
AWS ECS와 ALB: 동적 포트 vs 명시적 포트 설정의 EC2 DNS 접속 이슈 (1) | 2023.10.31 |
---|---|
AWS - ALB를 적용시킨 ECS의 동적 포트 할당관계 동작원리 (1) | 2023.10.30 |
AWS - ALB(로드 밸런서)없이 ECS 생성하기 (1) | 2023.10.28 |
AWS ECS를 위한 ALB세팅: 실전 예제와 함께 (0) | 2023.10.27 |
AWS ECR로 Docker 이미지 관리하기: 완벽 가이드 (0) | 2023.10.27 |