Terraform이 작업을 수행하면서 인프라의 현재 상태를 추적하기 위한 상태 파일 (terraform.tfstate)을 생성하게 되는데, 이 상태 파일의 관리 방식에 따라 로컬 상태(Locate State)와 원격 상태(Remote State)로 구분됩니다.
Locate State, Remote State 차이점
Local State
정의: Terraform이 리소스를 관리할 때 기본적으로 사용하는 상태 저장 방식입니다.
파일: terraform.tfstate - 이 파일은 Terraform이 관리하는 리소스의 현재 상태를 JSON 형식으로 저장합니다.
특징:
- 로컬 시스템에 상태 정보가 저장됩니다.
- 팀원 간 상태 공유가 어려울 수 있습니다.
- 로컬 저장소가 손실될 경우 상태 정보도 손실될 위험이 있습니다.
Remote State
정의: Terraform의 상태를 원격 저장소에 저장하는 방식입니다. 여러 사용자가 협업하거나 고가용성을 원할 때 유용합니다.
Backend: 상태를 원격 저장소에 저장하기 위한 설정입니다. 여러 백엔드 옵션 중에서 선택할 수 있습니다.
- Remote Backend (Terraform Cloud): Terraform의 공식 클라우드 서비스에서 제공하는 백엔드입니다.
- AWS S3 Backend: AWS의 S3 버킷을 상태 저장소로 사용하는 백엔드입니다.
Locking?
AWS S3 Backend 사용하기
Backend S3 doc Link
AWS S3는 고가용성과 확장성을 제공하는 객체 스토리지 서비스입니다.
Terraform에서는 이를 원격 상태 저장소로 사용할 수 있습니다.
설정 방법
1. S3 버킷 생성: Terraform 상태 정보를 저장할 S3 버킷을 생성합니다.
2. 백엔드 설정: terraform 블록 내에 backend “s3” 설정을 추가합니다.
3. 버킷, 키, 리전 정보 입력: 상태 정보가 저장될 위치와 관련된 정보를 설정합니다.
# terraform backend 사용을 위한 추가 - bucket, key, region
terraform {
backend "s3" {
bucket = "jeff-terraform-backend"
key = "s3-backend/terraform.tfstate"
region = "ap-northeast-2"
}
}
결과
terraform init을 새로 한 뒤, terraform apply를 하면 해당 bucket에 key로 지정해준 파일이 생성됨을 확인할 수 있다.
Remote Backend (Terraform Cloud) 사용하기
Terraform cloud Link
Terraform Cloud는 HashiCorp에서 제공하는 SaaS(Software as a Service)입니다.
이 서비스를 사용하면 원격 백엔드를 쉽게 설정하고, 협업 기능, 상태 관리, 작업 실행 기록 조회 등의 추가 기능을 활용할 수 있습니다.
설정 방법
1. Terraform Cloud 계정 생성 및 로그인.
2. 조직 및 워크스페이스 생성: 워크스페이스는 Terraform 프로젝트 단위의 그룹입니다.
Create new organization
organization = "dewble”
workspace = “tf-cloud-backend”
3. Terraform Cloud API 토큰 생성: Terraform CLI와 Terraform Cloud 간의 인증을 위한 토큰을 생성합니다.
set terraform cloud token
4. .terraformrc 파일에 토큰 저장: 생성된 토큰을 로컬 시스템의 ~/.terraformrc 파일에 저장합니다.
cat ~/.terraformrc
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"
# terraform token
credentials "app.terraform.io" {
token = "dmLpYT6PAMzMCw.atlasv1.nUtqrsunWBxYr7MVhByhETAbVWdK2ldMwiEzWyebV1NqlyAJyEYzAGMmgbPoz57zNF0"
}
5. 백엔드 설정 변경: terraform 블록 내에 backend "remote" 설정을 추가하고, 조직 및 워크스페이스 정보를 입력합니다.
change backend - main.tf
# terraform backend 사용을 위한 추가 - bucket, organization, workspace
terraform {
backend "remote" {
bucket = "app.terraform.io"
organization = "dewble"
workspaces {
name = "tf-cloud-backend"
}
}
}
결과
tf init
> tf init
Initializing the backend...
Successfully configured the backend "remote"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
- Finding latest version of hashicorp/aws...
- Installing hashicorp/aws v4.51.0...
- Installed hashicorp/aws v4.51.0 (signed by HashiCorp)
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Edit Settings
Execution mode → Local
tf apply
tf apply 이후 terraform cloud 에서 상태가 어떻게 변했는지, 실행중 에러가 발생했다면 어디서 에러가 발생했는지 등을 확인할 수 있다.
주의사항
Terraform의 상태는 매우 중요한 정보를 포함하므로 원격 상태를 사용할 때는 액세스 제어, 암호화 및 백업에 주의해야 합니다.
토큰 및 인증 정보는 민감한 정보이므로 안전하게 관리하고, 노출되지 않도록 주의해야 합니다.
'IaC > Terraform' 카테고리의 다른 글
[Terraform]리소스 강제 교체하기: taint와 untaint 사용법 (0) | 2023.09.01 |
---|---|
[Terraform]상태(state) 관리 명령어 사용 방법 (0) | 2023.08.27 |
[Terraform]반복문(For)을 사용하여 resource 작성하는 방법 (0) | 2023.08.20 |
[Terraform]조건문(Conditional)을 사용하여 resource 작성하는 방법 (0) | 2023.08.20 |
[Terraform]count와 for_each를 사용하여 반복되는 resource 작성하는 방법 (0) | 2023.08.20 |