본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

87일차 - AWS, Git과 테라폼 연결하기, 테라폼 명령어

테라폼 플러그인 설치, Git 연결

1. 빈 폴더 생성하여 인텔리제이로 열기

2. main.tf 파일을 추가하고, 추천 플러그인 알림창이 뜨면 플러그인 설치

3. .gitignore 파일 추가
https://www.toptal.com/developers/gitignore/api/intellij,terraform

 

AWS 콘솔에서 VPC 관련한 필요 없는 것들(기본 생성된 것들) 삭제 => VPC, DHCP 옵션 세트

체크한 후, 작업 > VPC 삭제


인텔리제이에서 terraform 다루기

세팅

terraform {
  # terraform login 후에 사용 가능
  cloud {
    organization = "og-1" # 테라폼 클라우드에서 만든 organization 이름

    # terraform cloud에서 설정한 workspace의 이름과 동일해야 함
    workspaces {
      name = "ws-1"
    }
  }

  # 자바의 import와 비슷한 기능
  # aws 라이브러리를 불러온다.
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

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

resource "aws_vpc" "example" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "example"
  }
}

- "10.0.0.0/16" // 16 -> 서브넷 마스크 255.255.0.0 => 가용한 네트워크는 10.0.0.0 ~ 10.0.255.255

- VPC는 리전 단위, 서브넷은 가용 영역 단위

- 위와 같이 설정 후에 터미널에서 terraform init 명령어 입력

 

terraform init

필요한 소스들을 다운로드한다.

 

terraform fmt

자동 포맷팅 기능

 

terraform plan

작성한 코드를 분석하고, 테라폼 명령을 계획한다.

 

terraform apply

작성한 코드를 실제 적용한다. (+ plan)

Enter a value : yes 입력

===> example 이라는 이름의 VPC 생성 (+ 라우팅 테이블 등 같이 생성됨)

- States에서 현재 상태를 확인할 수 있다.

 

terraform destroy

현재 코드를 기반으로 생성된 VPC, 라우팅 테이블 등이 모두 삭제된다.


서브넷 생성

resource "aws_subnet" "example" {
  vpc_id = aws_vpc.example.id
  cidr_block = "10.0.1.0/24"
  availability_zone = "ap-northeast-2a" # 가용 영역 지정

  tags = {
    Name = "example_subnet"
  }
}

variables.tf 도입(중복 제거)

variable "region" {
  description = "region" # "region" variable에 관한 설명
  default = "ap-northeast-2" # 변수의 값
}

아래와 같이 바꿀 수 있다.

...

provider "aws" {
  region = var.region # ap-northeast-2
}

...
resource "aws_subnet" "example" {
  vpc_id = aws_vpc.example.id
  cidr_block = "10.0.1.0/24"
  availability_zone = "${var.region}a" # ap-northeast-2a
  
  ...
}

작성 완료된 코드

main.tf

terraform {
  cloud {
    organization = "yuri-og-1"

    workspaces {
      name = "yuri-ws-1"
    }
  }

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

provider "aws" {
  region = var.region
}

resource "aws_vpc" "vpc_1" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "${var.prefix}-vpc-1"
  }
}

resource "aws_subnet" "sub_1" {
  vpc_id = aws_vpc.vpc_1.id
  cidr_block = "10.0.1.0/24"
  availability_zone = "${var.region}a"

  tags = {
    Name = "${var.prefix}-sub-1"
  }
}

 

variables.tf

variable "prefix" {
  description = "Prefix for all resources"
  default = "dev"
}

variable "region" {
  description = "region"
  default = "ap-northeast-2"
}