테마
AWS Elastic IP와 AMI 완벽 가이드
EC2 인스턴스의 고정 IP 관리와 머신 이미지 활용법을 다룹니다.
목차
Part 1: Elastic IP (탄력적 IP)
1. 문제 상황: Public IP가 매번 변경된다
EC2 인스턴스를 처음 만들면 AWS가 자동으로 **Public IP(공인 IP)**를 하나 할당해줍니다. 하지만 여기에 치명적인 문제가 있습니다.
인스턴스를 중지(Stop)했다가 다시 시작(Start)하면 Public IP가 바뀝니다
이것은 AWS의 기본 동작입니다. 인스턴스를 중지하면 AWS는 해당 Public IP를 회수하고, 다시 시작할 때 새로운 IP를 할당합니다.
왜 문제가 되는가?
| 상황 | 영향 |
|---|---|
| 웹 서비스 운영 중 | DNS(Domain Name System)에 등록한 IP가 무효화됨 |
| API 서버 운영 중 | 클라이언트가 접속할 엔드포인트(Endpoint)가 바뀜 |
| SSH 접속 | 매번 새로운 IP로 접속해야 함 |
| 방화벽 설정 | 허용 IP가 바뀌어 접근 차단됨 |
| 모니터링 시스템 | IP 기반 모니터링 설정이 깨짐 |
예를 들어, 여러분이 http://13.124.50.100이라는 IP로 웹 서비스를 운영하고 있다고 합시다. 서버 점검을 위해 인스턴스를 중지했다가 다시 시작하면, IP가 http://54.180.22.33처럼 완전히 다른 주소로 바뀝니다. 이렇게 되면 기존 사용자들은 서비스에 접속할 수 없게 됩니다.
핵심 포인트
- 중지(Stop) / 시작(Start): Public IP가 변경됨
- 재부팅(Reboot): Public IP가 유지됨 (인스턴스가 꺼지지 않으므로)
- 종료(Terminate): 인스턴스 자체가 삭제됨
서비스 운영 시 고정 IP는 선택이 아니라 필수입니다. 이 문제를 해결하기 위해 AWS가 제공하는 것이 바로 Elastic IP입니다.
2. Elastic IP란?
**Elastic IP(탄력적 IP)**는 AWS에서 제공하는 고정 공인 IPv4 주소입니다.
한 번 할당받으면 사용자가 직접 해제(릴리즈)하기 전까지는 절대 변하지 않습니다. 이 고정 IP를 EC2 인스턴스에 연결(Associate)하면, 인스턴스를 중지했다가 다시 시작해도 항상 같은 IP로 접속할 수 있습니다.
Elastic IP의 핵심 특징
| 특징 | 설명 |
|---|---|
| 고정성 | 한 번 할당받으면 릴리즈하기 전까지 IP 주소가 변하지 않음 |
| 이동성 | 하나의 인스턴스에서 다른 인스턴스로 빠르게 재연결 가능 |
| 리전 종속 | Elastic IP는 특정 리전(Region)에 귀속됨. 서울 리전에서 할당받은 IP를 도쿄 리전에서 사용 불가 |
| 1:1 매핑 | 하나의 Elastic IP는 한 번에 하나의 인스턴스에만 연결 가능 |
| 계정 제한 | 기본적으로 리전당 5개까지 할당 가능 (AWS에 요청하면 증가 가능) |
Elastic IP 동작 원리
Elastic IP를 인스턴스에 연결하면, 기존에 자동 할당된 Public IP는 사라지고 Elastic IP가 그 자리를 대체합니다. 연결을 해제하면 다시 자동 Public IP가 할당됩니다 (단, 이전과 다른 IP).
[Elastic IP 연결 전]
인스턴스 → Private IP: 10.0.1.50 / Public IP: 13.124.50.100 (자동 할당, 변동)
[Elastic IP 연결 후]
인스턴스 → Private IP: 10.0.1.50 / Public IP: 52.78.100.200 (Elastic IP, 고정)3. Elastic IP 비용 정책
Elastic IP의 비용 정책은 직관과 반대이기 때문에 반드시 이해해야 합니다.
핵심 원칙: "쓰면 무료, 안 쓰면 유료"
| 상태 | 비용 | 이유 |
|---|---|---|
| Elastic IP가 실행 중인 인스턴스에 연결되어 있음 | 무료 | IP를 정상적으로 활용하고 있으므로 |
| Elastic IP를 할당만 받고 인스턴스에 연결하지 않음 | 유료 | IP 주소를 낭비하고 있으므로 |
| Elastic IP가 중지된 인스턴스에 연결되어 있음 | 유료 | 인스턴스가 동작하지 않으니 실질적으로 IP를 사용하지 않는 것 |
| 하나의 인스턴스에 2개 이상의 Elastic IP 연결 | 첫 번째는 무료, 추가분은 유료 | 하나의 인스턴스에 여러 IP는 낭비로 간주 |
왜 이런 정책인가?
IPv4 주소는 전 세계적으로 고갈 상태입니다. 총 약 43억 개의 IPv4 주소 중 사용 가능한 주소가 거의 남아있지 않습니다. AWS는 이 귀중한 자원을 누군가가 할당만 받고 사용하지 않는 것을 방지하기 위해, 미사용 시 비용을 부과하는 정책을 채택했습니다.
2024년 2월부터 AWS는 모든 퍼블릭 IPv4 주소에 대해 시간당 $0.005의 비용을 부과하기 시작했습니다. Elastic IP 역시 이 정책에 포함됩니다. 실습 후에는 반드시 릴리즈하세요!
비용 발생 시나리오 예시
시나리오: Elastic IP를 할당받고 깜빡 잊고 릴리즈하지 않은 경우
- 시간당 비용: 약 $0.005
- 일일 비용: 약 $0.12
- 월간 비용: 약 $3.6
- 연간 비용: 약 $43.8
→ 금액 자체는 크지 않지만, 여러 개를 방치하면 불필요한 비용이 누적됩니다!4. Elastic IP 실습 흐름
Elastic IP의 전체 라이프사이클(Lifecycle)을 상태 다이어그램으로 살펴보겠습니다.
단계별 실습 가이드
Step 1: Elastic IP 할당 (Allocate)
- AWS 콘솔 → EC2 → 왼쪽 메뉴에서 Elastic IPs 클릭
- Allocate Elastic IP address 버튼 클릭
- 네트워크 경계 그룹(Network Border Group)은 기본값 유지
- Allocate 클릭
- 고정 IP 주소가 할당됨 (예:
52.78.100.200)
이 시점에서 IP는 할당되었지만 인스턴스에 연결되지 않은 상태입니다. 비용이 발생하고 있습니다!
Step 2: 인스턴스에 연결 (Associate)
- 할당된 Elastic IP 선택
- Actions → Associate Elastic IP address 클릭
- 리소스 타입(Resource type): Instance 선택
- 연결할 인스턴스(Instance) 선택
- Associate 클릭
연결이 완료되면:
- 인스턴스의 Public IP가 Elastic IP(
52.78.100.200)로 변경됨 - 기존 자동 할당 Public IP는 사라짐
Step 3: IP 유지 확인
- 인스턴스를 중지(Stop) → Public IP 확인 →
52.78.100.200유지! - 인스턴스를 시작(Start) → Public IP 확인 →
52.78.100.200유지!
일반 Public IP였다면 중지 후 재시작 시 IP가 바뀌었을 것입니다. Elastic IP 덕분에 IP가 유지됩니다.
Step 4: 연결 해제 (Disassociate)
- Elastic IP 선택
- Actions → Disassociate Elastic IP address 클릭
- Disassociate 클릭
해제 후 인스턴스에는 새로운 자동 Public IP가 할당됩니다. Elastic IP는 여전히 계정에 할당된 상태이므로 비용이 발생합니다!
Step 5: IP 반환 (Release)
- Elastic IP 선택
- Actions → Release Elastic IP address 클릭
- Release 클릭
릴리즈하면 해당 IP 주소는 AWS IP 풀로 돌아갑니다. 더 이상 비용이 발생하지 않습니다. 실습이 끝나면 반드시 릴리즈하세요!
실습 전후 비교: 일반 Public IP vs Elastic IP
Part 2: AMI (Amazon Machine Image)
1. AMI란?
**AMI(Amazon Machine Image)**는 EC2 인스턴스를 만들기 위한 **템플릿(Template)**입니다. 운영체제(OS), 설치된 프로그램, 파일, 설정 등 인스턴스의 현재 상태를 통째로 캡처한 이미지라고 이해하면 됩니다.
쉬운 비유: 컴퓨터의 "고스트 이미지"
예전에 PC방이나 학교 컴퓨터실에서 사용하던 고스트(Ghost) 이미지를 떠올려 보세요.
- 컴퓨터 한 대에 Windows를 설치하고, 필요한 프로그램(한글, Excel, 게임 등)을 전부 설치
- 이 완벽한 상태를 이미지 파일로 저장
- 나머지 컴퓨터 50대에 이 이미지를 복제하면 동일한 환경이 순식간에 완성
AMI가 바로 이것입니다! AWS 클라우드 버전의 고스트 이미지입니다.
AMI에 포함되는 것들
| 구성 요소 | 설명 | 예시 |
|---|---|---|
| 루트 볼륨 템플릿 | OS가 설치된 메인 디스크 이미지 | Amazon Linux 2, Ubuntu 22.04 |
| 시작 권한 | 어떤 AWS 계정이 이 AMI를 사용할 수 있는지 | 퍼블릭, 특정 계정, 비공개 |
| 블록 디바이스 매핑 | 인스턴스에 연결할 EBS 볼륨 정보 | 루트 볼륨 30GB, 추가 데이터 볼륨 100GB |
| 설치된 소프트웨어 | OS 위에 설치된 모든 프로그램과 라이브러리 | Python 3.11, Node.js 20, Docker |
| 파일 및 설정 | 사용자가 생성한 파일과 시스템 설정 | 설정 파일, 소스 코드, 데이터 |
AMI와 인스턴스의 관계
AMI (설계도) → EC2 인스턴스 (실제 서버)
↓
동일한 AMI로 여러 인스턴스 생성 가능
↓
인스턴스 A 인스턴스 B 인스턴스 C
(서울 리전) (서울 리전) (도쿄 리전에 복사 후 사용)AMI는 붕어빵 틀, 인스턴스는 붕어빵이라고 생각하면 됩니다. 하나의 틀(AMI)로 동일한 붕어빵(인스턴스)을 얼마든지 찍어낼 수 있습니다.
2. 기본 제공 AMI
EC2 인스턴스를 생성할 때 가장 먼저 하는 것이 AMI를 선택하는 것입니다. AWS는 다양한 기본 제공 AMI를 무료로 제공합니다.
주요 기본 AMI 종류
| AMI 이름 | 설명 | 특징 |
|---|---|---|
| Amazon Linux 2023 | AWS가 직접 만든 리눅스 배포판 | AWS 서비스와 최적 호환, 보안 업데이트 빠름 |
| Amazon Linux 2 | 이전 세대 Amazon Linux | 아직 널리 사용됨, 2025년 6월까지 지원 |
| Ubuntu Server 24.04 LTS | Canonical의 리눅스 배포판 | 가장 인기 있는 리눅스, 풍부한 커뮤니티 |
| Red Hat Enterprise Linux 9 | 기업용 리눅스 | 엔터프라이즈 지원, 별도 라이선스 비용 |
| SUSE Linux Enterprise | 유럽 중심 기업용 리눅스 | SAP 워크로드에 최적화 |
| Windows Server 2022 | Microsoft Windows 서버 | .NET, IIS 등 Windows 생태계 |
| macOS Ventura | Apple macOS | iOS/macOS 앱 개발용 (전용 호스트 필요) |
AMI 선택 화면 (EC2 인스턴스 생성 시)
AWS 콘솔에서 인스턴스를 시작하면 아래 탭이 나타납니다:
- Quick Start: Amazon Linux, Ubuntu 등 자주 쓰는 AMI 모음
- My AMIs: 내가 직접 만든 커스텀 AMI
- AWS Marketplace: 서드파티가 만든 특수 목적 AMI
- Community AMIs: 커뮤니티에서 공유한 AMI
학습 및 개발 목적이라면 Amazon Linux 2023이나 Ubuntu Server의 프리 티어(Free Tier) AMI를 선택하는 것이 좋습니다.
3. 커스텀 AMI 만들기
기본 AMI에 원하는 프로그램과 파일을 설치한 후, 그 상태를 AMI로 저장할 수 있습니다. 이것이 **커스텀 AMI(Custom AMI)**입니다.
AMI 생성에서 배포까지 전체 흐름
실습 예시: 웹 서버 AMI 만들기
Step 1: 기본 인스턴스 준비
bash
# Amazon Linux 2023 인스턴스에 SSH 접속 후
# 테스트용 디렉토리와 파일 생성
mkdir -p /home/ec2-user/test
echo "Hello from AMI!" > /home/ec2-user/test/hello.txt
# 웹 서버 설치
sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginxStep 2: AMI 생성
- AWS 콘솔 → EC2 → 인스턴스 선택
- Actions → Image and templates → Create image
- 이미지 이름 입력:
my-web-server-v1 - 설명 입력:
Nginx 설치, 테스트 파일 포함 - No reboot 옵션:
- 체크 안 함(기본): 인스턴스를 잠시 중지 후 이미지 생성 → 데이터 무결성 보장
- 체크함: 중지 없이 생성 → 빠르지만 파일 시스템 일관성 보장 안 됨
- Create image 클릭
Step 3: AMI로 새 인스턴스 생성
- EC2 → AMIs → 생성한 AMI 확인 (상태:
available) - AMI 선택 → Launch instance from AMI 클릭
- 인스턴스 타입, 키 페어 등 설정 후 시작
- 새 인스턴스에 SSH 접속하면:
bash
# 원본 인스턴스에서 만들었던 파일이 그대로 있음!
cat /home/ec2-user/test/hello.txt
# 출력: Hello from AMI!
# Nginx도 이미 설치되어 있음!
sudo systemctl status nginx
# 출력: active (running)커스텀 AMI를 사용하면 서버 환경을 처음부터 다시 구축할 필요 없이, 동일한 환경을 몇 분 만에 복제할 수 있습니다.
4. AWS Marketplace
AWS Marketplace는 AMI를 위한 **앱스토어(App Store)**입니다. 다른 회사나 개발자가 만든 특수 목적의 AMI를 검색하고, 바로 EC2 인스턴스로 실행할 수 있습니다.
AWS Marketplace AMI 유형
| 유형 | 예시 | 특징 |
|---|---|---|
| 무료 AMI | WordPress, LAMP Stack, Jenkins | 소프트웨어 비용 없음, EC2 비용만 발생 |
| 유료 AMI | 상용 DB, 보안 솔루션, SAP | 소프트웨어 라이선스 비용 + EC2 비용 |
| BYOL (Bring Your Own License) | Oracle DB, Windows 등 | 기존 라이선스 사용 가능 |
인기 Marketplace AMI 예시
| 카테고리 | AMI 이름 | 설명 |
|---|---|---|
| 딥러닝(Deep Learning) | AWS Deep Learning AMI | TensorFlow, PyTorch 등 사전 설치 |
| 웹 호스팅 | Bitnami WordPress | WordPress + Apache + MySQL 풀 스택 |
| CI/CD | Jenkins on Amazon Linux | Jenkins 서버 즉시 실행 |
| 보안 | Sophos Firewall | 네트워크 보안 어플라이언스 |
| 데이터베이스 | MongoDB Community | MongoDB 사전 구성 |
| 컨테이너 | Amazon ECS Optimized | Docker + ECS Agent 최적화 |
Marketplace 사용 흐름
- AWS Marketplace 접속 (https://aws.amazon.com/marketplace)
- 원하는 소프트웨어 검색 (예: "TensorFlow")
- AMI 상세 정보 확인 (가격, 리전, 인스턴스 타입 호환성)
- Subscribe → Launch → EC2 인스턴스 설정
- 모든 것이 사전 설치된 인스턴스 즉시 사용!
딥러닝 환경을 직접 구축하려면 CUDA, cuDNN, TensorFlow, PyTorch 등을 일일이 설치해야 하는데, 버전 호환성 문제로 며칠씩 걸릴 수 있습니다. Marketplace AMI를 사용하면 몇 분 만에 완벽한 딥러닝 환경을 얻을 수 있습니다.
5. AMI 활용 시나리오
시나리오 1: Auto Scaling에 활용
웹 서비스의 트래픽이 급증할 때, 동일한 서버를 자동으로 추가 생성해야 합니다. 이때 AMI가 핵심 역할을 합니다.
[트래픽 급증 시 Auto Scaling 동작]
1. 서버 프로그램이 완벽히 설치된 AMI 준비 (커스텀 AMI)
2. Auto Scaling Group에 이 AMI 등록
3. 트래픽 증가 감지 → 자동으로 AMI 기반 인스턴스 추가 생성
4. 트래픽 감소 → 자동으로 추가 인스턴스 종료
평상시 트래픽 급증 시
┌──────────┐ ┌──────────┐
│ 인스턴스1 │ │ 인스턴스1 │
│ (AMI 기반) │ │ (AMI 기반) │
└──────────┘ ├──────────┤
│ 인스턴스2 │ ← AMI로 자동 생성
│ (AMI 기반) │
├──────────┤
│ 인스턴스3 │ ← AMI로 자동 생성
│ (AMI 기반) │
└──────────┘Auto Scaling이 새 인스턴스를 만들 때마다 서버 프로그램을 처음부터 설치한다면 시간이 너무 오래 걸립니다. AMI에 모든 것이 준비되어 있으므로, 인스턴스가 시작되자마자 바로 서비스 투입이 가능합니다.
시나리오 2: 동일 환경 빠른 복제
개발팀에서 모든 개발자가 동일한 개발 환경을 사용해야 할 때:
[전통적 방식]
개발자 A: "내 PC에서는 되는데?" → Python 3.10 사용 중
개발자 B: "내 PC에서는 안 되는데?" → Python 3.8 사용 중
개발자 C: "라이브러리 버전이 다른 것 같아요" → numpy 1.24 vs 1.21
[AMI 방식]
팀 리드: 개발 환경 AMI 생성 (Python 3.11 + 모든 라이브러리 + IDE 설정)
개발자 A: AMI로 인스턴스 생성 → 동일 환경
개발자 B: AMI로 인스턴스 생성 → 동일 환경
개발자 C: AMI로 인스턴스 생성 → 동일 환경
→ "내 PC에서는 되는데?" 문제 해결!시나리오 3: 재해 복구 (Disaster Recovery)
- 서울 리전에서 운영 중인 서버의 AMI를 주기적으로 생성
- 해당 AMI를 도쿄 리전으로 복사
- 서울 리전에 장애 발생 시, 도쿄 리전에서 AMI로 즉시 서버 복구
시나리오 4: 블루/그린 배포 (Blue/Green Deployment)
- 현재 운영 환경(Blue): v1.0 AMI 기반 인스턴스
- 새 버전 배포 시: v2.0 AMI 생성 → 새 인스턴스(Green) 실행
- 테스트 통과 후 트래픽을 Green으로 전환
- 문제 발생 시 Blue로 즉시 롤백 가능
AMI 생태계 전체 구조
비용 주의사항 총정리
실습이 끝나면 반드시 아래 사항을 확인하세요. 방치하면 불필요한 비용이 발생합니다.
Elastic IP 비용 체크리스트
| 확인 항목 | 조치 |
|---|---|
| 사용하지 않는 Elastic IP가 있는가? | 즉시 릴리즈(Release) |
| Elastic IP가 중지된 인스턴스에 연결되어 있는가? | 인스턴스를 시작하거나 Elastic IP를 릴리즈 |
| 하나의 인스턴스에 여러 Elastic IP가 연결되어 있는가? | 불필요한 Elastic IP를 해제 후 릴리즈 |
AMI 비용 체크리스트
| 확인 항목 | 조치 |
|---|---|
| 사용하지 않는 커스텀 AMI가 있는가? | AMI 등록 해제(Deregister) |
| AMI 생성 시 만들어진 스냅샷(Snapshot)이 남아있는가? | 스냅샷 삭제(Delete) |
| 여러 리전에 AMI를 복사했는가? | 각 리전에서 개별적으로 AMI 등록 해제 + 스냅샷 삭제 |
AMI를 등록 해제해도 스냅샷은 자동 삭제되지 않습니다! AMI 등록 해제 후 반드시 EC2 → Elastic Block Store → Snapshots에서 관련 스냅샷을 수동으로 삭제해야 합니다.
비용 방지 최종 정리 순서
1. EC2 인스턴스 종료 (Terminate)
2. Elastic IP 릴리즈 (Release)
3. AMI 등록 해제 (Deregister)
4. EBS 스냅샷 삭제 (Delete Snapshot)
5. EBS 볼륨 삭제 (Delete Volume) - 인스턴스 종료 시 자동 삭제 설정이 아닌 경우핵심 요약
Elastic IP
- EC2 인스턴스의 고정 공인 IP 서비스
- 인스턴스를 중지/재시작해도 IP가 변하지 않음
- 사용 중이면 무료, 미사용 시 비용 발생
- 실습 후 반드시 릴리즈 필요
AMI
- EC2 인스턴스의 스냅샷/이미지 (OS + 프로그램 + 파일)
- 동일한 환경의 인스턴스를 빠르게 복제 가능
- 기본 AMI (AWS 제공) / 커스텀 AMI (직접 생성) / Marketplace AMI (서드파티)
- Auto Scaling, 재해 복구, 블루/그린 배포 등에 활용
- AMI 등록 해제 후 스냅샷도 별도 삭제 필요