IaC(Infrastructure as Code)가 필요한 이유
멀티클라우드 환경에서 인프라를 수동으로 구성하면 휴먼 에러, 환경 불일치, 변경 추적 불가라는 문제가 발생합니다. Terraform은 선언형 HCL(HashiCorp Configuration Language)로 원하는 인프라 상태를 정의하면, 실제 인프라를 그 상태로 맞춰줍니다.
Terraform Provider 구성
terraform {
required_providers {
aws = { source = "hashicorp/aws", version = "~> 5.0" }
azurerm = { source = "hashicorp/azurerm", version = "~> 3.0" }
google = { source = "hashicorp/google", version = "~> 5.0" }
}
}
provider "aws" { region = "ap-northeast-2" }
provider "azurerm" { features {} subscription_id = var.azure_subscription_id }
provider "google" { project = var.gcp_project region = "asia-northeast3" }
보안 정책 코드화 (FortiGate Provider)
Fortinet은 공식 Terraform Provider를 제공합니다. 방화벽 정책, 주소 객체, NAT 규칙을 코드로 관리할 수 있습니다.
resource "fortios_firewall_policy" "allow_web" {
name = "allow-web-outbound"
action = "accept"
srcintf = [{ name = "internal" }]
dstintf = [{ name = "wan1" }]
srcaddr = [{ name = "all" }]
dstaddr = [{ name = "all" }]
service = [{ name = "HTTP" }, { name = "HTTPS" }]
schedule = "always"
}
State 관리 (원격 Backend)
팀 환경에서는 Terraform State를 원격 저장소에 보관해야 합니다. AWS S3 + DynamoDB 조합이 일반적입니다.
terraform {
backend "s3" {
bucket = "my-tf-state-bucket"
key = "prod/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform-state-lock"
encrypt = true
}
}
CI/CD 파이프라인 통합
GitLab CI/GitHub Actions에서 Terraform Plan 결과를 PR 코멘트로 자동 게시하고, main 브랜치 병합 시 자동 Apply하는 파이프라인을 구성하면 검토→승인→배포 프로세스를 완전 자동화할 수 있습니다.
도입 효과
- 신규 환경 프로비저닝 시간: 수 시간 → 3분
- 휴먼 에러로 인한 장애: 0건
- 인프라 변경 이력: Git 커밋 히스토리로 완전 추적
- Drift 탐지: Plan 실행으로 실제 상태와 코드 불일치 즉시 발견