Terraform의 상태를 원격으로 관리
상태 관리를 설정하지 않고
terraform apply
명령을 실행하면 로컬 터미널에 상태 관리 파일이 생성됩니다. ( terraform.tfstate
라는 이름으로 만들어집니다.)상태 관리의 이점
이점은 다음과 같습니다.
로컬로 관리하는 경우 PC가 손상되어 인프라를 관리할 수 없게 되거나 상태 관리 파일을 분실할 위험이 없습니다.
구현해보기
상태 관리를 위한 스택 준비
Terraform에서는 상태 관리에 S3 및 DynamoDB를 사용할 수 있습니다.
S3에 상태 관리 파일을 저장하여 DynamoDB에서 충돌을 방지하는 구성으로 되어 있습니다.
또, 상태 관리용 스택에 대해서 공식에서는 이하와 같이 관리하는 것을 추천하고 있으므로, 별도 관리하는 것이 좋을 것 같습니다.
아래 인용 :
Terraform is an administrative tool that manages your infrastructure, and so ideally the infrastructure that is used by Terraform should exist outside of the infrastructure that Terraform manages.
인용 : 공식 사이트 - Multi-account AWS Architecture
여기에서는, 귀찮기 때문에 이하의 스택을 실행해 구축합니다.
테이블에는
LockID
라는 이름의 기본 키가 있어야 하므로 그 설정만 넣으십시오./**
* state管理用のS3 & DynamoDB 作成用スタック
* stack ディレクトリ内のtf実行前にこちらを先に実行する
*/
terraform {
required_version = "0.12.5"
}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_s3_bucket" "terraform_state" {
// ダメだったら別の名前にする
bucket = "terraform-state-kento75"
versioning {
enabled = true
}
}
resource "aws_dynamodb_table" "terraform_state_lock" {
name = "terraform_state_lock"
read_capacity = 1
write_capacity = 1
hash_key = "LockID"
attribute {
// 必須
name = "LockID"
type = "S"
}
}
간단한 스택 만들기
backend
를 설정하여 방금 작성한 S3 및 DynamoDB에 의한 상태 관리를 구현할 수 있습니다.terraform {
required_version = "0.12.5"
// state lock 設定
// state管理用 S3, DynamoDB は別管理
backend "s3" {
bucket = "terraform-state-kento75" # state管理用バケット
region = "ap-northeast-1"
key = "terraform.tfstate"
encrypt = true
dynamodb_table = "terraform_state_lock"
}
}
그 밖에 구현한 스택은 여기
terraform init
명령을 실행하면 backend가 S3이 되는지 확인할 수 있습니다.$ terraform init
Initializing the backend...
Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
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.
스택을 작성해 봅니다.
$ terraform apply
실행이 성공하면 S3 버킷에
terraform.tfstate
가 생성됩니다.DynamoDB에도 추가됩니다.
정말 잠겨 있는지 시도
다른 세션에서 동시에
terraform plan
를 실행할 때 어떤 동작을 수행하는지 확인하십시오.먼저 실행한 쪽은 정상적으로 동작했습니다만, 나중에 실행한 쪽은 이하와 같이 에러가 됩니다.
$ terraform plan
Error: Error locking state: Error acquiring the state lock: ConditionalCheckFailedException: The conditional request failed
status code: 400, request id: 86SS1900A1DIKG5ORN24PRLDG3VV4KQNSO5AEMVJF66Q9ASUAAJG
Lock Info:
ID: aff55b1a-0cbf-d759-7e3b-e778a391925a
Path: terraform-state-kento75/terraform.tfstate
Operation: OperationTypePlan
Who: [email protected]
Version: 0.12.5
Created: 2020-02-29 10:46:17.720234 +0000 UTC
Info:
Terraform acquires a state lock to protect the state from being written
by multiple users at the same time. Please resolve the issue above and try
again. For most commands, you can disable locking with the "-lock=false"
flag, but this is not recommended.
요약
Terraform의 backend 주위의 실장을 실시하는 것으로, 복수인으로의 운용시의 사고를 막을 수 있게 되므로, 가능한 한 실장하는 것이 좋다고 생각합니다.
Reference
이 문제에 관하여(Terraform의 상태를 원격으로 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kento75/items/9686945d37a37282ce00텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)