본문 바로가기
Terraform/AWS and 테라폼: Infrastructure as

[AWS and 테라폼: Infrastructure as Code] Terraform 구성요소

by 개발자 영만 2024. 1. 19.

Terraform 구성요소


  • provider
    테라폼으로 생성할 인프라의 종류를 의미한다.
  • resource
    테라폼으로 실제로 생성할 인프라 자원을 의미한다.
  • state
    테라폼을 통해 생성한 자원의 상태를 의미한다.
  • output
    테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것을 의미한다.
  • module
    공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것을 의미한다.
  • remote
    다른 경로의 state를 참조하는 것을 말한다. output 변수를 불러올 때 주로 사용한다.
     

Terraform provider

# 보통 provider.tf 로 파일을 생성한다.
# AWS Provider
provider "aws" {
    region = "ap-northeast-2"
    version = "~> 3.0"
}

Provider 안에서 다양한 Arguments를 가진다.
AWS resource를 다루기 위한 파일들을 다운로드 하는 역할을 한다.
 

Terraform resource

# main.tf, vpc.tf 등 원하는 형태로 파일이름을 사용한다.
# Create a VPC
resource "aws_vpc" "example" {
    cidr_block = "10.0.0.0/16"
    # cidr_block 이외에도 수많은 인자가 존재한다.
}

테라폼으로 VPC를 생성하는 코드다.
VPC 역시 다양한 Argument와 다른 구성 요소가 존재한다.
 

Terrafrom state

# terraform.tfstate 라는 파일명을 가집니다.
{
    "version": 4,
    "terraform_version": "0.12.24",
    "serial": 3,
    "lineage": "3c77XXXX-2de4-7736-1447-038974a3c187",
    "outputs": {},
    "resources": [
        {...},
        {...},
    ]
}

테라폼 state 입니다.
현재 인프라의 상태를 의미하는 것은 아닙니다.
state 는 원격 저장소인 “backend”에도 저장될 수 있습니다.
→ state 파일과 현재 인프라의 상태를 똑같이 유지하는게 키 포인트
 

Terraform output

resource "aws_vpc" "example" {
    cidr_block = "10.0.0.0/16"
    # cidr_block 이외에도 수많은 인자가 존재한다.
}

output "vpc_id" {
    value = aws_vpc.default.id
}

output "cidr_block" {
    value = aws_vpc.default.cidr_block
}

테라폼 output 입니다.
remote를 사용해서 재사용을 할 수 있다.
 

Terraform module

module "vpc" {
    source = "../_modules/vpc"

    cidr_block = "10.0.0.0/16"
}

테라폼 module 입니다.
module은 한 번 만들어진 테라폼 코드로 같은 형태를 반복적으로 만들어낼 때 주로 사용한다.
 

Terraform remote

# remote 는 원격 참조 개념으로 이해하면 좋다.
data "terraform_remote_state" "vpc" {
    backend = "remote"

    config = {
        bucket       = "terraform-s3-bucket"
        region       = "ap-northeast-2"
        key          = "terraform/vpc/terraform.tfstate"
    }
}

테라폼 remote 입니다.
remote state 는 key 값에 명시한 state 에서 변수를 가져온다.
 

Terraform 기본 명령어


  • init
    테라폼 명령어 사용을 위해 각종 설정을 진행한다.
  • plan
    테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여준다.
  • apply
    테라폼 코드로 실제 인프라를 생성하는 명령어
  • import
    이미 만들어진 자원을 테라폼 state 파일로 옮겨주는 명령어
  • state
    테라폼 state를 다루는 명령어. 하위 명령어로 mv, push와 같은 명령어가 있다.
  • destroy
    생성된 자원들을 state 파일 기준으로 모두 삭제하는 명령어
     

Process

  1. Init
    1. 작성한 코드에서 init 명령어를 입력한다.
    2. 테라폼의 다른 명령어들을 위한 설정을 진행한다.
    3. 내부적으로는 provider와 state, module 설정 등이 있다.
  2. Plan
    1. 실제로 작성한 테라폼 코드가 어떻게 만들어질지에 대한 예측 결과를 보여주는 명령어
    2. 가장 많이 쓰이는 명령어
    3. 기본적으로 plan에 문제가 없어야 apply에 문제가 없을 확률이 높다.
  3. Apply
    1. 실제로 작성한 코드로 명령어를 생성하는 명령어
    2. 실제 인프라에 영향을 끼치는 명령어이므로 주의 깊게 실행을 해야한다.