본문으로 건너뛰기

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 타입)을 서비스 생성 전에 미리 생성해야 함

선행 작업


보안 그룹

{{PREFIX}}-sg-alb

변수소스
보안 그룹 이름{{PREFIX}}-sg-alb-
인바운드 규칙TCP 800.0.0.0/0
인바운드 규칙TCP 4430.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 그룹 생성
프로비저닝 모델온디멘드
컨테이너 인스턴스 AMIAmazon 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) 생성 후 서비스 생성에서 "기존 로드 밸런서 사용" 선택


관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: ECS EC2 + bridge + links (2개 컨테이너) 템플릿
노드 클릭 → 이동 · 드래그 → 위치 조정