Skip to content

Basic

GCP 기초 튜토리얼

Terraform Block

  • 프로바이더 설정 가능
  • source 에는 provider_type / hostname / namespace 등 정의 가능

Provider

  • Provider 에 정의된 리소스로 관리하는 것
  • 여러 프로바이더 설정 가능

Resource

  • 다루는 리소스
resource "google_compute_network" "vpc_network" {
  name = "terraform-network"
}
  • google_compute_network : resource type
  • vpc_network : resource name

기본 플로우는

terraform init # -> provider 다운로드 및 해시 만들고
terraform fmt # -> 코드 포맷팅
terraform validate # -> 문법 검사
terraform plan # -> 변경사항 확인
terraform apply # -> 변경사항 적용
terraform destroy # -> 리소스 삭제

Variable

# main.tf
provider "google" {
  credentials = file(var.credentials_file)

  project = var.project
  region  = var.region
  zone    = var.zone
}

# variable.tf
variable "credentials_file" {}

# terraform.tfvars
credentials_file = "account.json"

Data

  • Terraform에서 data 소스는 기존 인프라스트럭처나 외부 소스로부터 데이터를 읽어오기 위해 사용됩니다. 이를 통해 Terraform은 이미 생성된 리소스나 외부에서 제공되는 데이터에 접근할 수 있으며, 이 데이터를 Terraform 구성(configuration) 내에서 사용할 수 있습니다.
  • data 소스는 리소스(resource)와 유사하지만, 기존에 존재하는 데이터를 참조하는 데 사용되며 새로운 리소스를 생성하지 않습니다. 예를 들어, 이미 생성된 AWS VPC의 ID를 검색하거나, AWS AMI 이미지의 최신 버전을 찾는 데 사용할 수 있습니다.
  • https://chat.openai.com/share/fb52d660-4e55-4023-88bb-97eec556affa

Output

  • 프로비저닝 된 결과를 담을 수 있음

Module

  • https://chat.openai.com/share/fb52d660-4e55-4023-88bb-97eec556affa
  • Terraform 모듈은 단일 폴더에 있는 Terraform 구성 파일 세트
  • 하나의 디렉토리로 구성된 간단한 구성이라도 이상의 .tf 파일은 모듈
  • Terraform 명령을 직접 실행하는 경우 이러한 디렉토리는 루트 모듈으로 간주됩니다.
  • 그래서 이런 의미에서 모든 Terraform 구성은 모듈의 일부입니다.
.
├── LICENSE
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf

terraform apply

  • terraform apply를 실행할 때, Terraform은 main.tf 파일뿐만 아니라 현재 디렉토리에 있는 모든 .tf 확장자를 가진 파일들을 자동으로 포함합니다.

directory 구조 및 관리

  1. 디렉토리 구조 모듈 디렉토리: 재사용 가능한 Terraform 코드 조각을 모듈로 분리하여 관리합니다. 각 모듈은 특정 인프라 구성 요소(예: VPC, 서브넷, EC2 인스턴스 등)를 정의하고, 이를 다른 프로젝트나 환경에서 재사용할 수 있습니다. 환경 디렉토리: 개발(Dev), 스테이징(Staging), 프로덕션(Production)과 같이 다양한 배포 환경을 위한 디렉토리를 분리합니다. 각 환경 디렉토리 내에서는 해당 환경에 특화된 Terraform 구성 파일들을 관리합니다.
  2. Terraform 파일 구조화 main.tf: 주요 리소스 및 모듈 호출을 정의합니다. variables.tf: 프로젝트에서 사용하는 모든 변수의 선언을 포함합니다. outputs.tf: Terraform이 생성한 리소스에서 출력할 데이터를 정의합니다. provider.tf: 프로바이더(예: AWS, Google Cloud, Azure) 설정을 정의합니다.
  3. 환경별 구성 관리 *terraform.tfvars 또는 .auto.tfvars: 환경별 변수 값을 정의하여, 같은 Terraform 코드를 다른 환경에 적용할 때 각 환경의 특정 값을 사용할 수 있도록 합니다.
  4. 상태 파일 관리 원격 상태 저장소 사용: Terraform 상태 파일(.tfstate)을 중앙 집중화된 원격 저장소(예: AWS S3, Google Cloud Storage)에 저장하여, 팀원 간 상태 공유 및 충돌 방지를 도모합니다. 상태 잠금 활성화: 동시에 Terraform 명령을 실행할 때 상태 파일 충돌을 방지하기 위해 상태 잠금을 활성화합니다.
  5. 코드 재사용 및 모듈화 모듈 생성: 재사용 가능한 인프라 구성요소를 모듈로 만들어 코드 중복을 줄이고, 관리를 용이하게 합니다. 모듈 레지스트리 사용: 공개적으로 사용 가능한 Terraform 모듈 레지스트리 또는 기업 내부 모듈 레지스트리를 사용하여 모듈을 공유하고 재사용합니다.