이 튜토리얼에서는 Cloud Storage 버킷에 Terraform 상태를 저장하는 방법을 알아봅니다.
기본적으로 Terraform은 상태를 terraform.tfstate
라는 파일에 로컬로 저장합니다. 이러한 기본 구성으로 인해 여러 사용자가 동시에 Terraform을 실행하고 각 머신이 현재 인프라를 자체적으로 이해할 경우에는 팀의 Terraform 사용이 어려워질 수 있습니다.
이러한 문제를 방지하기 위해 이 페이지에서는 Cloud Storage 버킷을 가리키는 원격 상태를 구성하는 방법을 보여줍니다. 원격 상태는 Terraform 백엔드의 기능입니다.
환경 준비
Terraform 샘플이 포함된 GitHub 저장소를 클론합니다.
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
작업 디렉터리로 변경합니다.
cd terraform-docs-samples/storage/remote_terraform_backend_template
Terraform 파일 검토
main.tf
파일을 검토합니다.cat main.tf
출력은 다음과 비슷합니다.
이 파일은 다음 리소스를 설명합니다.
random_id
: Cloud Storage 버킷의 이름을 고유하게 만들기 위해 Cloud Storage 버킷 이름에 추가됩니다.google_storage_bucket
: 상태 파일을 저장할 Cloud Storage 버킷입니다. 이 버킷은 다음 속성을 갖도록 구성됩니다.- 객체가 있는 경우 버킷이 삭제되지 않도록
force_destroy
를false
로 설정합니다. 그래야 버킷의 상태 정보가 실수로 삭제되지 않습니다. - 버킷 콘텐츠가 실수로 공개적으로 노출되지 않도록
public_access_prevention
을enforced
로 설정합니다. - 액세스 제어 목록 대신 IAM 권한을 사용하여 버킷과 해당 콘텐츠에 대한 액세스를 제어할 수 있도록
uniform_bucket_level_access
를true
로 설정합니다. - 이전 버전의 상태가 버킷에 보존되도록
versioning
이 사용 설정됩니다.
- 객체가 있는 경우 버킷이 삭제되지 않도록
local_file
: 로컬 파일입니다. 이 파일의 콘텐츠는 버킷이 생성된 후 Terraform이 Cloud Storage 버킷을 원격 백엔드로 사용하도록 지시합니다.
Cloud Storage 버킷 프로비저닝
Terraform을 초기화합니다.
terraform init
terraform init
를 처음 실행하면main.tf
파일에 지정한 Cloud Storage 버킷이 아직 존재하지 않으므로 Terraform이 로컬 백엔드를 초기화하여 로컬 파일 시스템에 상태를 저장합니다.구성을 적용하여
main.tf
파일에 설명된 리소스를 프로비저닝합니다.terraform apply
메시지가 표시되면
yes
를 입력합니다.terraform apply
를 처음 실행하면 Terraform이 상태를 저장할 Cloud Storage 버킷을 프로비저닝합니다. 로컬 파일도 만듭니다. 이 파일의 콘텐츠는 Terraform에 Cloud Storage 버킷을 원격 백엔드로 사용하여 상태를 저장하도록 지시합니다.
Cloud Storage 버킷으로 상태 마이그레이션
Terraform 상태를 원격 Cloud Storage 백엔드로 마이그레이션합니다.
terraform init -migrate-state
Terraform은 상태 파일이 이미 로컬에 있음을 감지하고 새 Cloud Storage 버킷에 상태를 마이그레이션하라는 메시지를 표시합니다. 메시지가 표시되면
yes
를 입력합니다.
이 명령어를 실행한 후 Terraform 상태가 Cloud Storage 버킷에 저장됩니다. Terraform은 명령어를 실행하기 전 이 버킷에서 최신 상태를 가져오고 명령어를 실행한 후 버킷으로 최신 상태를 푸시합니다.