ECS EC2 + bridge 템플릿
ECS EC2 + bridge 템플릿
목차
아키텍처 개요
┌─────────────────────────────────────────────────────────┐
│ ECS Cluster (EC2) │
│ ┌─────────────────────────────────────────────────┐ │
Internet ──► ALB ──►│ │ EC2 Instance (10.0.10.x) │ │
:80 :32768+ │ │ └─ container (host:32768+ → :{{PORT}}) │ │
│ └─────────────────────────────────────────────────┘ │
│ Target Group: Instance Type (bridge) │
└─────────────────────────────────────────────────────────┘
bridge 모드: 동적 포트 매핑 (32768-65535) → 대상 그룹 타입: Instance
⚠️ 주의: 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 |
태스크 정의
| 구분 | 항목 | 값 |
|---|---|---|
| 태스크 정의 구성 | 테스크 정의 패밀리 | {{PREFIX}}-task |
| 인프라 요구 사항 | 시작 유형 | Amazon EC2 인스턴스✅ |
| OS, 아키텍쳐, 네트워크 모드 | Linux/x86_64, bridge | |
| CPU (vCPU) | 0.5 vCPU | |
| 메모리 (GB) | 1 GB | |
| 태스크 역할 | ecsTaskExecutionRole | |
| 태스크 실행 역할 | ecsTaskExecutionRole | |
| 컨테이너 | 컨테이너-1-이름 | {{CONTAINER_NAME}} |
| 컨테이너-1-이미지 URI | {{ECR_URI}} | |
| 컨테이너-1-포트 매핑 | 호스트: 0 (동적), 컨테이너: {{PORT}} | |
| 리소스 할당 제한 | 0 0 0 0 (비권장) |
대상 그룹
EC2 > 대상 그룹 > 대상 그룹 생성
⚠️ bridge 모드: 서비스 생성 전에 대상 그룹을 먼저 생성해야 함
대상 그룹 생성({{PREFIX}}-tg)
1단계 대상 그룹 생성
| 변수 | 값 |
|---|---|
| 설정-대상 유형 | 인스턴스 |
| 설정-대상 그룹 이름 | {{PREFIX}}-tg |
| 설정-프로토콜 | HTTP |
| 설정-포트 | {{PORT}} |
| 설정-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 |
서비스 정의
| 구분 | 항목 | 값 |
|---|---|---|
| 서비스 세부 정보 | 테스크 정의 패밀리 | {{PREFIX}}-task |
| 테스크 정의 개정 | 1 | |
| 서비스 이름 | {{PREFIX}}-service | |
| 환경 | 컴퓨팅 구성-컴퓨팅 옵션 | 용량 공급자 전략✅ |
| 용량 공급자 전략 | 클러스터 기본값 사용✅ | |
| 배포 구성 | 스케줄링 전략 | 복제본 |
| 원하는 태스크 | 2 | |
| 가용 영역 리밸런싱 | ✅ | |
| ⭐로드 밸런싱 | 로드 밸런서 | {{PREFIX}}-alb (기존 선택) |
| 대상 그룹 | {{PREFIX}}-tg (기존 선택) | |
| 서비스 자동 크기 조정 | 서비스 자동 크기 조정 사용 | ✅ |
| 최소 태스크 개수 | 2 | |
| 최대 태스크 개수 | 4 | |
| CPU 사용률 | 75% |
점검
- 라우팅 테이블 확인 (NAT, IGW)
- ALB 보안 그룹 확인
- ALB 서브넷 확인 (Public)
- 대상 그룹 타입 확인 (Instance)
- 대상 그룹 Health Check 확인
- EC2 보안 그룹 - 동적 포트 범위 (32768-65535) 확인
❌ NOT WORKING
bridge 모드로 태스크 정의 후 서비스 생성에서 ALB/타겟그룹을 새로 생성하지 말 것 → 따로 ALB와 타겟그룹(Instance) 생성 후 서비스 생성에서 "기존 로드 밸런서 사용" 선택