
테라폼 설치
테라폼?
테라폼은 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 > Infrastructure' 카테고리의 다른 글
[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 |