LabHub

Terraform/OpenTofu 기초 · 변수와 출력 · 실습

변수 우선순위와 출력 설계

LabHub 에서 이어서 보기

목표

같은 변수에 네 가지 방법으로 값을 넣어 우선순위를 직접 확인하고, 검증·지역값·출력·민감값까지 갖춘 설정 하나를 완성합니다.

왜 중요한가

"변수를 바꿨는데 반영이 안 된다"는 질문의 답은 거의 언제나 우선순위입니다. 도구는 같은 이름의 값을 여러 자리에서 받아들이고, 충돌해도 오류를 내지 않고 조용히 더 센 쪽을 씁니다. 편리한 만큼 디버깅이 어려워지므로, 덮어쓰라고 만든 값은 약한 자리에, 반드시 지켜야 할 값은 강한 자리에 두는 감각이 필요합니다. 특히 명령줄로 넘긴 값은 무엇이든 이기지만 어디에도 기록되지 않아, 장애 대응에서 쓰고 코드에 반영하지 않으면 다음 배포가 그것을 조용히 되돌립니다. 마지막으로 sensitive = true 는 화면 출력만 가릴 뿐 상태 파일과 JSON 출력에는 값이 그대로 남습니다. 이 한계를 모른 채 "민감 표시를 했으니 안전하다"고 믿는 것이 가장 흔한 사고의 시작입니다.

단계

1. /root/tf/vars/variables.tfenvironment 변수를 선언하세요. type = string, default = "dev", description 이 모두 있어야 합니다. /root/tf/vars/outputs.tf 에 이름이 environment 인 출력을 만들고, 기본값 그대로 적용한 뒤 출력을 JSON 으로 /root/tf/vars/out/default-outputs.json 에 저장하세요 (.environment.valuedev).
2. /root/tf/vars/terraform.tfvarsenvironment = "stage" 를 적고 다시 적용한 뒤, 출력을 /root/tf/vars/out/tfvars-outputs.json 에 저장하세요. 값이 stage 로 바뀌어야 합니다 — 파일이 기본값을 이깁니다.
3. 이번에는 명령줄에서 -var environment=prod 로 값을 주고 적용한 뒤, 출력을 /root/tf/vars/out/cli-outputs.json 에 저장하세요. tfvars-outputs.json 은 그대로 두어야 합니다 (여전히 stage).
4. variables.tfowner 변수를 선언하되 기본값을 platform 으로 박아 두지 마세요. TF_VAR_owner=platform 환경변수로 값을 넘겨 적용하고, 출력을 /root/tf/vars/out/env-outputs.json 에 저장하세요 (.owner.valueplatform). outputs.tfowner 출력도 추가합니다.
5. variables.tfreplica_count 변수를 추가하고 1 이상 5 이하만 허용하는 validation 블록을 넣으세요. conditionerror_message 가 모두 있어야 하고, error_message 안에 허용 범위가 1-5 라는 글자 그대로 들어가야 합니다. 범위를 벗어난 값(예: -var replica_count=9)으로 실행해 거부당한 출력을 /root/tf/vars/out/validation.txt 에 저장하세요.
6. /root/tf/vars/main.tflocals 블록을 만들고 name_prefixenvironmentowner 를 하이픈으로 이어 붙인 값으로 정의하세요. outputs.tfname_prefix 출력을 추가합니다. 8번에서 다시 만들 cli-outputs.jsonname_prefixprod-platform 이어야 합니다.
7. 출력을 /root/tf/vars/outputs.tf 한 곳에 모으고 최소 네 개(environment, owner, name_prefix, config_path)를 두되 모든 출력에 description 을 다세요. config_path 는 이 설정이 만드는 local_filefilename 을 그대로 내보냅니다.
8. variables.tfapi_token 변수를 sensitive = true 로 선언하고 값은 TF_VAR_api_token 으로 넘기세요. outputs.tf 에도 api_token 출력을 sensitive = true 로 추가합니다. 마지막으로 -var environment=prodTF_VAR_owner=platform, TF_VAR_api_token 을 함께 주고 적용한 뒤 cli-outputs.json 을 다시 만들고, 사람이 읽는 형식의 출력도 /root/tf/vars/out/sensitive.txt 에 저장하세요. 후자에는 값 대신 가려진 표시가 있어야 하고 실제 토큰 문자열이 보이면 안 됩니다.

참고

단계 8개

  1. 타입·기본값·설명을 갖춘 변수 선언하기
  2. tfvars 파일로 기본값 덮어쓰기
  3. 명령줄 값으로 파일을 이기기
  4. 환경변수로 값 주입하기
  5. 허용 범위를 코드로 못 박기
  6. locals 로 이름 접두어 조합하기
  7. 설명이 붙은 출력 모아 두기
  8. 민감값 가리기와 그 한계 확인하기