Search

5. [부록] n8n AWS로 배포하기 (정석버전)

섹션
2. n8n은 어디에 쓸 수 있나요?

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 최소화
인스턴스 타입: 워크로드에 맞는 적절한 크기 선택