ECS EC2 + bridge + links (2개 컨테이너) 템플릿
ECS EC2 + bridge + links (2개 컨테이너) 템플릿
목차
아키텍처 개요
┌─────────────────────────────────────────────────────────┐
│ ECS Cluster (EC2) │
│ ┌─────────────────────────────────────────────────┐ │
Internet ──► ALB ──►│ │ EC2 Instance (10.0.10.x) │ │
:80 :32768+ │ │ ├─ nginx (host:32768+ → :80) │ │
│ │ └─ fastapi (:3000) ← links │ │
│ └─────────────────────────────────────────────────┘ │
│ Target Group: Instance Type (bridge, nginx만 연결) │
└─────────────────────────────────────────────────────────┘
bridge 모드 + links: nginx가 fastapi로 프록시, 대상 그룹 1개만 필요
⚠️ 주의: ALB와 대상 그룹(Instance 타입)을 서비스 생성 전에 미리 생성해야 함
선행 작업
- VPC/Subnet 구성
- [AWS ECR 리포지토리]
보안 그룹
{{PREFIX}}-sg-alb
| 변수 | 값 | 소스 |
|---|---|---|
| 보안 그룹 이름 | {{PREFIX}}-sg-alb | - |
| 인바운드 규칙 | TCP 80 | 0.0.0.0/0 |
| 인바운드 규칙 | TCP 443 | 0.0.0.0/0 |
| 아웃바운드 규칙 | 모든 트래픽 | 0.0.0.0/0 |
{{PREFIX}}-sg-ec2 (동적 포트 매핑)
| 변수 | 값 | 소스 |
|---|---|---|
| 보안 그룹 이름 | {{PREFIX}}-sg-ec2 | - |
| 인바운드 규칙 | TCP 32768-65535 | {{PREFIX}}-sg-alb |
| 인바운드 규칙 | TCP 22 | 관리자 IP |
| 아웃바운드 규칙 | 모든 트래픽 | 0.0.0.0/0 |
클러스터
| 구분 | 항목 | 값 |
|---|---|---|
| 클러스터 이름 | 클러스터 이름 | {{PREFIX}}-cluster |
| 인프라(고급) | 컴퓨팅 용량 확보 방법 선택 | Fargate 및 자체 관리형 인스턴스✅ |
| Auto Scaling 그룹(ASG) | 새 Auto Scaling 그룹 생성 | |
| 프로비저닝 모델 | 온디멘드 | |
| 컨테이너 인스턴스 AMI | Amazon Linux 2023 | |
| EC2 인스턴스 유형 | t3.medium | |
| EC2 인스턴스 역할 | ecsInstanceRole | |
| 원하는 용량-최소 | 2 | |
| 원하는 용량-최대 | 3 | |
| SSH 키 페어 | {{SSH_KEY}} | |
| 루트 EBS 불륨 크기 | 32GB | |
| 네트워크 설정-VPC | {{PREFIX}}-vpc | |
| 네트워크 설정-서브넷 | {{PREFIX}}-subnet-private1-1a,{{PREFIX}}-subnet-private2-1b | |
| 네트워크 설정-보안 그룹 | {{PREFIX}}-sg-ec2 | |
| 네트워크 설정-퍼블릭 IP 자동 지정 | x |
태스크 정의 (2개 컨테이너)
인프라 요구 사항
| 구분 | 항목 | 값 |
|---|---|---|
| 태스크 정의 구성 | 테스크 정의 패밀리 | {{PREFIX}}-task |
| 인프라 요구 사항 | 시작 유형 | Amazon EC2 인스턴스✅ |
| OS, 아키텍쳐, 네트워크 모드 | Linux/x86_64, bridge | |
| CPU (vCPU) | 0.75 vCPU | |
| 메모리 (GB) | 1.5 GB | |
| 태스크 역할 | ecsTaskExecutionRole | |
| 태스크 실행 역할 | ecsTaskExecutionRole |
컨테이너 1: nginx (필수)
| 구분 | 항목 | 값 |
|---|---|---|
| 컨테이너 | 이름 | {{PREFIX}}-web |
| 이미지 URI | {{ECR_URI_NGINX}} | |
| 포트 매핑 | 호스트: 0 (동적), 컨테이너: 80 | |
| 필수 컨테이너 | ✅ | |
| 네트워크 설정 | 호스트 이름 | nginx |
| 링크 | {{PREFIX}}-api:fastapi |
컨테이너 2: fastapi
| 구분 | 항목 | 값 |
|---|---|---|
| 컨테이너 | 이름 | {{PREFIX}}-api |
| 이미지 URI | {{ECR_URI_FASTAPI}} | |
| 포트 매핑 | 호스트: 0 (동적), 컨테이너: 3000 | |
| 필수 컨테이너 | ✅ | |
| 네트워크 설정 | 호스트 이름 | fastapi |
💡 links 설정: nginx.conf에서
http://fastapi:3000으로 접근 가능
대상 그룹 (nginx 1개만)
EC2 > 대상 그룹 > 대상 그룹 생성
💡 links 방식: nginx가 fastapi로 프록시하므로 대상 그룹은 nginx 1개만 필요
{{PREFIX}}-tg-nginx
1단계 대상 그룹 생성
| 변수 | 값 |
|---|---|
| 설정-대상 유형 | 인스턴스 |
| 설정-대상 그룹 이름 | {{PREFIX}}-tg-nginx |
| 설정-프로토콜 | HTTP |
| 설정-포트 | 80 |
| 설정-IP 주소 유형 | IPv4 |
| 설정-VPC | {{PREFIX}}-vpc |
| 설정-프로토콜 버전 | HTTP1 |
| 상태 검사-상태 검사 프로토콜 | HTTP |
| 상태 검사-상태 검사 경로 | / |
2단계 대상 등록
| 변수 | 값 |
|---|---|
| 1 | 대상 등록 건너뛰기 (ECS 서비스가 자동 등록) |
로드 밸런서
EC2 > 로드 밸런서 > 로드 밸런서 생성 > Application Load Balancer
{{PREFIX}}-alb
Application Load Balancer 생성
| 변수 | 값 |
|---|---|
| 기본 구성-로드 밸런서 이름 | {{PREFIX}}-alb |
| 기본 구성-체계 | 인터넷 경계 |
| 기본 구성-로드 밸런서 IP 주소 유형 | IPv4 |
| 네트워크 매핑-VPC | {{PREFIX}}-vpc |
| 네트워크 매핑-가용영역 및 서브넷 | 2 |
| az1 | {{PREFIX}}-subnet-public1-1a |
| az2 | {{PREFIX}}-subnet-public2-1b |
| 보안 그룹 | {{PREFIX}}-sg-alb |
| 리스너 및 라우팅-프로토콜 | HTTP |
| 리스너 및 라우팅-포트 | 80 |
| 리스너 및 라우팅-라우팅 액션 | 대상 그룹으로 전달 |
| 리스너 및 라우팅-대상그룹 | {{PREFIX}}-tg-nginx |
💡 리스너 규칙: 단일 대상 그룹이므로 기본 규칙만 사용
서비스 정의
| 구분 | 항목 | 값 |
|---|---|---|
| 서비스 세부 정보 | 테스크 정의 패밀리 | {{PREFIX}}-task |
| 테스크 정의 개정 | 1 | |
| 서비스 이름 | {{PREFIX}}-service | |
| 환경 | 컴퓨팅 구성-컴퓨팅 옵션 | 용량 공급자 전략✅ |
| 용량 공급자 전략 | 클러스터 기본값 사용✅ | |
| 배포 구성 | 스케줄링 전략 | 복제본 |
| 원하는 태스크 | 2 | |
| ⭐로드 밸런싱 | 로드 밸런서 | {{PREFIX}}-alb (기존 선택) |
| 대상 그룹 | {{PREFIX}}-tg-nginx (기존 선택) | |
| 컨테이너 선택 | {{PREFIX}}-web (nginx, 포트 80) |
점검
- 라우팅 테이블 확인 (NAT, IGW)
- ALB 보안 그룹 확인
- ALB 서브넷 확인 (Public)
- 대상 그룹 타입 확인 (Instance)
- 대상 그룹 Health Check 확인
- EC2 보안 그룹 - 동적 포트 범위 (32768-65535) 확인
- nginx → fastapi 통신 확인 (links)
❌ NOT WORKING
bridge 모드로 태스크 정의 후 서비스 생성에서 ALB/타겟그룹을 새로 생성하지 말 것 → 따로 ALB와 타겟그룹(Instance) 생성 후 서비스 생성에서 "기존 로드 밸런서 사용" 선택