# ec2 alb 사용법
# Application Load Balancer 설정 가이드
Application Load Balancer(ALB)는 OSI 7계층의 애플리케이션 레벨에서 트래픽을 분산하는 로드 밸런서입니다. ECS 서비스와 연결하여 Next.js 애플리케이션을 호스팅할 수 있습니다.
# ALB 개요
Application Load Balancer(ALB)는 OSI 7계층(애플리케이션 레벨)에서 작동하는 로드 밸런서입니다. HTTP/HTTPS 트래픽을 여러 대상(ECS 태스크, EC2 인스턴스 등)에 분산시킵니다.
# ECS에서 Next.js 호스팅을 위해 ALB가 필요한 이유
# 배경지식: 컨테이너 기반 아키텍처의 특성
# 1. ECS 태스크의 동적 특성
문제점:
- ECS는 컨테이너를 동적으로 생성하고 제거합니다
- 스케일 아웃/인 시 태스크의 IP 주소가 계속 변경됩니다
- 태스크가 재시작되면 새로운 IP 주소를 받습니다
- 사용자가 직접 태스크의 IP 주소로 접근할 수 없습니다
해결책:
- ALB는 고정된 DNS 이름을 제공합니다
- ALB가 태스크의 IP 주소 변경을 추적하고 관리합니다
- 사용자는 ALB의 DNS 이름으로만 접근하면 됩니다
# 2. 고가용성 및 로드 밸런싱
문제점:
- 단일 태스크에 모든 트래픽이 몰리면 과부하 발생
- 태스크가 실패하면 서비스 중단
- 트래픽 증가 시 단일 인스턴스로는 처리 불가
해결책:
- ALB가 여러 태스크에 트래픽을 자동 분산
- 하나의 태스크가 실패해도 다른 태스크가 요청 처리
- 트래픽 증가 시 자동으로 여러 태스크에 분산
# 3. 헬스 체크 및 자동 복구
문제점:
- 태스크가 실행 중이지만 애플리케이션이 응답하지 않을 수 있음
- 수동으로 문제를 감지하고 복구하는 것은 비효율적
해결책:
- ALB가 주기적으로 헬스 체크를 수행
- 비정상 태스크를 자동으로 감지하고 트래픽 라우팅에서 제외
- 정상 태스크만 트래픽을 받도록 보장
# 4. SSL/TLS 종료
문제점:
- 각 태스크에서 SSL 인증서를 관리하는 것은 복잡함
- 인증서 갱신 시 모든 태스크를 업데이트해야 함
해결책:
- ALB에서 SSL/TLS 종료 처리
- ACM(Amazon Certificate Manager)과 통합하여 인증서 자동 관리
- 태스크는 HTTP로 통신하여 단순화
# 5. 경로 기반 라우팅
문제점:
- 여러 서비스를 하나의 도메인으로 제공하고 싶을 때
- 마이크로서비스 아키텍처에서 각 서비스를 다른 경로로 라우팅
해결책:
- ALB의 경로 기반 라우팅 규칙 사용
- 예:
/api/*→ API 서비스,/admin/*→ 관리자 서비스
# ECS + ALB 아키텍처 흐름
사용자 요청
↓
CloudFront (CDN)
↓
ALB (Application Load Balancer)
├─ 헬스 체크 수행
├─ SSL/TLS 종료
└─ 트래픽 분산
↓
대상 그룹 (Target Group)
├─ 태스크 1 (10.0.1.100:8080) ✓ 정상
├─ 태스크 2 (10.0.1.101:8080) ✓ 정상
└─ 태스크 3 (10.0.1.102:8080) ✗ 비정상 (트래픽 제외)
↓
ECS 태스크 (Next.js 애플리케이션)
# ALB 기본 구성
# 1. 로드 밸런서 설정
로드 밸런서 이름
- AWS 계정 내에서 고유해야 함
- 생성 후 변경 불가
- 예시:
pet-app-test-alb - 하이픈 포함 최대 32자, 하이픈으로 시작/끝나면 안 됨
스키마
- 인터넷 경계: 퍼블릭 IP, 퍼블릭 서브넷 필요
- 내부: 프라이빗 IP, VPC 내부 트래픽만 처리
IP 주소 유형
- IPv4: IPv4 주소만
- 듀얼 스택: IPv4 및 IPv6 주소
- 퍼블릭 IPv4가 없는 듀얼 스택: 퍼블릭 IPv6 + 프라이빗 IPv4/IPv6
# 2. 네트워크 매핑
VPC 선택
- 로드 밸런서가 존재할 VPC 선택
- 대상 그룹의 VPC와 일치해야 함
가용 영역 및 서브넷
- 최소 2개 이상의 가용 영역 선택 필수
- 각 가용 영역마다 서브넷 선택
- 예:
ap-northeast-2a,ap-northeast-2c
고가용성 보장:
- 하나의 가용 영역에 장애가 발생해도 다른 가용 영역에서 서비스 계속
# 3. 보안 그룹
역할:
- 로드 밸런서에 대한 인바운드/아웃바운드 트래픽 제어
- 방화벽 규칙 세트
설정:
- 최대 5개의 보안 그룹 선택 가능
- 기본 보안 그룹 또는 커스텀 보안 그룹 사용
필수 규칙:
- 인바운드: HTTP(80), HTTPS(443) 허용
- 아웃바운드: 대상 그룹으로의 트래픽 허용
# 4. 리스너 및 라우팅
리스너 설정
- 프로토콜: HTTP(80) 또는 HTTPS(443)
- 포트: 1-65535
기본 작업
- 다른 규칙이 적용되지 않을 때 사용되는 기본 동작
- 대상 그룹으로 전달: 트래픽을 대상 그룹으로 라우팅
- URL로 리다이렉션: 다른 URL로 리다이렉트
- 고정 응답 반환: 고정된 응답 반환
대상 그룹 선택
- 트래픽을 라우팅할 대상 그룹 선택
- 가중치 기반 라우팅 가능 (0-100%)
# 대상 그룹 생성
# 1. 기본 설정
대상 유형 (변경 불가)
- 인스턴스: EC2 인스턴스
- IP 주소: VPC 및 온프레미스 리소스
- Lambda 함수: Lambda 함수 (ALB만)
- Application Load Balancer: 다른 ALB (NLB만)
대상 그룹 이름
- AWS 계정당 리전별로 고유
- 예시:
pet-app-test-tg - 허용 문자: a-z, A-Z, 0-9, 하이픈(-)
- 하이픈으로 시작/끝나면 안 됨
- 최대 32자
# 2. 프로토콜 및 포트
프로토콜
- HTTP 또는 HTTPS
- ALB와 대상 간의 통신 프로토콜
포트
- 대상이 트래픽을 수신하는 포트
- 예:
8080(Next.js 애플리케이션 포트) - 등록 시 개별 대상에 대해 재정의 가능
IP 주소 유형
- IPv4 또는 IPv6
- 선택한 유형의 대상만 등록 가능
# 3. VPC 선택
중요:
- 로드 밸런서와 동일한 VPC 선택
- 대상 그룹의 VPC는 생성 후 변경 불가
예시:
- VPC:
vpc-0d5f1feb55a16989b (vpc-pet) - CIDR:
10.0.0.0/16
# 4. 프로토콜 버전
- HTTP1: HTTP/1.1 사용
- HTTP2: HTTP/2 사용 (성능 향상)
- gRPC: gRPC 프로토콜 지원
# 5. 상태 검사 (Health Check)
상태 검사 프로토콜
- HTTP 또는 HTTPS
상태 검사 경로
- 기본:
/(루트 경로) - 커스텀 경로 지정 가능 (최대 1024자)
- 예:
/health,/api/health
고급 설정
상태 검사 포트
- 기본: 트래픽 포트와 동일
- 재정의 가능: 다른 포트 지정
정상 임계값
- 비정상 → 정상으로 간주하기 위한 연속 성공 횟수
- 기본: 2회 (2-10 범위)
비정상 임계값
- 정상 → 비정상으로 간주하기 위한 연속 실패 횟수
- 기본: 2회 (2-10 범위)
제한 시간
- 상태 검사 실패로 간주하는 응답 대기 시간
- 기본: 5초 (2-120초)
간격
- 상태 검사 사이의 시간
- 기본: 30초 (5-300초)
성공 코드
- 성공으로 간주하는 HTTP 상태 코드
- 기본:
200 - 범위 지정 가능:
200-299 - 여러 값 지정 가능:
200,202
# ECS와 ALB 연결
# 1. ECS 서비스 생성 시 ALB 연결
ECS 서비스 설정:
- 로드 밸런서 타입: Application Load Balancer 선택
- 로드 밸런서: 생성한 ALB 선택
- 대상 그룹: 생성한 대상 그룹 선택
- 컨테이너 이름 및 포트: Next.js 애플리케이션이 리스닝하는 포트 (예: 8080)
# 2. 자동 등록
ECS의 자동 등록 기능:
- 새 태스크가 시작되면 자동으로 대상 그룹에 등록
- 태스크가 종료되면 자동으로 대상 그룹에서 제거
- 수동 작업 불필요
# 3. 헬스 체크 연동
ECS 태스크 헬스 체크:
- ALB의 헬스 체크 결과를 ECS가 모니터링
- 비정상 태스크는 자동으로 재시작
- 서비스 안정성 향상
# IAM 권한 설정
# ECS 자동 배포를 위한 권한
ECS 서비스가 ALB와 대상 그룹을 자동으로 관리하려면 적절한 IAM 권한이 필요합니다:
필요한 권한:
elasticloadbalancing:RegisterTargetselasticloadbalancing:DeregisterTargetselasticloadbalancing:DescribeTargetHealthelasticloadbalancing:DescribeLoadBalancers
ECS 작업 실행 역할에 권한 추가:
- IAM 콘솔 접속
- ECS 작업 실행 역할 선택
- 권한 추가 → AWS 관리형 정책 또는 인라인 정책 추가
# 참고사항
- ALB는 리전별로 생성되며, 리전 간 이동 불가
- 대상 그룹의 VPC는 생성 후 변경 불가
- 대상 유형은 생성 후 변경 불가
- ALB는 시간당 요금과 데이터 처리량에 따라 과금됩니다
- CloudFront와 연동하여 전 세계 사용자에게 빠른 콘텐츠 전달 가능
# 빠른 시작 팁
기본 설정으로 시작하기:
- 내부(프라이빗) VPC가 필요하지 않은 경우, 대부분의 설정을 기본값으로 사용해도 됩니다
- 인터넷 경계 스키마, IPv4 주소 유형, 기본 보안 그룹 등 기본값으로 빠르게 시작 가능
- 필요에 따라 나중에 고급 설정(경로 기반 라우팅, SSL/TLS 등)을 추가할 수 있습니다