목차
본문으로 바로가기

[Terraform] 기본 설명 # 2

category DevOps/Terraform 2025. 7. 15. 08:42

1. 프로비저닝(Provisioning)이란?

Terraform을 이용해 인프라 리소스를 코드로 정의하고, 자동으로 생성/수정/삭제하는 작업 전체를 의미합니다.

  • 서버, 네트워크, 보안 그룹 등 모든 인프라 구성 요소를 코드로 관리
  • **원하는 상황(Desired State)**을 정의하면, Terraform이 실제 환경을 그 상황으로 자동 맞운다

예시: Azure, AWS, OCI에 가상 네트워크(VNet)와 VM을 코드로 정의해 배포


2. 프로바이더(Provider)라는?

Terraform이 어느 클럽 플랫폼의 리소스를 관리할지 정의하는 플랫폼입니다.

  • Terraform은 Provider를 통해 클럽 API를 호출해 리소스를 제어함

2.1 Azure

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

provider "azurerm" {
  features {}
}

2.2 AWS

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region  = "ap-northeast-2"   # 예: 서울 리전
  profile = "default"          # ~/.aws/credentials 사용 시
}

2.3 OCI

terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
      version = "~> 5.0"
    }
  }
}

provider "oci" {
  tenancy_ocid        = var.tenancy_ocid
  user_ocid           = var.user_ocid
  fingerprint         = var.fingerprint
  private_key_path    = var.private_key_path
  region              = var.region
}

3. 리소스(Resource)라는?

Terraform에서 uad00리하려는 인프라 구성 요소를 의미합니다.

  • 예시: Azure, AWS, OCI VM, VNet, Subnet, Public IP 등
  • resource 블록으로 정의

3.1 Azure 리소스 예제: 리소스 그룹 + 가상 네트워크

resource "azurerm_resource_group" "rg" {
  name     = "example-rg"
  location = "Korea Central"
}

resource "azurerm_virtual_network" "vnet" {
  name                = "example-vnet"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
}

3.2 AWS 리소스 예제: VPC + EC2 인스턴스

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0" # 예: Amazon Linux 2
  instance_type = "t2.micro"

  tags = {
    Name = "example-instance"
  }
}

3.3 OCI 리소스 예제: VCN + 인스턴스

resource "oci_core_virtual_network" "vcn" {
  compartment_id = var.compartment_id
  cidr_block     = "10.0.0.0/16"
  display_name   = "example-vcn"
}

resource "oci_core_instance" "test_instance" {
  availability_domain = var.availability_domain
  compartment_id      = var.compartment_id
  shape               = "VM.Standard.E2.1.Micro"

  source_details {
    source_type = "image"
    image_id    = var.image_id
  }

  create_vnic_details {
    subnet_id = var.subnet_id
  }

  metadata = {
    ssh_authorized_keys = file("~/.ssh/id_rsa.pub")
  }

  display_name = "example-instance"
}

4. 플랜(plan)이란?

Terraform이 리소스를 적용하기 전에 무엇이 변경되는지를 미리 시뮬레이션하는 단계입니다.

terraform plan
  • 리소스를 만들지 않고, 변경 사항만 출력
  • 변경/삭제 위험을 사전에 확인 가능

5. 적용(apply)이란?

plan에서 확인한 변경사항을 실제 클라우드 인프라에 적용하는 단계입니다

terraform apply
  • Azure, AWS, OCI에 리소스를 실제로 생성하거나 변경
  • 현재 상황(state)과 원하는 상황(desired state)을 비교해 차이만 반영

추가 해석: 키 용어 요약

용어 설명
init Terraform 초기화 및 Provider 설치
plan 변경 사항을 시뮬레이션하고 콘솔에 출력
apply 리소스 실제 적용/생성
destroy 모든 리소스 삭제
state 클럽 환경의 실제 상황을 저장하는 파일
variables.tf 변수 정의 파일
terraform.tfvars 변수에 값을 할당하는 파일
modules 재사용 가능한 코드 구성 블록

비유를 통한 정보

Terraform 요소 비유
Provider 클럽와 연결하는 드라이버
Resource 건설 자재 (VM, 네트워크 등)
Plan 건설 설계도 검토 단계
Apply 실제 건설 시작
State 가장 많이 완공된 건물의 상황 정보

'DevOps > Terraform' 카테고리의 다른 글

[Azure] Terraform으로 Azure Provider 설정하기  (0) 2025.07.17
[Terraform] 설치 방법 #1  (0) 2025.07.15