DEV/Infrastructure

[AWS, IntelliJ] 테라폼 설치, 테라폼 활용 VPC, 서브넷 설정

Bi3a 2024. 2. 22. 17:28

목차
반응형

인프라에 대해 학습합시다.


 

테라폼 설치

테라폼?

테라폼은 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

 

윈도우는 386을 다운받으면 된다.

 

 

별도 환경 변수 설정을 위해 C: 예하의 디렉터리를 별도 만들었다.

 

C:\lib\terraform

압축 해제 후 exe 파일을 별도 생성한 디렉토리에 넣는다.

 

환경변수 설정

 

환경 변수 설정

 

terraform.exe가 위치한 폴더에 환경변수를 적용함으로써 이후 터미널에서 테라폼 실행이 가능하다.

 

테라폼 연결 확인

 

터미널 / bash

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

bash
닫기
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

bash
닫기
$ terraform init

 

  • 라이브러리 및 기본 구성 설정을 main.tf 기반해서 다운로드한다.
  • 관련 실행 소스코드가 바뀔 때마다 실행해야 한다.

 

init 정상 확인
init이 잘 되었다.

 

터미널 / bash

bash
닫기
$ terraform plan

 

  • 소스코드가 실행 가능한지 검사하는 명령어이다.
  • 이후 apply 시 무슨 빌드가 실행될 지 계획을 알려준다.

 

apply 시 이후 create 가 정상적으로 이루어진다.
이후 apply 시 create가 실행될 것이라고 표시되고 있다.

 

터미널 / bash

bash
닫기
$ terraform apply

 

  • 현재 이후 plan에 의거해 이후의 실행할 내역을 적용한다.

 

yes를 입력해 진행한다.

 

이후 yes 를 입력해 진행

 

yes 입력하라고!

 

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

vpc 생성 확인

 

 

테라폼을 통한 VPC 삭제 시

반대로 삭제하고 싶으면 terraform destroy, yes를 터미널 / bash에 입력하면 된다.

 

 

테라폼을 통한 VPC, 서브넷 생성

main.tf를 수정하기 전에 전역 변수 설정을 진행한다. (필수는 아님)

 

variable.tf

bash
닫기
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

bash
닫기
// 테라폼 설정의 시작
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 및 서브넷이 생성되었으며, 라우팅 테이블은 자동으로 생성이 된다.
  • VPC를 생성할 때 AWS는 자동으로 VPC에 대한 기본 라우팅 테이블을 생성하며,
  • 이 기본 라우팅 테이블은 VPC 내부 트래픽을 자동으로 처리하도록 구성되어 있다.
  • 모든 서브넷이 기본적으로 생성되는 라우팅 테이블을 통해 사용되게끔 정책이 설정되어 있다.

 

 


 

반응형