• IaC(Infrastructure as Code) 도구 중 하나로 코드를 사용해 인프라를 관리
  • 테라폼으로 인프라 변경사항을 적용하면 state가 만들어진다

  • 실제 AWS 인프라와 테라폼 상태인 .tfstate가 일치되는 것이 중요

기본 개념

  1. Resource : 실제로 생성할 인프라 자원
    ex) aws_security_group
  2. Provider : Terraform으로 정의할 인프라 플랫폼
    ex) AWS, GCP
  3. Output : 생성된 자원의 state 파일(.tfstate)
  4. Backend : 생성된 state가 저장될 공간, 기본은 local이지만 backend.tf가 추가되면 원격 저장소에 저장
    ex) AWS S3
  5. Module : 공통적으로 활용할 테라폼 코드를 정의하는 부분 (= 변수)
  6. Remote state : VPC, IAM 등과 같은 공용 서비스의 state, 이를 다른 서비스에서 참조할 수 있다
  • 하나의 모듈 내 Directory 경로
.
├── backend.tf          # Backend
├── ec2.tf              # Resource
├── provider.tf         # Provider
├── terraform.tfvars    # Variable 할당
└── variables.tf        # Variable 선언

명령어

  • 테라폼에서 자주 사용하는 기본 명령어가 있다. 명령어 중 거의 90%의 빈도로 기본 명령어를 사용한다

1. init

  • 테라폼 initiate
  • backend에 .tfstate 파일 생성
  • local에 .tfstate의 내용을 담은 .terraform 생성
$ terraform init

2. plan

  • 정의된 테라폼 코드가 적용될 결과를 표출
  • plan에서 에러가 발견되지 않아도 실제 적용시 에러가 발생할 수 있다
$ terraform plan

3. apply

  • 테라폼 코드가 실제로 인프라에 적용
  • 적용 후 결과가 backend .tfstate에 저장
  • 적용 후 결과가 local .terraform에 저장
$ terraform apply

4. import

  • AWS 인프라에 배포된 resource를 테라폼 state로 가져온다
  • local .terraform에 해당 resource의 state를 import
$ terraform import

변수(Variable)

  • variables.tf : 변수 선언
variable "region" {}
variable "profile" {}
  • terraform.tfvars : 변수 할당
region = "ap-northeast-2"
profile = "dev"
  • 변수 사용
provider "aws" {
  region  = var.region
  profile = var.profile
}

모듈(Module)

  • 테라폼에서는 모듈을 통해 변수 템플릿을 만들어 resource에 override 할 수 있다
  • 공통으로 사용되는 resource를 만들어 놓고 모듈별 변수설정을 생성해 공통 resource에 적용하는 방식

  • main.tf (공통 resource)
    resource "aws_s3_bucket" "my_bucket" {
    bucket = var.bucket_name
    }
    
  • variable.tf
    variable "bucket_name" {}
    
  • terraform.tfvars
    bucket_name = "my-bucket"
    
  • my-service/provider.tf
    provider "aws" {
    region  = var.region
    profile = var.profile
    }
    
  • my-service/main.tf (모듈) ```tf module { // 모듈을 적용할 source 선택 source = “../”

} ```