[Terraform] 1강 구성요소

전형빈·2022년 12월 26일
0

테라폼

목록 보기
2/12
post-thumbnail

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

서버, 미들웨어, 서비스 등 인프라 구성요소들을 코드를 통해 구축하는 것. 대표적으로 테라폼이 있다.

테라폼은 가장 많이 쓰이고 거의 업계 표준인 것 같다.

인기가 많다=좋은 선택일 확률이 높다. 항상 그런 것은 아니지만 사용자가 많으면 좋은 레퍼런스도 많기 때문에 아무래도 좋을 확률이 높지 않을까 싶다.


1. 테라폼 구성요소

테라폼은 .tf라는 파일 형식을 가지고 다양한 서비스들을 지원한다.

  • provider → 테라폼으로 생성할 인프라의 종류 ex) AWS
  • resource → 테라폼으로 생성할 인프라 자원 ex) VPC
  • state → 테라폼을 통해 생성한 자원의 상태 ex) 코드를 실행한 결과물?
  • output → 테라폼으로 만든 자원을 변수 형태로 state에 저장하는 것
  • module → 공통적으로 활용할 수 있는 코드를 모듈 형태로 정의. 재사용하는데 굉장히 이점이 있음! 테라폼 고수의 필수
  • remote → 다른 경로의 state를 참조한느 것. output 변수를 불러올 때 주로 사용

tip 어떤 언어를 공부해야 하나??

이론을 배우기 보다 먼저 설치하고 작성해서 결과물을 만들어 보는게 중요하다. 일단 부딪혀보자

주니어 = 일단 먼저 해보기
시니어 = 이론을 먼저 공부


2. Terraform provider

보통 provider.tf로 파일 생성

# AWS provider
provider "aws" {
	region = "ap-northeast-2"
    version = "`> 3.0"
}

provider에서 정의한 리소스를 다운로드 하기 위한 역할


3. Terraform resource

main.tf, vpc.tf 등 원하는 형태로 파일이름 사용

# AWS VPC 생성
Resource "aws_vpc" "example" {
	cidr_block = "10.0.0.0/16"
}

리소스가 가장 먼저 선언되고 그다음 리소스 종류가 선언된다.

example 부분이 실제 이름이고 cidr_block 외에도 많은 인자들이 있다.


4. Terraform state

테라폼으로 작성한 코드를 실제로 실행하게되면 생성되는 파일 (init 파일이랑 비슷한건가?)
코드가 굉장히 길어질 수 있다. 현업에선 수천 줄까지 늘어나게 됨

# terraform.tfstate
{
	"version": 4,
    "terraform_version": "0.12.24",
    "serial": 3,
    "lineage": "3c77xxxx-2de4-7736-1447-038974a3c187",
    "outputs": {},
    "resources" : [
    	{...},
        {...},
    ]
}

테라폼 명령어를 실행해서 생성된 리소스들의 결과 값이고 실제 인프라 상태는 아니다.

즉, state 파일과 현재 인프라의 상태를 똑같이 유지하는게 키포인트

state는 원격 저장소인 backend에 저장되기도 한다. 대부분 현업에서는 backend들을 사용하고 있다.


5. Terraform output

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
}

aws vpc 코드를 만들면 vpc ID나 cidr 값들이 생기는데 그런 것들을 참조해서 vpc_id란 형태의 변수를 state 파일로 저장한다.

remote를 사용해서 재사용할 수 있음


6. Terraform module

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

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

실제 코드, 리소스에 대한 코드는 경로로 포함하고 하위 경로로 tf(리소스)파일들이 존재한다.

리소스 안에 들어갈 인자값들을 아래 정의한다.

재사용성 이점이 굉장히 크고 module을 어떻게 사용하느냐에 따라 테라폼 고수로 나눈다.


7. Terraform remote

remote는 원격 참조 개념으로 이해하자

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

state 파일에서 output으로 저장된 변수들을 가져오는 형식이다.


REFERENCE

0개의 댓글