클라우드 및 온프레미스 리소스를 안전하고 효율적으로 빌드, 변경 및 버전화할 수 있는 코드형 인프라 도구입니다.
API를 호출해 명령을 실행하는 절차적인 방법과 달리 HCL 언어로 선언적으로 클라우드 리소스를 정의하기 때문에 여러번 테라폼을 실행하더라도 여러 개의 리소스가 만들어지지 않는다는 장점을 가지고 있습니다.
어떠한 플랫폼이나 애플리케이션을 3계층으로 나누어 별도의 논리적/물리적인 장치에 구축 및 운영하는 형태입니다.
보통 프레젠테이션 계층, 어플리케이션 계층, 데이터 계층으로 분리합니다.
-
프젠테이션 계층
- 사용자가 애플리케이션과 상호작용하는 인터페이스
- 일반적으로 HTML, JS, CSS 등이 이 계층에 포함되며, 프론트엔드라고 불립니다.
-
애플리케이션 계층
- 요청되는 정보를 어떠한 규칙에 따라 처리하고 가공한다.
- 백엔드라고 불립니다.
-
데이터 계층
- 데이터 베이스와 데이터 베이스에 접근하여 데이터를 CRUD 합니다.
1. VPC 및 서브넷 설정
project/
└── vpc/
├── vpc.tf
├── subnets.tf
├── internet-gateway.tf
├── nat-gateway.tf
├── route-table.tf
├── variable.tf
└── outputs.tf
- 라우팅 테이블은 ip 주소에 대한 라우팅 경로를 설정합니다.
- Public과 Private을 나눠 설정하고 각각 Public, Private 서브넷에 연결한 후, 외부에서 내부로의 접근이 가능하도록 Public 서브넷만 인터넷 게이트와 연결합니다.
2. 보안 그룹 설정
- Source: 출발지, cidr_blocks 또는 Security Group
- Port: Source에서 들어오는 Port Number
| Security Group | Type | Protocol | Port | Source |
|---|---|---|---|---|
| INGRESS | SSH | TCP | 22 | 내 IP |
| INGRESS | HTTP | TCP | 80 | 내 IP |
| INGRESS | ICMP | ICMP | -1 | 내 IP |
| Security Group | Type | Protocol | Port | Source |
|---|---|---|---|---|
| INGRESS | SSH | TCP | 22 | VPC SG |
| INGRESS | HTTP | TCP | 80 | 0.0.0.0/0 |
| Security Group | Type | Protocol | Port | Source |
|---|---|---|---|---|
| INGRESS | SSH | TCP | 22 | VPC SG |
| INGRESS | Custom TCP | TCP | 8080 | 10.0.11.0/24, 10.0.12.0/24 |
| Security Group | Type | Protocol | Port | Source |
|---|---|---|---|---|
| INGRESS | MYSQL | TCP | 3306 | WAS SG |
| INGRESS | Custom TCP | TCP | 8080 | LB SG |
3. EC2 인스턴스 및 오토 스케일링 설정
project/
└── ec2/
├── instance.tf
├── bastion_instance.tf
├── autoscaling.tf
├── launch_configuration.tf
├── variable.tf
└── outputs.tf
- Bastion 호스트, 웹 서버, 애플리케이션 서버를 AWS EC2 인스턴스로 배포하고, 오토 스케일링을 통해 트래픽 증가에 따라 인스턴스를 자동으로 조정합니다.
4. 로드 밸런서 설정
project/
└── alb/
├── alb.tf
├── listener.tf
├── target_group.tf
└── variable.tf
- 인터넷 게이트웨이로 들어온 트래픽을 WEB으로 분산시킵니다.
- 가용영역을 public 서브넷으로 설정하고 vpc 보안그룹을 사용합니다.
- HTTP 프로토콜의 80포트를 타고 타겟을 찾아가도록 설정하였으며, 타겟 그룹은 private 서브넷으로 설정하였습니다.
- 내부 WEB으로 들어온 트래픽을 WAS로 분산시킵니다.
- 가용영역은 private 서브넷(web instance)로 설정하고 web 보안그룹 사용을, 타겟 그룹은 private 서브넷(was instance)으로 설정하였습니다.
이 프로젝트의 상세한 문서는 아래 링크에서 PDF 파일로 확인할 수 있습니다.



