3강 - Terraform 기본

Soni·2024년 10월 9일

테라폼

IaC는 인지한 순간 바로 도입하는 게 가장 적합한 때이다.

  • .tf 파일 형식

구성 요소

  • provider
    • 테라폼으로 생성할 인프라의 종류
    • 구체적으로 인프라가 뭔지? aws, azure,gcp
  • resource
    • 테라폼으로 실제로 생성할 인프라 자원
    • 예 : s3
  • state
    • 테라폼을 통해 생성한 자원의 상태
    • 파일 형태, 실제로 테라폼 명령어를 실행한 결과물
  • output
    • 테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것
    • 왜 변수 형태로 저장하는지? remote를 통해 재사용하기 위해?
  • module
    • 공통적으로 활용할 수 있는 코드를 모듈 형태로 정의하는 것
    • 재사용(같은 형태를 반복적으로 생성)에 대한 강점
  • remote
    • 다른 경로의 state를 참조하는 것
    • output 변수를 불러올 때 주로 사용

cf) 어떤 언어나 기술을 공부할 때 어떻게 공부를 해야할까요?

지금 당장 설치하고 작성해서 무언가를 만들어기!

코드로 보기

  • provider
    • 파일명 : 보통 provider.tf
    • provider 안에 다양한 arguments를 가짐
    • AWS resource를 다루기 위한 파일(ex. SDK)들을 다운로드
# AWS Provider
provider "aws" {
	region = "ap-northeast-2"
	version = "~>3.0"
}
  • resource
    • 파일명 : main.tf, vpc.tf 등 원하는 형태로 사용
    • 각 resource마다 수많은 인자 값들 존재
# Create a VPC
resource "aws_vpc" "example" { // resource "리소스의 이름" "실제 이름"
	cidr_block = "10.0.0.0/16"
	# cidr_block 이외에도 수많은 인자 존재
}
  • state
    • 파일명 : terraform.tfstate

    • 수천 줄, 수만 줄까지 증가 가능

    • 주의) 현재 인프라의 실제 상태 ❌ → state 파일과 현재 인프라의 상태를 똑같이 유지하는 게 중요!

    • 원격 저장소인 “backend”에도 저장(대부분 현업)

      {
      	"version": 4,
      	"terraform_version": "0.12.24",
      	"serial":3,
      	"lineage":"3c77XXXX-2de4-7736-1447-038974a3c187", // 나중에 알아야 하는 값
      	"outputs":{},
      	"resources":[
      		{...},
      		{...}
      	]
      }
  • output
    • 참조해서 변수를 state 파일로 저장
    • 이 때 만들어진 값들은 remote를 사용해서 재사용 ⭕
resource "aws_vpc" "default" {
	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
}
  • module
    • 실제 모듈 코드(리소스에 대한 코드)는 경로로 포함
    • 저 경로의 하위 경로로 리소스 파일들 위치
    • 테라폼의 실력 판단 기준이 되기도 함
module "vpc" {
	source = ":./_modules/vpc"
	
	cidr_block = "10.0.0.0/16"
}
  • remote
    • 원격 참조 개념으로 이해

    • key 값에 명시한 state에서 output으로 저장된 변수들 가져옴

      data "terraform_remote_state" "vpc" {
      	backend = "remote"
      	
      	config = {
      		bucket = "terraform-s3-bucket"
      		region = "ap-northeast-2"
      		key = "terraform/vpc/terraform.tfstate" // 여기에 저장된 state 값 참조 가능
      	}
      }

기본 명령어

  • init
    • 테라폼 명령어 사용을 위한 각종 설정 진행
      • module, state 세팅
    • 최초의 테라폼 명령어를 실행할 때 해줘야 함(init 앞단에 작성한 코드가 존재해야 함)
  • plan
    • 테라폼으로 작성한 코드가 실제로 어떻게 만들어질지에 대한 예측 결과를 보여줌
    • 가장 많이 사용
    • plan에 문제가 없어야 apply에 문제가 없을 확률이 높다(100% 보장 ❌) → plan 명령어를 습관화❗
  • apply
    • 테라폼 코드로 실제 인프라를 생성하는 명령어
    • 실제 인프라에 영향 ⭕ → 주의깊게 실행
  • import
    • 이미 만들어진 자원(ex. AWS Route53)을 테라폼 state 파일로 옮겨주는 명령어
    • 이미 만들어진 자원을 코드로 만들고 싶은 경우
  • state
    • 테라폼 state를 다루는 명령어
    • 하위 명령어로 mv, push와 같은 명령어 존재
  • destroy
    • 생성된 자원들을 state 파일 기준으로 모두 삭제하는 명령어
    • 다시 만들어야 하는 경우

process

Init → Plan → Apply

  • 기본 명령어의 사용 빈도가 90% 이상을 차지 → 기본 명령어 숙지 후 다른 명령어 공부

출처 : 처음 시작하는 Infrastructure as Code: AWS & 테라폼

profile
Cloud, DevOps

0개의 댓글