-
# AWS ECS 구성하기개발메모 2025. 2. 17. 10:33
회사에서 사용해야 하는 일이 생겼다.
이번 회사는 인프라를 스스로 구축해야 했기 때문에 하나하나 GPT와 함께 진행했다.
지금 기재하는 내용은 내가 필요했던 사항들에 대한 개요로 작성했다.추가되거나 변경될 수 있는 여지가 있는 부분들은 별도 포스트에 기재할 예정이다.
ECS 구성 전에 현재 상황
- github로 형상관리
- spring + kotlin 프로젝트 3개 (spring gateway 1, spring boot 2)
- postgreSQL rds 사용
- redis cache 사용
구현하고자 하는 아키텍쳐...는 좀 과하지만 인프라 구조
- 3개의 프로젝트는 같은 보안체계 안에서 구동
- spring gateway는 외부(클라이언트, 프론트)에서 요청을 받아 나머지 spring boot에 전달한다.
- spring boot 프로젝트는 spring gateway의 요청만을 받으며, 외부로 rest api 요청을 보내야 한다.
- rds, cache도 동일 보안체계에서 구동된다.
- ecs는 fargate로 해서 서버리스 환경으로 구성한다 -> 이전 회사에서 사용한 방식 차용.
- 배포는 github action을 이용한 CI/CD -> 각 spring 프로젝트의 도커라이징 필요.
위 내용들은 GPT에게 질문한 내용들을 정리한 것이다.
이렇게 해서 나온 작업 개요는 다음과 같다.
1. ECR Repository 생성
2. VPC 및 Network 구성
3. ECS Cluster 생성
4. 태스크 정의
5. ECS 서비스 생성
6. ALB 연결
이번 글에서는 RDS, ElastiCache 및 github CI/CD 에 대한 내용은 제외했으며,
별도로 다룰 예정이다.
1. ECR Repository 생성
쉽다.
ECR Repository에 github action으로 생성될 docker image를 저장할 repository 저장소를 생성하면 된다.
AWS console > Amazon Elastic Container Registry에서 '생성' 클릭
그러면 프라이빗 레포지토리 생성 페이지가 나온다.
레포지토리 이름 등록 후 '생성' 버튼 누르면 된다.
생성된 레포지토리의 URI는 추후 CI/CD 구성시 이미지 배포 엔드포인트로 사용한다.2. VPC 및 Network 구성
VPC와 서브넷, 인터넷 게이트웨이(라우트 테이블 포함) 설정을 한다.
aws console > VPC 로 이동하여 VPC 생성 클릭
VPC 생성 메뉴에서 VPC 설정에서 'VPC 등'을 설정하면 서브넷, NAT 게이트웨이 설정까지 한번에 할 수 있다.
이름 태그에 VPC의 이름을 등록하고,
IPv4 CIDR 블록의 값을 등록 (기본값 사용해도 무관)
서브넷은 퍼블릭 2개 프라이빗 2개 사용으로 설정 했다.
이 화면에서 설정하면 인터넷 게이트웨이(IGW) 및 NAT 게이트웨이 생성 및 라우트 테이블 설정까지 한번에 처리가 된다.
만약 VPC만으로 선택 했을 때는 VPC 메뉴 하위에 있는 인터넷게이트웨이, NAT 게이트웨이, 라우팅 테이블 메뉴에서 직접 설정 가능하다.3. ECS Cluster 생성
ECS 클러스터를 생성한다.
aws console > Elastic Container Service 에서 '클러스터 생성' 버튼 클릭
클러스터 이름을 입력 후 인프라는 AWS Fargate(서버리스)를 선택한다.
생성 클릭
4. 태스크 정의
ECS 메뉴에서 계속 태스크 정의 진행을 한다.
'태스크 정의' 사이드 메뉴 클릭 후 '새 태스크 정의 생성' 클릭.
태스크 정의 구성에서 태스크 정의 패밀리 이름 등록하고
인프라 요구 사항에서 시작유형을 fargate로 설정하고, 태스크의 물리적 스팩을 지정한다.
태스크역할에 부여할 IAM에서 ecs태스크 실행 role을 미리 생성(추후 글 작성 예정) 후 해당 역할을 지정해준다.
컨테이너에 대한 세부 정보를 세팅해준다.
이름은 태스크에서 사용할 이름을 지정한다.
이미지 URI는 1 에서 생성한 ECR repository의 URI를 등록한다. tag의 경우는 CI/CD시 지정된 tag가 있을 경우 추가한다.
포트 매핑의 경우 컨테이너 이미지에서 프로젝트가 실행되는 포트를 등록해주면 된다.
그 외의 설정은 일단 기본으로 적용 했으며 추가는 AWS 문서를 참고하거나 GPT에게 도움을 요청하자.
그리고 최하단의 '생성' 버튼을 클릭하여 태스크 정의 생성 완료.
5. ECS 서비스 생성
3에서 생성한 ECS 클러스터 상세 화면을 보면 ECS 서비스를 생성할 수 있는 화면이 제공된다.
서비스 탭의 생성 버튼을 클릭
생성 화면에서 컴퓨터 구성은 시작유형 - fargate선택한다.
배포 구성은 유형 서비스로 지정 - 태스크 정의는 패밀리에 4에서 생성한 태스크 정의 선택 - 서비스이름 등록을 한다.네트워킹 항목에서는 서비스가 위치할 VPC영역을 지정한다.
서브넷은 VPC에 지정된 모든 서브넷이 표시 되는데, 서브넷은 해당 서비스의 연결 특성에 따라 설정하면 된다.나의 경우에는 spring gateway가 외부와의 통신이 되어야 하므로 spring gateway 서비스는 퍼블릭 서브넷을,
그 외의 내부 서비스는 프라이빗 서브넷을 선택 했다.
보안 그룹은 VPC내에 생성한 보안 그룹 중 해당 서비스 정책에 맞는 보안그룹을 선택 한다.
설정 완료 후 '생성' 버튼 클릭.
6. ALB 연결
마지막으로, spring gateway에서 외부 요청을 받기 위한 로드밸런서를 연결하면 초기 세팅은 완료가 된다.
aws console > EC2 > 로드밸런서'로드 밸런서 생성' 버튼 클릭.
로드 밸런서 유형은 Application Load Balancer로 선택.
로드 밸런서 이름을 입력하고,
네트워크 매핑에서 VPC를 선택 후 매핑 가용영역에 나오는 subnet을 모두 선택한다.
(또는 spring gateway에서 메인으로 사용 할 subent을 선택한다)리스너 및 라우팅에서는 대상그룹을 선택해야 한다.
'대상 그룹 생성' 을 클릭기본 구성에서는 IP 주소로 등록을 선택한다.
그리고 프로토콜에서 포트는 spring gateway의 태스크정의에서 지정한 포트를 넣어준다.
(나의 경우 8080 포트)
그리고 다음 버튼을 누르면 IP 주소 영역이 표시 되는데,
VPC와 subnet 지정을 한 경우에는 수동으로 지정할 필요가 없다.
대상 그룹 생성을 클릭 후 로드 밸런서 화면 하단의 '로드 밸런서 생성' 버튼을 클릭하면 완료된다.
이번 글의 내용은 전적으로 나의 환경에 맞는 설정을 위주로 했기 때문에 완전한 ECS세팅이라고 보긴 어렵다.
개인 기록용으로 남기기도 하는 내용이기 때문이기도 하다.'개발메모' 카테고리의 다른 글
# apache POI 라이브러리 사용과 엑셀 row 빈 값 (0) 2025.03.31 # DB PK Index 생성 속도 저하 이슈 (postgreSQL) (0) 2025.03.24 # 외부 DNS 도메인 AWS alb 연동 (0) 2025.02.11 # AWS ElastiCache 사용하기 (0) 2025.02.06 # shell 파일 명령어(프로세스 종료) (0) 2025.02.04