Terraform/OpenTofu 기초 · 변수와 출력 · 퀴즈
퀴즈: 변수와 출력
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
같은 변수에 `default`, `TF_VAR_` 환경변수, `terraform.tfvars`, 명령줄 `-var` 네 곳 모두 값이 있습니다. 최종적으로 쓰이는 값은?
- `default` 의 값
- 환경변수의 값
- 명령줄 `-var` 의 값
- `terraform.tfvars` 의 값
`variable` 과 `locals` 의 차이로 옳은 것은?
- `locals` 는 자식 모듈 안에서만 쓸 수 있고 `variable` 은 루트 모듈에서만 선언할 수 있다
- `locals` 는 밖에서 주입할 수 없는 이름 붙인 식이고, `variable` 은 외부에서 값을 받는 입구다
- 둘 다 `-var` 나 `terraform.tfvars` 로 값을 덮어쓸 수 있고 선언 문법만 다르다
- `locals` 는 계산 결과가 상태 파일에 저장되고 `variable` 은 실행하는 동안에만 메모리에 있다
변수에 `validation` 을 붙이는 가장 실질적인 이득은?
- 잘못된 값을 실행 초기에 거부해 절반만 만들어진 인프라가 생기는 것을 막는다
- 변수 설명과 허용 범위가 `terraform-docs` 출력에 자동으로 실린다
- 값 범위를 미리 알려 주므로 계획 단계의 조회 횟수가 줄어 적용이 빨라진다
- 검증을 통과한 값만 상태에 기록되므로 불필요한 속성이 빠져 상태 파일이 가벼워진다
출력에 `sensitive = true` 를 붙였을 때 실제로 보장되는 것은?
- 그 출력을 참조하는 다른 모듈에서는 값을 아예 읽을 수 없게 접근이 차단된다
- 상태 파일에 기록될 때 그 속성만 암호화되어 저장되고 읽을 때 복호화된다
- `terraform output -json` 결과에서도 값이 빠지고 마스킹 문자열로 대체된다
- 사람이 읽는 출력 화면에서 값이 가려질 뿐, 상태 파일과 JSON 출력에는 평문으로 남는다
환경마다 반드시 달라야 하는 값에 기본값을 주지 않는 편이 나은 이유는?
- 값을 깜빡했을 때 조용히 개발용 설정으로 프로덕션이 만들어지는 것을 막기 위해
- 기본값은 우선순위가 가장 높아 tfvars 나 `-var` 로 준 값을 덮어 버리기 때문
- 기본값이 있는 변수에는 `validation` 블록을 함께 선언할 수 없기 때문
- 기본값이 있으면 그 변수는 `TF_VAR_` 환경변수로 덮어쓸 수 없게 되기 때문
장애 대응 중 `-var replicas=10` 으로 서비스를 살렸습니다. 그다음 반드시 해야 할 일은?
- 아무것도 하지 않아도 값이 유지된다
- 해당 리소스를 상태에서 제거한다
- 그 변수의 기본값을 10 으로 바꾸고 커밋하지 않는다
- 그 값을 저장소의 변수 파일에 반영하고 커밋한다