초보자도 할 수 있는 Terraform 일단 시작 해보자!

2023.06.29

소개

안녕하세요! 클래스메소드 금상원 입니다. 이번 블로그에서는 Windows EC2에 VPC엔드포인트를 생성하여 Fleet Manager로 접속하는 방법에 대해 알아보겠습니다.

Terraform 설치 하기

아래의 홈페이지에서 여러분들의 OS에 맞게 설치방법을 선택해서 설치해 주세요.

IAM Role 전환 설정 하기

테라폼 코드를 작성후 AWS 환경에 배포를 하기 위해서는 AWS CLI에서 IAM Role 전환을 할 필요가 있습니다.
매번 전환을 하거나 인증을 하고 업로드 하는 것이 불편 하기 때문에 아래의 블로그에서 aws-vault 를 설정하면 좋습니다.

디렉토리 구조(파일 구조)

tf
├── module
│   └── vpc_fd
│       └── variables.tf
│       └── vpc.tf
├── provider.tf
└── val_vpc.tf

위의 디렉토리 구조를 알기 쉽게 아래에 이미지를 첨부 했습니다.

Terraform으로 VPC 구축 해보기

각 AWS리소스를 구축하기 위한 코드는 아래의 홈페이지에서 예제를 확인 할 수 있습니다.

provider.tf 작성하기

provider.tf에서는 테라폼의 버전과 어느 AWS 리전에 구축을 할지 설정 합니다.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

val_vpc.tf 작성하기

val_vpc.tf 에서는 모듈의 변수에 대입을 할 값을 입력할 수 있습니다.
「source = "./module/vpc_fd"」부분에서는 변수가 정의되어 있는 파일이 들어있는 경로를 입력 합니다.

module "network" {
  source   = "./module/vpc_fd"
  cidr_vpc = "10.0.0.0/16"
  cidr_public1 = "10.0.1.0/24"
  cidr_public2 = "10.0.2.0/24"
  cidr_private1 = "10.0.11.0/24"
  cidr_private2 = "10.0.12.0/24"
  az1 = "ap-northeast-1a"
  az2 = "ap-northeast-1c"
}

variables.tf 작성하기

변수를 정의 하는 파일 입니다. 이 파일에 지정한 변수를 이용하여 VPC를 설정할 수 있습니다.

variable "cidr_vpc" {}
variable "cidr_public1" {}
variable "cidr_public2" {}
variable "cidr_private1" {}
variable "cidr_private2" {}
variable "az1" {}
variable "az2" {}

vpc.tf 작성하기

VPC를 구축하는 파일 입니다. 위에서 지정한 변수들을 이용하여 설정을 하였습니다.

resource "aws_vpc" "vpc" {
  cidr_block           = var.cidr_vpc
  instance_tenancy     = "default"
  enable_dns_hostnames = true
}

resource "aws_subnet" "public1" {
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = var.cidr_public1
  availability_zone = var.az1
}

resource "aws_subnet" "public2" {
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = var.cidr_public2
  availability_zone = var.az2
}

resource "aws_subnet" "private1" {
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = var.cidr_private1
  availability_zone = var.az1
}

resource "aws_subnet" "private2" {
  vpc_id            = aws_vpc.vpc.id
  cidr_block        = var.cidr_private2
  availability_zone = var.az2
}

코드 업로드 하기

IAM Role 변경 및 인증 후 아래의 명령어를 차례대로 입력합니다.

  • terraform init
  • terraform plan
  • terraform apply

위에서 aws-vault를 설정하신 분들은 아래의 명령어를 차례대로 입력합니다.

  • aws-vault exec [profile 명을 입력합니다.] -- terraform init
  • aws-vault exec [profile 명을 입력합니다.]-- terraform plan
  • aws-vault exec [profile 명을 입력합니다.] -- terraform apply

Terraform 사용후기

사용 후 가장 처음 느낀점은 수정 과 코드의 재활용이 편하다 라고 느꼈습니다.
CloudFormation 경우 스택을 삭제 후 다시 업로드 해야하는 번거로움이 있지만Terraform의 별다른 작업없이 다시 업로드 하면 반영이 되고, 변수를 이용하여 설정하기 때문에 한번 코드를 작성하면 다른 환경에서도 이용할 수 있어 구축 속도에 도움이 될것 같다 라고 생각했습니다.
하지만 진입장벽이 조금 높다고 생각 했습니다.
설치도 해야하고 IAM Role 설정도 해야하고 디렉토리의 구조등 처음에 이해할 것 들이 많아 손을 대기가 힘들었습니다.
그래서! 일단 보고 따라 구축 해보면 어느정도 감은 잡히기 때문에 간단한 것을 시작으로 하나 하나 구축에 도전 해보면 여러분들도 어느정도 이해하지 않을까 생각 합니다.

Terraform에 대한 추가적인 설명

마무리

이번 블로그에서는 Terraform을 사용하여 구축하는 방법에 대해 알아보았습니다.
처음에는 이해할 것들이 많고 진입장벽 높지만 일단 한번 도전 해보는 것이 중요하다고 생각합니다.
Terraform을 시작하시는 분들께 조금이나마 도움이 되었으면 좋겠습니다.

참고 자료

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !