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