terraform validate 명령
terraform validate 명령
terraform validate 명령은 디렉터리의 구성 파일을 검증하는 명령이에요. 원격 상태나 프로바이더 API 같은 원격 서비스는 검증하지 않아요.
출처: 문서
본문
소개 (Introduction)
Validate는 제공된 변수나 기존 상태와 무관하게 구성이 문법적으로 유효하고 내부적으로 일관적인지 확인하는 검사를 실행해요. 따라서 속성 이름과 값 유형의 정확성을 포함해 재사용 가능한 모듈의 일반적인 검증에 주로 유용해요.
이 명령은 텍스트 편집기의 저장 후 검사로 또는 CI 시스템에서 재사용 가능한 모듈의 테스트 단계로 자동 실행해도 안전해요.
검증은 참조된 플러그인과 모듈이 설치된 초기화된 작업 디렉터리를 필요로 해요. 구성된 백엔드에 접근하지 않고 검증을 위한 작업 디렉터리를 초기화하려면 다음을 사용하세요:
$ terraform init -backend=false
특정 실행(특정 대상 워크스페이스, 입력 변수 값 등)의 맥락에서 구성을 검증하려면, 검증 검사를 포함하는 terraform plan 명령을 대신 사용하세요.
사용법 (Usage)
사용법: terraform validate [options]
이 명령은 다음 옵션을 받아들여요:
- -var 'NAME=VALUE' - 구성의 루트 모듈에 선언된 단일 입력 변수 값을 설정해요. 둘 이상의 변수를 설정하려면 이 옵션을 여러 번 사용하세요. 자세한 내용은 커맨드 라인의 입력 변수를 참고하세요.
- -var-file=FILENAME - .tfvars 파일의 정의를 사용해 구성의 루트 모듈에 선언된 많은 입력 변수 값을 설정해요. 둘 이상의 파일에서 값을 포함하려면 이 옵션을 여러 번 사용하세요.
-var와 -var-file 옵션 외에도 루트 모듈에서 입력 변수 값을 설정하는 다른 방법이 많이 있어요. 입력 변수에 값 할당을 참고하세요.
- -json - 텍스트 편집기 통합이나 다른 자동화 시스템에서 사용하기에 적합한, 머신이 읽을 수 있는 JSON 형식으로 출력을 생성해요. 항상 색상을 비활성화해요.
- -no-color - 지정하면 출력에 색상이 포함되지 않아요.
JSON 출력 형식 (JSON Output Format)
-json 옵션을 사용하면 Terraform은 텍스트 편집기에서 오류를 강조하는 것 같은 도구 통합에 검증 결과를 사용할 수 있도록 JSON 형식으로 검증 결과를 생성해요.
모든 JSON 출력 옵션과 마찬가지로, Terraform이 검증 작업을 시작하기 전에 오류를 만나서 JSON 출력 설정의 적용을 받지 않을 수도 있어요. 따라서 Terraform 출력을 소비하는 외부 소프트웨어는 stdout에서 유효한 JSON이 아닌 데이터를 찾을 준비를 해야 하며, 그런 경우 일반적인 오류 사례로 처리해야 해요.
출력에는 format_version 키가 포함되는데, Terraform 1.1.0 기준 값은 "1.0"이에요. 이 버전의 의미는 다음과 같아요:
"1.1""2.0"
새 메이저 버전은 Terraform 1.0 호환 약속 범위 안에서만 도입할 거예요.
일반적인 경우 Terraform은 표준 출력 스트림에 JSON 객체를 인쇄해요. 최상위 JSON 객체는 다음 속성을 가져요:
- valid (boolean): 전체 검증 결과를 요약하며, Terraform이 현재 구성을 유효하다고 간주하면
true, 오류를 감지했으면false를 나타내요. - error_count (number): Terraform이 감지한 오류 수를 나타내는 0 또는 양의 정수예요.
valid가true이면error_count는 항상 0인데, 구성이 무효함을 나타내는 것이 바로 오류의 존재이기 때문이에요. - warning_count (number): Terraform이 감지한 경고 수를 나타내는 0 또는 양의 정수예요. 경고는 Terraform이 구성을 무효하다고 간주하게 만들지는 않지만, 사용자가 고려하고 어쩌면 해결해야 할 잠재적 주의 사항을 나타내요.
- diagnostics (객체 배열): 각각 Terraform의 오류나 경고를 설명하는 중첩 객체의 JSON 배열이에요.
diagnostics의 중첩 객체는 다음 속성을 가져요:
- severity (string):
"error"또는"warning"중 하나의 진단 심각도를 나타내는 문자열 키워드예요.- 오류의 존재는 Terraform이 구성을 무효하다고 간주하게 하지만, 경고는 사용자에게 작업을 막지 않는 조언이나 주의 사항일 뿐이에요. 이후 Terraform 버전은 새 심각도 키워드를 도입할 수 있으므로, 소비자는 이해하지 못하는 심각도 값을 받아들이고 무시할 준비를 해야 해요.
- summary (string): 진단이 보고하는 문제의 성격에 대한 짧은 설명이에요.
- Terraform의 평소 인간 지향적 진단 메시지에서 summary는 "Error:" 또는 "Warning:" 표시 뒤에 인쇄되는 진단의 일종의 "제목" 역할을 해요.
- Summary는 보통 짧은 단일 문장이지만, 전체 진단을 반환하도록 설계되지 않은 하위 시스템에서 오류를 반환한 결과로 더 길어질 수도 있어요. 이 경우 오류 메시지 전체가 summary가 돼요. 이런 경우 summary에는 렌더러가 사용자에게 시각적으로 메시지를 제시할 때 존중해야 할 개행 문자가 포함될 수 있어요.
- detail (string): 문제에 대한 더 많은 세부 정보를 주는 선택적 추가 메시지예요.
- Terraform의 평소 인간 지향적 진단 메시지에서 detail은 제목과 소스 위치 참조 뒤에 나타나는 텍스트 단락을 제공해요.
- Detail 메시지는 종종 여러 단락이고 비-단락 행이 섞여 있을 수 있으므로, 사용자에게 상세 메시지를 제시하려는 도구는 선행 공백이 없는 행(단락으로 취급)과 선행 공백이 있는 행(사전 포맷된 텍스트로 취급)을 구분해야 해요. 렌더러는 단락은 렌더링 컨테이너 폭에 맞게 소프트랩하지만 사전 포맷된 행은 랩하지 않아야 해요.
- 일부 Terraform detail 메시지는 글머리 기호를 표시하기 위해 ASCII 문자를 사용해 글머리 기호 목록을 근사화해요. 이는 계약상의 포맷 규칙이 아니므로 렌더러는 이에 의존하지 말고 그 행들을 단락이나 사전 포맷된 텍스트로 취급해야 해요.
- range (객체): 진단 메시지가 관련된 구성 소스 코드의 일부를 참조하는 선택적 객체예요. 오류의 경우 일반적으로 무효하다고 감지된 특정 블록 헤더, 속성 또는 표현식의 범위를 나타내요.
- 소스 range는 현재 작업 디렉터리에서 상대 경로로 파일 이름을 주는
filename속성과, 아래에 설명된 대로 소스 위치를 설명하는start와end두 속성을 가진 객체예요. - 모든 진단 메시지가 구성의 특정 부분과 연결되지는 않으므로, 관련이 없는 진단 메시지에서는
range가 생략되거나null이 돼요.
- 소스 range는 현재 작업 디렉터리에서 상대 경로로 파일 이름을 주는
- snippet (객체): 진단 메시지가 관련된 구성 소스 코드의 발췌문을 포함하는 선택적 객체예요.
snippet 정보는 다음을 포함해요:
- context (string): 진단의 루트 컨텍스트에 대한 선택적 요약이에요. 예를 들어 진단을 촉발한 표현식을 포함하는 리소스 블록일 수 있어요. 일부 진단에서는 이 정보를 사용할 수 없으며, 이 경우 이 속성은
null이 돼요. - code (string): 진단의 소스를 포함하는 Terraform 구성의 발췌문이에요. 여러 행일 수 있으며 진단을 촉발한 표현식 주변의 추가 구성 소스 코드를 포함할 수 있어요.
- start_line (number):
code발췌문이 시작되는 소스 파일의 위치를 나타내는 1부터 시작하는 행 수예요. 진단 소스 앞에 한 줄 이상의 컨텍스트가 포함될 수 있으므로 반드시range.start.line과 같은 값은 아니에요. - highlight_start_offset (number): 진단을 촉발한 표현식의 시작을 가리키는
code문자열의 0부터 시작하는 문자 오프셋이에요. - highlight_end_offset (number): 진단을 촉발한 표현식의 끝을 가리키는
code문자열의 0부터 시작하는 문자 오프셋이에요. - values (객체 배열): 복잡한 표현식에서 진단의 소스를 이해하는 데 유용할 수 있는 0개 이상의 표현식 값을 포함해요. 이 표현식 값 객체는 아래에 설명돼요.
소스 위치 (Source Position)
진단 객체의 range 속성에서 사용되는 소스 위치 객체는 다음 속성을 가져요:
- byte (number): 표시된 파일의 0부터 시작하는 바이트 오프셋이에요.
- line (number): 표시된 파일에서 관련 위치가 포함된 행의 1부터 시작하는 행 수예요.
- column (number):
line에 표시된 행의 시작부터 유니코드 문자 수를 센 1부터 시작하는 수예요.
start 위치는 포함적이고 end 위치는 배타적이에요. 특정 오류 메시지에 사용된 정확한 위치는 사람의 해석 전용으로 의도된 것이에요.
표현식 값 (Expression Value)
표현식 값 객체는 진단을 촉발한 표현식의 일부인 값에 대한 추가 정보를 줘요. 이는 for_each 같은 구조를 사용할 때 정확히 어떤 값이 오류의 원인인지 식별하는 데 특히 유용해요. 객체는 두 속성을 가져요:
- traversal (string):
var.instance_count같은 HCL 유사 순회 문자열이에요. 복잡한 인덱스 키 값은 생략될 수 있으므로 항상 유효하고 파싱 가능한 HCL은 아닐 수 있어요. 이 문자열의 내용은 사람이 읽을 수 있도록 의도된 것이에요. - statement (string): 진단이 촉발되었을 때 표현식의 값을 설명하는 짧은 영어 단편이에요. 이 문자열의 내용은 사람이 읽을 수 있도록 의도되며 향후 Terraform 버전에서 변경될 수 있어요.