mingming

Terraform 이란? 본문

Terraform

Terraform 이란?

mingming_96 2023. 8. 11. 01:46

 

1. 테라폼이란 

테라폼은(Terraform) 은 하시코프(Hashicorp)에서 개발하고있는 Iac(Infrastructure as code) 도구 입니다.

 

2. 테라폼 사용시 장점 

자동화 코드로 인프라를 생성하기 때문에 서버 운영 및관리가 자동화 될 수 있습니다.
플랫폼 호환성  테라폼은 다양한 프로바이더를 제공합니다. 
모듈화  코드형 인프라를 모듈화하여 필요한 환경에서 재사용 할 수 있습니다. 
유효성 검증 terraform plan , validate 를 통해 문법오류나 유효성을 확인할 수 있습니다.
속도 & 안전  코드로 인프라를 생성하기 떄문에 수동으로 작업하는 것 보다 빠르게 배포할 수있으며 실수가 줄어들게 됩니다. 

 

3. 테라폼 기본 구성

Provider

Terraform은 공급자라는 플러그인을 사용해 클라우드 공급자, SaaS 공급자 및 기타 API와 상호작용 합니다.

Terraform이 사용할 수 있도록 필요한 공급자를 선언해야 합니다.

 

단일 provider 

provider "google" {
  project = "acme-app"
  region  = "us-central1"
}

다중 provider 

# The default provider configuration; resources that begin with `aws_` will use
# it as the default, and it can be referenced as `aws`.
provider "aws" {
  region = "us-east-1"
}

# Additional provider configuration for west coast region; resources can
# reference this as `aws.west`.
provider "aws" {
  alias  = "west"
  region = "us-west-2"
}

alias를 이용해 여러 공급자를 선언할 수 있습니다.

 

Resource

각 리소스 블록은 가상 네트워크, 컴퓨팅 인스턴스 또는 DNS 레코드와 같은 상위 수준 구성 요소와 같은 하나 이상의 인프라 개체를 설명합니다. 각 리소스 블록은 리소스 선언을 위한 구문을 문서화 합니다.

 

DataSource

데이터 소스를 통해 Terraform은 다른 별도의 Terraform에 의해 정의되거나 기능에 의해 수정된 Terraform 외부에서 정의된 정보를 사용할수 있습니다. 

 

Variable and Outputs

 

입력 변수 

variable "image_id" {
  type = string
}

variable "availability_zone_names" {
  type    = list(string)
  default = ["us-west-1a"]
}

variable "docker_ports" {
  type = list(object({
    internal = number
    external = number
    protocol = string
  }))
  default = [
    {
      internal = 8300
      external = 8300
      protocol = "tcp"
    }
  ]
}

 

로컬 변수 

locals {
  service_name = "forum"
  owner        = "Community Team"
}

로컬 변수는 모듈 내에서 동일한 값이나 표현식을 여러번 반복하는 것을 방지할 수 있습니다.

 

Outputs 

Output "instance_ip_addr" { 
  value  = aws_instance.server.private_ip 
 }

Outputs 값은 하위 모듈에서 값을 참조할 때 사용할 수 있습니다.

 

Modules

모듈은 함께 사용되는 여러 리소스의 컨테이너입니다. 모듈은 디렉토리에 함께 보관되는 파일 모음 .tf 및 또는 파일로 구성됩니다.. tf.json

 

Root Modules

테라폼에서의 루트 모듈은 주로 main.tf 파일로 나타냅니다. 이 파일은 테라폼 설정의 진입점이며, 전체 코드의 기본적인 구조와 설정을 담당합니다.

 

Child Modules

하위 모듈은 주로 특정 기능이나 리소스 타입을 모듈화하여 코드의 재사용성을 높이고, 인프라스트럭처를 더 작은 단위로 관리하기 위해 사용됩니다. 테라폼에서 하위 모듈은 보통 별도의 디렉토리 내에 관련 파일들을 포함하고 있습니다. 

 

Published Modules 

공용 또는 개인 레지스트리에서 모듈을 로드할 수 있습니다. 해당 모듈을 통해 코드를 간편하게 작성하실 수 있습니다.

 

 

이상 Terraform 기본개념에 대해 알아보았습니다. 다음엔 Terraform을 이용한 AWS 인프라 생성에 대해 알아보겠습니다.

'Terraform' 카테고리의 다른 글

Terraform 으로 Aurora cluster 및 RDS Proxy 구현하기  (0) 2023.08.13