IaC/Terraform 9

[IaC] Terraform (8) -테인트

정의특정 리소스가 손상되었거나 예상치 못한 상태가 되어 Terraform이 이를 교체하도록 강제하는 메커니즘명령어terraform taint 명령을 사용하면 State 파일 내에서 특정 리소스를 “tainted”상태로 표시taint 된 리소스에 대해 plan을 실행하면 Terraform은 해당 리소스를 파괴하고 다시 생성할 계획을 세움그 후 terraform apply를 실행하면 해당 리소스가 교체됨사용 시나리오인프라 외부에서 수동으로 리소스 변경 → 리소스 불안정 → 원복 어려운 경우VM 내부 SW에 치명적 오류 발생으로 VM 자체 재 프로비저닝 필요시Terraform 코드로 변경하기 어려운 심각한 드리프트 발생시주의사항해당 리소스를 파괴하고 재생성하므로 서비스 중단 발생 가능Terraform 0.1..

IaC/Terraform 2025.09.25

[IaC] Terraform(8) - 메타 인자

정의resource 또는 module 블록 에 사용할 수 있는 특별한 인자로 특정 리소스 유형에 국한되지 않고 Terraform 동작 방식을 제어하는데 사용주요 메타 인자count동일한 리소스를 여러개 생성할 때 사용지정된 숫자만큼 리소스 인스턴스 생성됨각 인스턴스에 count.index(0부터 시작)가 할당되어 리소스 이름이나 속성을 동적으로 생성할 수 있음리소스 또는 모듈의 lifecycle을 단순화할 때 유용resource "aws_instance" "web" { count = 3 ami = "ami-0eb26f391850125a1" instance_type = "t2.micro" tags = { Name = "web-server-${count.index}" }}o..

IaC/Terraform 2025.09.25

[IaC] Terraform(7) - 프로비저너

정의Terraform이 인프라를 프로비저닝한 후, 생성된 가상머신 내부에서 추가적인 작업을 수행하거나, 로컬 환경에서 특정 스크립트를 실행하는데 사용됨인프라 생성과 구성 관리 사이의 간극을 메우는 역할을 하지만 가능한 사용을 피하는 것이 권장됨역할리소스 생성 후 추가작업resource 블록 내부에 정의됨file : 생성된 인스턴스로 파일을 전송local-exec: terraform이 실행되는 로컬 머신에서 명령을 실행remote-exec : 생성된 원격인스턴스에 SSH/WinRM을 통해 명령을 실행예시EC2 인스턴스 생성 후 Apache 웹 서버 설치 (remote-exec)#main.tfresource "aws_instance" "web_server" { ami = "ami-0eb26..

IaC/Terraform 2025.09.25

[IaC] Terraform(6) - 워크스페이스

정의하나의 Terraform 구성(코드)로 여러 개의 독립적인 인프라 환경을 관리할 수 있게 해주는 기능. 개발, 스테이징, 운영과 같이 유사하지만 분리된 환경을 가질때 유용함서로 다른 환경관리를 위한 워크스페이스기본적으로 Terraform은 “default”라는 워크스페이스에서 작동함. 새로운 워크스페이스를 생성하면 해당 워크 스페이스는 defaut 워크스페이스와 독립적인 state 파일을 가짐. 이렇게 되면 동일한 Terraform 코드베이스를 사용하여 각 워크스페이스에 맞는 인프라를 배포하고 관리할 수 있음# main.tfresource "aws_s3_bucket" "my_bucket" { bucket = "${terrafomr.workspace}-my-app-bucket-unique-12..

IaC/Terraform 2025.09.25

[IaC] Terraform(5) - 상태관리

개요Terraform은 인프라의 현재 상태를 Terraform state 파일(terraform.tfstate)이라는 특수 파일에 기록하고 관리함. 이 파일은 Terraform의 핵심이며, 인프라의 변경사항을 추적하고 드리프트를 감지하며 다음 apply 작업 계획 수립에 사용역할 및 중요성역할인프라 상태 추적 : 어떤 리소스를 만들었고 각 리소스의 현재 속성 값 기록드리프트 감지 : State 파일 정보와 실제 클라우드 인프라의 상태를 비교해 수동 변경(drift)이 발생했는지 감지하고, terraform plan시 이를 반영하여 올바른 변경 계획 수립성능 최적화 : 매번 클라우드 API를 호출하여 모든 리소스의 상태를 확인하는 대신, State 파일을 사용하여 변경이 필요한 부분만 효율적으로 파악데이터..

IaC/Terraform 2025.09.25

[IaC] Terraform(4) - 모듈

개요Terraform 코드의 재사용성과 관리 용이성의 핵심이 되는기능여러 개 리소스 블록을 하나의 논리적인 단위로 묶어 다른 Terraform 구성에서 재사용할 수 있도록 함함수나 라이버리와 유사한 개념개념 및 장점개념하나이상의 .tf 파일을 포함하는 디렉토리. 루트 모듈(terraform init이 실행되는 최상위 디렉터리)은 물론, 이 루트 모듈이 호출하는 다른 모듈도 존재할 수 있음. 각 모듈은 자체적인 입력 변수, 리소스, 출력 값등을 가질 수 있음장점재사용성 : 동일한 인프라 패턴 (ex : VPC, 웹 서버 스택)을 여러 프로젝트나 환경에서 반복적으로 사용할 수 있음. 코드를 복붙할 필요없이 모듈을 호출하기만 하면 됨추상화: 복잡한 인프라 구성을 단순화된 인터페이스로 추상화하여, 사용하는 사람..

IaC/Terraform 2025.09.25

[IaC] Terraform(3) - HCL

HCL 기본HCL(HashiCorp Configuration Language)는 Terraform 뿐만 아니라 Vault, Consul 등Hashicorp의 다른 제품에서도 사용되는 언어로, 선언적 인프라 정의에 최적화 되어있음. JSON과 유사한 구조를 가지면서도 주석이나 더 유연한 구문을 지원구문 이해HCL의 기본 구성 요소는 블록, 인자, 표현식이다블록 (Block)Terraform 구성의 가장 기본적인 컨테이너중괄호로 둘러싸여 있으며 내부에 인자나 다른 중첩블록 포함가능각 블록은 특정 종류의 리소스, 프로바이더, 변수 등을 정의하는데 사용됨일반적으로 타입과 레이블을 가짐#'resource'는 블록타입, 'aws_instance'는 첫 번째 레이블(리소스 타입), 'web_server'는 두 번째 ..

IaC/Terraform 2025.09.25

[IaC] Terraform(2) - 설치 및 기본 사용법

설치단일 바이너리 파일로 제공되기 때문에 설치가 매우 간단. 운영체제에 맞춰 해당 바이너리를 다운로드하고 시스템 PATH에 추가하면 됨WindowsTerraform 공식 다운로드 페이지 접속, Windows 용 Zip 파일 다운로드다운로드한 Zip파일 압축 해제 (C:\terraform 같은 특정 폴더 권장)압축 해제한 경로를 시스템 환경 변수에 추가내 PC 또는 컴퓨터를 우클릭 > 속성 > 고급 시스템 설정 >환경변수시스템 변수 아래 path 찾아 편집새로 만들기로 Terraform 바이너리 경로 추가macOSHomebrew 사용(권장)brew tap hashicorp/tapbrew install hashicorp/tap/terraform수동 설치Terraform 공식 다운로드 페이지 접속, macOS..

IaC/Terraform 2025.09.15

[IaC] Terraform(1) - 개요

TerraformHashiCorp 개발한 오픈소스 IaC도구. 클라우드 서비스(AWS, Azure, GCP 등)뿐만 아니라 온프레미스 인프라, SaaS(Software as a Service) 등 다양한 인프라 자원을 코드로 정의하고 관리할 수 있도록 설계됨.특징선언적 : 인프라의 최종상태를 정의하면 Terraform이 스스로 그 상태에 도달하기 위한 방법을 결정하고 실행함불변성: 동일한 Terraform 코드를 여러 번 실행해도 항상 동일한 결과 보장. 이미 생성된 리소스는 변경하지 않고 변경이 필요한 리소스만 업데이트모듈성: 재사용 가능한 모듈을 통해 복잡한 인프라 구성을 작은 단위로 나누어 관리 가능. 코드 재사용성 높고 유지보수 용이함확장성 : 다양한 클라우드 프로바이더, SaaS, 온프레미스 솔..

IaC/Terraform 2025.09.15