[TF] Terraform 구성 요소

제이브로·2024년 5월 29일

Terraform

목록 보기
2/10
post-thumbnail

1. IaC

Infrastructure as Code(IaC), 코드로써의 인프라

  • 인프라를 이루는 서버, 미들웨어, 서비스 등을 인프라 구성요소들을 코드를 통해 구축하는 것

2. 테라폼 구성 요소

2.1 provider

테라폼으로 생성할 인프라의 종류를 의미

# provider.tf
# AWS Provider
provider "aws" {
  region = "ap-northeast-2"
  version = "~> 3.0"
}

Provider 안에 다양한 Arguments를 가지며, AWS resource를 (e.g. SDK 등)을 다운로드하는 역할

2.2 resource

테라폼으로 실제로 생성할 인프라 자원을 의미

# main.tf, vpc.tf 등
# Create a VPC
resource "aws_vpc" "example" {
  cidr_block = "10.0.0.0/16"
  ...

테라폼으로 VPC를 생성하는 코드이며, VPC에도 다양한 Argument와 다른 구성요소가 존재한다.

2.3 state

테라폼을 통해 생성한 자원의 상태를 의미

  • 테라폼을 실행하면 생성되는 파일
# terraform.tfstate의 파일명
{
  "version": 4,
  "terraform_version": "0.12.24"
  "serial": 3,
  "lineage": "3c77XXXX-2de4-7736-1447-038974a3c187",
  "outputs": {},
  "resources": [
    {...},
    {...}
  ]
}

테라폼의 결과값 즉, state이며, 현재 인프라의 상태를 의미하진 않는다.
state는 원격 저장소인 backend에도 저장될 수 있다.

2.4 output

테라폼으로 만든 자월을 변수 형태로 state에 저장하는 것을 의미

resource "aws_vpc" "default" {
  cidr_block = "10.0.0.0/16"
  ...
}

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

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

테라폼의 output이며, VPC 역시 다양한 Arguments로 구성

  • remote를 사용하여 재사용

2.5 module

공통적으로 활용할 수 있는 코드를 문자 그대로 모듈 형태로 정의하는 것을 의미

module "vpc" {
  source = "../_modules/vpc"
  
  cidr_block = "10.0.0.0/16"
}

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

  • 재사용의 강점

2.6 remote

다른 경로의 state를 참조하는 것을 말한다. output 변수를 불러올 때 주로 사용한다.

# remote는 원격 참조 개념
data "terraform_remote_state" "vpc" {
  backend = "remote"
  
  config = {
    bucket		= "terraform-s3-bucket"
    region		= "ap-northeast-2"
    key			= "terraform/vpc/terraform.tfstate"
  }
}

remote statekey값에 명시한 state애소 변수를 가져온다

3. 테라폼 기본 명령어

  • init

    • 테라폼 명령어 사용을 위해 각종 설정을 진행
    • 최초의 테라폼 명령어를 실행할 때 쓰는 명령어
  • plan

    • 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여준다.
    • 실제로 가장 많이 쓰이는 명령어
  • apply

    • 테라폼 코드로 실제 인프라를 생성하는 명령어
  • import

    • 이미 만들어진 자원을 테라폼 state 파일로 옮겨주는 명령어
    • 이미 만들어진 자원을 코드로 만들고 싶을 때 사용
  • state

    • 테라폼 state를 다루는 명령어
    • 하위 명령어로 mv, push와 같은 명령어가 있다.
    • 자주 쓰이지는 않지만, 알아둬야하는 명령어
  • destroy

    • 생성된 자원들 state 파일 모두 삭제하는 명령어

3.1 테라폼 명령어 프로세스

init -> plan -> apply의 순서로 프로세스가 진행된다.

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

References

  1. 처음 시작하는 Infrastructure as Code: AWS & 테라폼
profile
기록하지 않으면 기록되지 않는다.

0개의 댓글