
테라폼 설치
테라폼?
테라폼은 HCL 기반의 IAC 프로비저닝 도구이다.
HCL (HashCorp Configuration Language) : 하시코프 설정 언어 기반이다.
IAC (Infrastructure As Code) : 코드로 인프라 리소스를 관리한다는 개념이다.
[IAC의 기능]
- 프로비저닝 : 서버 운영에 필요한 라이브러리나 서비스를 설치하고, 네트워크 VM 등을 구성한다.
※ 한 줄 요약 : 테라폼을 통해 복잡한 AWS 관련 인프라 구성을 코드를 통해 간편하게 자동화하며,
이를 통해 서버를 구축 / 운영을 코드 레벨에서 진행할 수 있다.
테라폼 설치
아래의 링크에서 테라폼을 설치한다.
Install | Terraform | HashiCorp Developer
Explore Terraform product documentation, tutorials, and examples.
developer.hashicorp.com

별도 환경 변수 설정을 위해 C: 예하의 디렉터리를 별도 만들었다.
C:\lib\terraform
압축 해제 후 exe 파일을 별도 생성한 디렉토리에 넣는다.
환경변수 설정

terraform.exe가 위치한 폴더에 환경변수를 적용함으로써 이후 터미널에서 테라폼 실행이 가능하다.
테라폼 연결 확인
터미널 / bash
$ terraform
# 혹은 terraform.exe

테라폼을 통해 VPC를 생성하기 위해 플러그인 terraform 검색 후 Terraform and HCL를 설치한다.
IntelliJ IDEA

IntelliJ IDEA 테라폼 프로젝트를 실행할 빈 디렉터리 생성 후 IDEA로 실행한다.
테라폼을 통한 AWS VPC 생성
main.tf 추가 → terraform init → terraform apply → 'yes'
main.tf 추가
main.tf
terraform {
// 자바의 import 와 비슷함
// aws 라이브러리 불러옴
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
# Configure the AWS Provider
provider "aws" {
region = "ap-northeast-2"
}
# ip의 할당 대역
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "example"
}
}
main.tf 파일을 루트 디렉토리 예하에 추가한다.
터미널 / bash
$ terraform init
- 라이브러리 및 기본 구성 설정을 main.tf 기반해서 다운로드한다.
- 관련 실행 소스코드가 바뀔 때마다 실행해야 한다.

터미널 / bash
$ terraform plan
- 소스코드가 실행 가능한지 검사하는 명령어이다.
- 이후 apply 시 무슨 빌드가 실행될 지 계획을 알려준다.

터미널 / bash
$ terraform apply
- 현재 이후 plan에 의거해 이후의 실행할 내역을 적용한다.

이후 yes 를 입력해 진행

AWS에서 VPC가 생성된 걸 확인했다.

테라폼을 통한 VPC 삭제 시
반대로 삭제하고 싶으면 terraform destroy, yes를 터미널 / bash에 입력하면 된다.
테라폼을 통한 VPC, 서브넷 생성
main.tf를 수정하기 전에 전역 변수 설정을 진행한다. (필수는 아님)
variable.tf
variable "prefix" {
description = "Prefix for all resources"
default = "dev"
}
variable "region" {
description = "region"
default = "ap-northeast-2"
}
variable "nickname" {
description = "nickname"
default = "jhs512"
}
테라폼에서는 변수를 설정하면 .tf파일은 별도 import 필요 없이 해당 환경 변수들을 공유할 수 있는 기능이 있다.
아래는 variable.tf를 설정함으로써 리팩토링한 main.tf이다. + 서브넷 생성
main.tf
// 테라폼 설정의 시작
terraform {
// 필요한 프로바이더(클라우드 서비스 제공자)를 설정
required_providers {
// AWS 프로바이더를 사용한다고 선언
aws = {
// AWS 프로바이더의 출처를 hashicorp/aws로 지정
source = "hashicorp/aws"
// AWS 프로바이더의 버전을 4.0 이상으로 지정
version = "~> 4.0"
}
}
}
// AWS를 제공자로 사용한다고 선언
provider "aws" {
// AWS에서 사용할 리전을 변수로부터 받아옴
region = var.region
}
// AWS VPC(Virtual Private Cloud) 리소스를 생성하고 이름을 'vpc_1'로 설정
resource "aws_vpc" "vpc_1" {
// VPC의 IP 주소 범위를 설정
cidr_block = "10.0.0.0/16"
// DNS 지원을 활성화
enable_dns_support = true
// DNS 호스트 이름 지정을 활성화
enable_dns_hostnames = true
// 리소스에 대한 태그를 설정
tags = {
Name = "${var.prefix}-vpc-1"
}
}
// AWS 서브넷 리소스를 생성하고 이름을 'subnet_1'로 설정
resource "aws_subnet" "subnet_1" {
// 이 서브넷이 속할 VPC를 지정. 여기서는 'vpc_1'를 선택
vpc_id = aws_vpc.vpc_1.id
// 서브넷의 IP 주소 범위를 설정
cidr_block = "10.0.1.0/24"
// 서브넷이 위치할 가용 영역을 설정
availability_zone = "${var.region}a"
// 이 서브넷에 배포되는 인스턴스에 공용 IP를 자동으로 할당
map_public_ip_on_launch = true
// 리소스에 대한 태그를 설정
tags = {
Name = "${var.prefix}-subnet-1"
}
}
// AWS 서브넷 리소스를 생성하고 이름을 'subnet_2'로 설정
resource "aws_subnet" "subnet_2" {
// 이 서브넷이 속할 VPC를 지정. 여기서는 'vpc_1'를 선택
vpc_id = aws_vpc.vpc_1.id
// 서브넷의 IP 주소 범위를 설정
cidr_block = "10.0.2.0/24"
// 서브넷이 위치할 가용 영역을 설정
availability_zone = "${var.region}b"
// 이 서브넷에 배포되는 인스턴스에 공용 IP를 자동으로 할당
map_public_ip_on_launch = true
// 리소스에 대한 태그를 설정
tags = {
Name = "${var.prefix}-subnet-2"
}
}
- dns support, dns hostname은 dns 통신을 위해서 반드시 true로 enable 설정해야 한다.
- 가용영역은 통상 regiona, regionb 이런 식으로 할당해서 설정해 준다.

- VPC 및 서브넷이 생성되었으며, 라우팅 테이블은 자동으로 생성이 된다.
- VPC를 생성할 때 AWS는 자동으로 VPC에 대한 기본 라우팅 테이블을 생성하며,
- 이 기본 라우팅 테이블은 VPC 내부 트래픽을 자동으로 처리하도록 구성되어 있다.
- 모든 서브넷이 기본적으로 생성되는 라우팅 테이블을 통해 사용되게끔 정책이 설정되어 있다.
'DEV > Infra' 카테고리의 다른 글
| [AWS] 테라폼 활용 게이트웨이, 라우팅 테이블, 보안 그룹 생성 (0) | 2024.02.22 |
|---|---|
| [AWS] IAM, VPC의 개념, AWS CLI 설치, 엑세스 코드 발급 (0) | 2024.02.22 |
| [NCP, Docker, Github Actions] 를 활용한 CI / CD 구축 (4) | 2024.01.09 |
| [트러블슈팅] Docker, Linux no space left on device 해결 방법 (1) | 2024.01.08 |
| [NCP, 도커] 서버 생성부터 배포까지 (4 / 4) (1) | 2024.01.08 |