티스토리 뷰
개요
기존 프로젝트에선 EKS를 사용 중이었다.
EKS를 사용하다보니 계속해서 생겨나는 무언가 + 빠른 주기의 업데이트 + 가격 등으로 인해 지속적으로 관리가 어려웠다.
그렇지만 자동관리해주는 부분을 포기할 수는 없어서 타협을 본게 ECS였다.
아직까지는 좋은 선택이었다 생각이 들지만, ECS도 진입하는데 있어서 약간의 장벽이 있었다.
용어나 사용법, CI/CD 구성 방법 등이 기존과 조금 달라서 애먹었다.
일단 이 포스팅에서는 용어와 구성 요소에 대해 정리해보려고 한다.
ECS의 주요 개념과 구성 요소
1. 클러스터 (Cluster)
ECS 클러스터는 컨테이너 작업(Task)을 실행하기 위한 논리적인 리소스 그룹이다.
논리적인 말은 가상이라는 뜻이다. 그냥 어디에 배포할지 분리하는 용도로 사용된다.
Fargate : AWS가 인프라를 관리하므로 서버를 신경 쓰지 않고 컨테이너를 실행할 수 있다.
EC2 : 직접 EC2 인스턴스를 클러스터에 연결해 컨테이너를 실행한다.
이 외의 방법으로 온프레미스를 적용할 수 있다고도 하는데 사용하지 않을거라 패스
2. 테스크 (Task)
테스크는 태스크 정의(Task Definition)를 기반으로 실행된 실제 컨테이너 작업이다.
테스크는 ECS 클러스터 안에서 실행되고, 테스크 정의를 기반으로 하나 이상의 컨테이너 그룹을 관리한다.
만들어진 컨테이너에 접근하기 위한 로드 밸런싱 및 스케일링 등의 관리 기능은 서비스(Service)를 통해 제공된다.
테스크는 서비스 없이도 개별 실행이 가능하고, 이때는 퍼블릭 IP 또는 ENI를 통해 직접 접근한다.
테스크는 Fargate 모드와 EC2 모드가 있는데,
Fargate 모드에서는 AWS가 각 태스크(Task)마다 ENI(Elastic Network Interface)를 자동으로 할당하며,
EC2 모드에서는 클러스터에 연결된 EC2 인스턴스에서 태스크가 실행된다.
3. 테스크 정의 (Task Definition)
테스크 정의는 컨테이너를 어떻게 실행할지에 대한 설정 템플릿이다.
컨테이너 이미지(Docker 이미지), 네트워크 설정, CPU/메모리 리소스, 환경 변수 등을 정의한다.
{
"family": "테스크 이름",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "컨테이너 이름",
"image": "이미지 이름 ecr에서 가져옴",
"cpu": 512,
"memory": 1024,
"essential": true,
"portMappings": [
{
"containerPort": 8080,
"hostPort": 8080,
"protocol": "tcp"
}
]
}
],
"requiresCompatibilities": ["FARGATE"],
"cpu": "512",
"memory": "1024",
"taskRoleArn": "task role arn",
"executionRoleArn": "excution role arn"
}
반드시 필요한건지 모르겠는데 task role과 excution role의 arn이 필요하다.
4. 서비스 (Service)
- 서비스는 태스크를 지속적으로 실행하고, 관리하며, 외부와 통신할 수 있도록 하는 ECS 구성 요소입니다.
- 서비스는 Auto Scaling을 통해 태스크를 자동으로 늘리거나 줄일 수 있습니다.
- ALB와 통합하여 외부에서 트래픽을 받아 ECS 태스크로 전달할 수 있습니다.
예:
- 서비스가 백엔드 API를 제공하는 태스크를 실행하고, ALB가 HTTP 요청을 태스크로 라우팅.
'개발 > AWS' 카테고리의 다른 글
Terraform으로 AWS Parameter Store 사용하기 + 하기 쉬운 실수 (0) | 2025.01.31 |
---|---|
CloudFront 403 에러 원인을 찾아가는 여정 feat. WAF (1) | 2024.11.02 |
Spot 인스턴스로 운영 되던 서버 문제 해결하기 (0) | 2024.08.26 |
한 눈에 알아보는 AWS VPC(Virtual Private Cloud) 정리 (0) | 2024.04.16 |
AWS S3 파일 주기적으로 삭제하기 : SpringBoot에서 미리 서명된 URL(pre-signed URL) 써보기 (0) | 2024.03.28 |
- Total
- Today
- Yesterday
- AWS
- object
- docker
- cache
- EKS
- springboot
- openAI API
- AOP
- GIT
- Log
- lambda
- CloudFront
- AWS EC2
- Spring
- 람다
- terraform
- 스프링부트
- S3
- ChatGPT
- MySQL
- 티스토리챌린지
- 후쿠오카
- Kotlin
- java
- serverless
- Elastic cloud
- JWT
- elasticsearch
- OpenAI
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |