[기본 구성 요소] state 파일
2024. 11. 26. 14:05ㆍTerraform/[인프런] 아키텍처와 함께하는 Terraform
1. state 파일
- Terraform이 관리하는 인프라의 현재 상태를 저장하는 파일이다.
- Terraform이 리소스를 추적하고 변경 사항을 계산하며 기존 리소스와의 동기화를 유지하는데 핵심적인 역할을 한다.
- 기본적으로 terraform.tfstate라는 이름으로 로컬에 저장된다.
- 원격 저장소(ex. S3, Azure Blob 등)에서도 관리할 수 있다.
2. state 파일 주요 특징
- 현재 상태 저장 : Terraform이 관리하는 모든 리소스 구성을 저장하여 실제 상태와 동기화한다.
- 변경 사항 추적 : terraform plan과 terraform apply를 실행할 때, state 파일을 기준으로 변경 사항 계산한다.
- 리소스 간 의존성 관리 : 의존성 추적하여 Terraform이 올바른 순서로 리소스를 생성, 수정, 삭제하도록 한다.
- 로컬 및 원격 관리 : 기본적으로 로컬에 저장되지만 협업 시 원격 저장소를 구성해 여러 사용자가 공유할 수 있다.
- 민감한 데이터 포함 가능 : 비밀번호나 키와 같은 민감한 데이터도 포함된다.
- 자동 생성 및 관리 : Terraform 실행 시 자동으로 생성되고, 필요할 때 업데이트 된다.
3. state 파일 구조
- JSON 형식으로 저장된다.
- Version : Terraform state 파일의 버전 정보
- Resources : Terraform이 관리하는 모든 리소스 정보
- Dependencies : 리소스 간의 의존성 정보
* 예시
{
"version": 4,
"resources": [
{
"type": "aws_instance",
"name": "example",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"attributes": {
"id": "i-0abc123456def7890",
"ami": "ami-0c1a7f89451184c8b",
"instance_type": "t2.micro",
"tags": {
"Name": "ExampleInstance"
}
}
}
]
}
]
}
4. state 파일 예제
- Terraform 구성 파일 예제
* 예제
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-0c1a7f89451184c8b"
instance_type = "t2.micro"
tags = {
Name = "ExampleInstance"
}
}
- state 파일 생성 및 내용 확인
- terraform apply 실행 후, Terraform이 terraform.tfstate 파일을 생성하고 리소스 정보를 저장한다.
* 예제
{
"version": 4,
"resources": [
{
"type": "aws_instance",
"name": "example",
"instances": [
{
"attributes": {
"id": "i-0abc123456def7890",
"ami": "ami-0c1a7f89451184c8b",
"instance_type": "t2.micro",
"tags": {
"Name": "ExampleInstance"
}
}
}
]
}
]
}
- state 파일의 원격 관리(원격 저장소 설정 예제)
* 예제
terraform {
backend "s3" {
# state 파일을 저장할 S3 버킷 이름
bucket = "my-terraform-state"
# S3 내에서 state 파일의 경로
key = "terraform.tfstate"
# S3 버킷이 위치한 리전
region = "ap-northeast-2"
# 파일 암호화 여부
encrypt = true
# Terraform state 잠금 파일을 저장할 DynamoDB 테이블 이름(동시 작업 방지)
dynamodb_table = "terraform-lock"
}
}
5. state 파일 사용 시 유의사항
- 수동 편집 금지 : Terraform 자체가 관리하므로 직접 수정하면 상태가 손상될 수 있다.(백업 필수)
- 버전 관리 필수
- 암호화
- 잠금 사용 : 동시 실행 방지 위해 활성화 한다.(ex. S3+DynamoDB)
'Terraform > [인프런] 아키텍처와 함께하는 Terraform' 카테고리의 다른 글
[기본 구성 요소] 백엔드(Backends) (0) | 2024.11.26 |
---|---|
[기본 구성 요소] Modules (0) | 2024.11.26 |
[기본 구성 요소] Output (1) | 2024.11.26 |
[기본 구성 요소] Variables (0) | 2024.11.26 |
[기본 구성 요소] Resource (0) | 2024.11.26 |