Terraform #1

임상규·2023년 11월 7일
1

Terraform

목록 보기
1/3
post-thumbnail

Terraform

  • Hashicorp에서 오픈소스로 개발중인 클라우드 인프라스트럭처 자동화를 지향하는 IaC 도구
  • HCL(Hashicorp Configuration Language) 언어를 사용하여 리소스를 선언
  • CloudFormation과 달리 AWS, Azure, GCP와 같은 클라우드 서비스에 대해서
    provider 방식으로 제공
  • 인스턴스, 네트워크와 같은 low-level뿐 아니라 DNS, SaaS와 같은 high-level의 요소도 관리 가능함

특징

IaC

  • 인프라를 코드로 정의하여 생산성과 투명성을 높임
  • 정의한 코드를 쉽게 공유할 수 있어 효율적으로 협업 가능

Execution Plan

  • 변경 계획과 변경 적용을 분리하여 내용을 적용할 때 발생할 수 있는 실수를 줄일 수 있음

Resource Graph

  • 사소한 변경이 인프라 전체에 어떤 영향을 미칠지 미리 확인 가능
  • 종속성 그래프를 작송하여 이 그래프를 바탕으로 계획을 세우고,
    이 계획을 적용했을 때 변경되는 인프라 상태를 확인 가능

Change Automation

  • 여러 장소에 같은 구성의 인프라를 구축하고 변경할 수 있도록 자동화 가능
  • 인프라를 구축하는데 드는 시간을 절약, Human Error 감소

Terraform Deploy Workflow

  1. Refresh
  • 현재 인프라 상태 확인
  1. Plan
  • 현재 상태 → 원하는 상태로 구성
  • 예상되는 변경점을 미리 확인해보는 단계
  1. Apply
  • 실행하는 단계
  • 선후관계를 명시하지 않아도 알아서 순차적, 병렬적으로 실행됨
    • 일부 명시해야 하는 경우도 존재
  1. Destroy
  • 제로의 상태로 돌아오는 과정 (=삭제)

장점

  • 콘솔에 로그인할 필요 없이 서버 운영 및 관리가 모두 자동화 가능
  • 사람이 수동으로 작업하는 것보다 빠르게 배포 가능
  • 일관성을 보장
  • 유효성 검증을 통해 문제가 발생하는것을 어느 정도 예방 가능

단점

  • AWS 설정을 Terraform으로 한번에 Migration 하기 어려움
  • 배포 전략이 제한적
    • Blue/Green 배포를 구현할 수 없음
  • 러닝 커브
    • HCL 문법
  • plan과 apply 명령어의 차이
    • plan에선 성공하지만 현재 state에 따라서 apply는 실패할 수 있음
  • 프로젝트 규모가 커질수록 배포시 점점 더 느려짐

HCL 문법

  • 기본 문법: .tf
  • Json 문법: .tf.json
  • Convention: indent = 2 space
  • argument(=attribute)
    • 식별자 (argument name) = 값 (argument value)
    image_id = "abc123"
  • blocks
    • 컨텐츠의 묶음
    resource "aws_instance" "example" {
      ami = "abc123"
      
      network_interface{
        ...
      }
    }
  • 최상위 Block type
    • resource, input, output, data, module ...
profile
Cloud Engineer / DevOps Engineer

0개의 댓글