n8n AWS 배포 가이드 (정석 버전)
아키텍처 설계 개념
야매 버전 vs 정석 버전 비교
야매 버전 구조
•
사용자 요청 → Route 53 → EC2 (퍼블릭 서브넷) 직접 접근
•
SSH 접근도 퍼블릭으로 직접 연결
•
보안상 취약점 존재
정석 버전 구조 (권장)
•
사용자 요청 → Route 53 → ALB → EC2 (프라이빗 서브넷)
•
Bastion Host: 퍼블릭 서브넷에 배치, SSH 접근 관리
•
ALB: 웹 트래픽만 허용, 프라이빗 서브넷으로 라우팅
•
보안 강화: 직접 접근 차단, 계층화된 보안
VPC 및 네트워크 인프라 구성
VPC 생성
기본 설정
•
VPC and More 선택: 서브넷, NAT 게이트웨이 자동 생성
•
NAT 게이트웨이 활성화: 프라이빗 서브넷 아웃바운드 통신용
•
프로젝트명 기반 명명: n8nvpc 등 식별 가능한 이름
서브넷 구성
•
퍼블릭 서브넷: Bastion Host 및 ALB 배치
•
프라이빗 서브넷: n8n 서비스 인스턴스 배치
•
가용 영역: 다중 AZ 구성으로 고가용성 확보
EC2 인스턴스 구성
Bastion Host 설정
인스턴스 생성
•
서브넷: 퍼블릭 서브넷 배치
•
퍼블릭 IP: 자동 할당 활성화
•
보안 그룹: SSH(22) 포트만 내 IP로 제한
보안 그룹 구성
•
인바운드 규칙: SSH(22) - 내 IP만 허용
•
명명 규칙: n8n-bastion-sg
n8n 서비스 인스턴스 설정
인스턴스 생성
•
서브넷: 프라이빗 서브넷 배치
•
퍼블릭 IP: 불필요 (비활성화)
•
동일한 키 페어: Bastion과 공유
보안 그룹 구성
•
SSH 접근: Bastion Host 프라이빗 IP만 허용
•
HTTP 접근: ALB 보안 그룹에서만 허용 (포트 80)
SSH 접근 및 키 관리
SSH Agent Forwarding
Bastion 접근
•
SSH 키 등록: ssh-add [키파일명]
•
키 확인: ssh-add -l
•
Agent Forwarding: ssh -A 옵션 사용
프라이빗 인스턴스 접근
•
2단계 접근: Bastion → 프라이빗 인스턴스
•
키 전달: Agent Forwarding으로 키 자동 전달
•
보안: 키 파일을 서버에 저장하지 않음
Docker 및 n8n 설정
Docker 설치 및 설정
•
표준 설치 과정: 공식 문서 명령어 활용
•
Hello World 테스트: 설치 검증
n8n 컨테이너 실행
환경 변수 설정
•
WEBHOOK_URL: 도메인 기반 설정
•
N8N_HOST: 실제 도메인 주소
•
프로토콜: HTTPS 설정
컨테이너 실행 옵션
•
데몬 모드: 백그라운드 실행
•
볼륨 마운트: 데이터 영속성
•
포트 매핑: 5678 포트 사용
Nginx 리버스 프록시 설정
Nginx 설치 및 구성
•
기본 설치: 패키지 매니저 활용
•
포트 80 리스닝: ALB에서 요청 수신
프록시 설정
Location 블록 구성
•
프록시 대상: localhost:5678 (n8n 컨테이너)
•
헤더 전달: 원본 요청 정보 유지
•
포트 매핑: 80 → 5678
Application Load Balancer (ALB) 구성
ALB 생성 및 설정
기본 구성
•
인터넷 페이싱: 외부 트래픽 수신
•
VPC 선택: 생성한 n8nvpc
•
서브넷: 퍼블릭 서브넷 선택 (다중 AZ)
보안 그룹 설정
•
HTTPS(443): 전체 허용
•
HTTP(80): 리다이렉션용 (추후 설정)
타겟 그룹 설정
타겟 구성
•
타겟 타입: EC2 인스턴스
•
포트: 80 (Nginx에서 수신)
•
헬스체크: HTTP 기반 상태 확인
타겟 등록
•
n8n 인스턴스: 프라이빗 서브넷의 인스턴스 등록
•
Pending 상태: 타겟 그룹 생성 시 포함
리스너 설정
HTTPS 리스너 (443)
•
SSL 인증서: ACM에서 발급받은 인증서 연결
•
타겟 그룹: n8n 인스턴스 타겟 그룹
HTTP 리스너 (80)
•
리다이렉션 설정: HTTP → HTTPS 자동 리다이렉션
•
영구 리다이렉션: 301 상태 코드
SSL 인증서 및 도메인 설정
ACM 인증서 발급
인증서 요청
•
퍼블릭 인증서: 무료 SSL 인증서
•
도메인 검증: DNS 기반 검증
•
CNAME 레코드: Route 53 자동 생성
Route 53 DNS 설정
A 레코드 구성
•
도메인: 서브도메인 설정
•
별칭(Alias): ALB 연결
•
리전: ALB와 동일한 리전 선택
DNS 전파
•
전파 시간: DNS 변경사항 적용 대기
•
확인 방법: nslookup 또는 dig 명령어
보안 그룹 세부 설정
트래픽 흐름별 보안 규칙
ALB → EC2 통신
•
EC2 보안 그룹: ALB 보안 그룹에서 포트 80 허용
•
소스: ALB 보안 그룹 ID 참조
헬스체크 허용
•
타겟 상태: Healthy/Unhealthy 확인
•
ALB 접근 권한: EC2 인스턴스 포트 80 개방
배포 검증 및 테스트
서비스 동작 확인
접근 테스트
•
도메인 접근: HTTPS를 통한 n8n 웹 인터페이스
•
리다이렉션: HTTP → HTTPS 자동 전환
•
SSL 인증서: 브라우저에서 SSL 상태 확인
타겟 그룹 상태
•
헬스체크: ALB 콘솔에서 타겟 상태 확인
•
트래픽 분산: 요청이 정상적으로 EC2로 전달되는지 검증
n8n 기능 확인
워크플로우 가져오기
•
파일 업로드: JSON 형태의 워크플로우 가져오기
•
템플릿 활용: 네이버 뉴스 스크래퍼 등 예제 워크플로우
•
키 설정: API 키 등 필요한 설정값 입력
운영 고려사항
확장성 및 가용성
•
다중 AZ: 고가용성 확보
•
오토 스케일링: 필요시 EC2 인스턴스 확장
•
로드 밸런싱: 트래픽 분산 처리
보안 모범 사례
•
최소 권한 원칙: 필요한 포트만 개방
•
계층화된 보안: Bastion → 프라이빗 서브넷
•
정기적인 보안 업데이트: OS 및 소프트웨어 패치
비용 최적화
•
NAT 게이트웨이: 필요시에만 사용
•
Elastic IP: 불필요한 고정 IP 최소화
•
인스턴스 타입: 워크로드에 맞는 적절한 크기 선택