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 |
