본문 바로가기
공부/IaC

[Terraform] 다른 backend의 state가 업데이트가 안돼요..?! (terraform_remote_state 불러오는 방식)

by haejang 2022. 4. 30.
728x90
728x90

 

terraform backend 설정에 관한 글 : [Terraform] 실행 환경 분리와 Backend 설정 (AWS/Terraform Cloud)

terraform import에 관한 글 : [Terraform] Terraform import와 terraforming (AWS)

 

태초에....A 환경과 B 환경이 있었습니다

A와 B는 S3를 backend로 사용하고 있고...서로의 output을 받아오기 위해 data로 remote_state 블럭을 설정해 두었습니다

 

A 환경...
B 환경...

A 환경에서 실제 리소스들을 잔뜩 import를 해야 하는데, B 환경에서의 output을 사용할 일이 생겨서 아래와 같은 코드들을 추가했습니다

 

## a/main.tf
locals {
  test = data.terraform_remote_state.b.outputs.test
}

## b/main.tf
output "test" {
  value = "테스트 아웃풋입니당"
}

 

 

B 환경에서 apply를 돌리고, S3의 tfstate file에 test라는 output이 적혀있는걸 잘 확인했습니다

 

그러나 A 환경에서는 다른 팀원들과의 협업을 위해 apply 없이 import만 진행하고 있었는데요...!

 

b의 output에 test가 없다구요..?
tfstate file엔 있는데...?!

 

심지어 A 환경에서 그냥 plan을 돌릴 땐 문제 없으나, import 시에만 위와 같은 에러들이 떴었는데요...

A 환경에서 state pull 명령을 내려보니 정말로 test라는 output이 없었습니다

 

 

결론은, 아래의 data block이 apply가 돌아가지 않았기 때문에 최신 state를 불러오지 못하는 것이었습니다

 

data "terraform_remote_state" "b" {
  backend = "s3"
  config = {
    bucket  = "honglab-tf-test"
    key     = "b/terraform.tfstate"
    region  = "ap-northeast-2"
  }
}

 

저는 remote state block은 그냥 해당 tfstate 파일을 바로바로 읽어오는건줄 알았는데, apply시 마다 스냅샷을 찍어 가져오는 형태였나 봅니다

협업 때문에 전체 apply는 부담스러워서, 해당 data block만 apply해준 후 import를 진행해 주었습니다

 

terraform apply -target data.terraform_remote_state.b

 

 

 

 

728x90
728x90

댓글