Terraform state
- Terraform state는 terraform apply를 하는 경우 리소스가 생성이 되고 난 후에 terraform .tfstate라는 파일이 생성된다.
- 즉, 내가 실행한 “apply의 결과”를 저장해 놓은 “상태”
- 현재 인프라의 상태를 의마하는 것은 아니다.
- state는 원격 저장소인 backend에도 저장할 수 있다.
Terraform Backend 란?
- Terraform Backend 는 Terraform의 state file을 어디에 저장을 하고, 가져올지에 대한 설정.
- 기본적으로는 로컬 스토리지에 저장을 하지만, 설정에 따라서 s3, consul, etcd 등 다양한 “Backend type“을 사용할 수 있다.
- consul은 Hashicorp의 솔루션
- consul은 Hashicorp의 솔루션
Terraform Backend 를 사용하는 이유?
- Locking — 보통 Terraform 코드를 혼자 작성하지 않는다. 인프라를 변경한다는 것은 굉장히 민감한 작업이 될 수 있다. 원격 저장소를 사용함으로써 동시에 같은 state 접근하는 것을 막아 의도치 않은 변경을 방지할 수 있다.
- Backup — 로컬 스토리지에 저장한다는건 유실할 수 있다는 가능성을 내포한다. S3와 같은 원격저장소를 사용함으로써 state 파일의 유실을 방지다.
Terraform에서 가장 보편적으로 사용하는 s3 backend 를 예제로 한다. AWS S3는 쉽게 구축할 수 있으며 versioning 을 지원하는 안전한 저장소다.
terraform {
backend "s3" {
bucket = "ihwoo-tfstate" # s3 bucket 이름
key = "terraform/iam/terraform.tfstate" # s3 내에서 저장되는 경로를 의미합니다.
region = "us-east-2"
encrypt = true
dynamodb_table = "terraform-lock"
}
}
Terraform Backend 실습
S3 bucket as backend
테라폼의 상태를 저장하기 위해 S3 버킷을 생성한다. AWS S3는 쉽게 구축할 수 있으며 versioning 을 지원하는 안전한 저장소다.
DynamoDB Table for Lock
동시에 같은 파일을 수정하지 못하도록 하기 위해 DynamoDB에 작업에 대한 Lock을 생성한다.
코드생성
Terraform code init.tf 파일을 작성합니다. Terraform Backend 설정을 위한 s3 와 DynamoDB를 생성하는 코드입니다.
provider "aws" {
region = "us-east-2" # Please use the default region ID
version = "~> 2.49.0" # Please choose any version or delete this line if you want the latest version
}
# S3 bucket for backend
resource "aws_s3_bucket" "tfstate" {
bucket = "ihwoo-tfstate"
versioning {
enabled = true # Prevent from deleting tfstate file
}
}
# DynamoDB for terraform state lock
resource "aws_dynamodb_table" "terraform_state_lock" {
name = "terraform-lock"
hash_key = "LockID"
billing_mode = "PAY_PER_REQUEST"
attribute {
name = "LockID"
type = "S"
}
}
'Terraform > AWS and 테라폼: Infrastructure as' 카테고리의 다른 글
[AWS and 테라폼: Infrastructure as Code] FUNCTIONS 활용하기 (0) | 2024.01.21 |
---|---|
[AWS and 테라폼: Infrastructure as Code] VARIABLES 활용하기 (0) | 2024.01.21 |
[AWS and 테라폼: Infrastructure as Code] AWS IAM 실습 (0) | 2024.01.21 |
[AWS and 테라폼: Infrastructure as Code] AWS IAM 소개 (0) | 2024.01.21 |