terraform output 명령
terraform output 명령
terraform output 명령은 상태 파일에서 출력 변수(output variable)의 값을 추출하는 명령이에요. 배포된 인프라의 결과값(예: IP 주소, DNS 이름)을 커맨드라인에서 확인하거나 스크립트에서 활용할 때 매우 자주 사용돼요.
출처: 문서
본문
사용법 (Usage)
terraform output [options] [NAME]
추가 인자 없이 실행하면 output은 루트 모듈의 모든 출력값을 표시해요. 출력 NAME을 지정하면 그 출력값의 값만 출력돼요.
커맨드라인 플래그는 모두 선택 사항이에요. 다음 플래그를 사용할 수 있어요.
-json: 지정하면 출력값이 출력당 하나의 키를 가진 JSON 객체로 형식화돼요.NAME을 지정하면 지정한 출력값만 반환돼요. 결과를jq같은 도구에 파이프해서 추가 처리할 수 있어요.-raw: 지정하면 Terraform이 지정한 출력값을 문자열로 변환하고 특별한 형식 없이 그 문자열을 출력에 직접 인쇄해요. 셸 스크립트에서 작업할 때 편리하지만, string, number, boolean 값만 지원해요. 복잡한 데이터 타입을 처리할 때는-json을 사용해 주세요.-no-color: 지정하면 출력에 색상이 포함되지 않아요.-state=path: 상태 파일의 경로. 기본값은terraform.tfstate예요. 로컬 백엔드 전용의 레거시 옵션이에요.
참고:
-json또는-raw커맨드라인 플래그를 사용하면 Terraform이sensitive값을 평문으로 표시해요. 자세한 내용은 Manage sensitive data 문서를 참고해 주세요.
예시 (Examples)
이 예시들은 다음 Terraform 출력 스니펫을 가정해요.
output "instance_ips" {
value = aws_instance.web.*.public_ip
}
output "lb_address" {
value = aws_alb.web.public_dns
}
output "password" {
sensitive = true
value = var.secret_password
}
모든 출력값을 나열하려면:
$ terraform output
instance_ips = [
"54.43.114.12",
"52.122.13.4",
"52.4.116.53"
]
lb_address = "my-app-alb-1657023003.us-east-1.elb.amazonaws.com"
password = <sensitive>
출력값을 이름으로 지정하면 Terraform이 sensitive 값을 걸러내지 않는다는 점을 주의해 주세요.
$ terraform output password
password = notasecurepassword
하지만 Terraform은 출력값을 이름으로 지정해도 ephemeral 값을 완전히 생략해요. Ephemeral 값은 상태에 저장되거나 Terraform 플랜에 포함되지 않아요. 자세한 내용은 Manage sensitive data 문서를 참고해 주세요.
로드 밸런서의 DNS 주소를 조회하려면:
$ terraform output lb_address
"my-app-alb-1657023003.us-east-1.elb.amazonaws.com"
모든 인스턴스 IP 주소를 조회하려면:
$ terraform output instance_ips
instance_ips = [
"54.43.114.12",
"52.122.13.4",
"52.4.116.53"
]
terraform output 명령은 루트 모듈에 정의된 출력값만 표시해요. 하위 모듈의 출력값을 표시하려면 하위 모듈 출력값의 값을 사용해서 루트 모듈에 output 블록을 정의해요. 아래 예시는 lb_address라는 출력값을 정의한 loadbalancer라는 하위 모듈을 사용해요. 그런 다음 루트 모듈에 address라는 출력값을 정의해서 terraform output을 실행할 때 그 값에 접근해요.
module "loadbalancer" {
source = "./modules/loadbalancer"
}
output "address" {
value = module.loadbalancer.lb_address
}
자동화에서 사용하기 (Use in automation)
terraform output 명령은 기본적으로 사람이 읽기 좋은 형식으로 표시하며, 이 형식은 명확성을 위해 시간이 지나며 바뀔 수 있어요.
스크립팅과 자동화를 위해서는 -json을 사용해서 안정적인 JSON 형식을 만들어요. jq 같은 JSON 커맨드라인 파서로 출력을 파싱할 수 있어요.
$ terraform output -json instance_ips | jq -r '.[0]'
54.43.114.12
셸 스크립트에서 문자열 값을 직접 사용하는 일반적인 경우에는 -raw를 사용하면 추가 escaping이나 공백 없이 문자열을 바로 출력할 수 있어요.
$ terraform output -raw lb_address
my-app-alb-1657023003.us-east-1.elb.amazonaws.com
-raw 옵션은 Terraform이 자동으로 문자열로 변환할 수 있는 값에서만 동작해요. 객체 같은 복잡한 타입의 값을 다룰 때는 -json을 사용하고, 필요하다면 jq와 조합해 주세요.
Terraform 문자열은 원시 바이트가 아니라 유니코드 문자의 시퀀스이므로, -raw 출력은 비ASCII 문자가 포함되면 UTF-8로 인코딩돼요. 다른 문자 인코딩이 필요하면 iconv 같은 별도 명령으로 Terraform의 raw 출력을 트랜스코딩해 주세요.
더 알아보기 (Learn more)
- Terraform output 블록 문서
- Manage sensitive data 문서
- terraform show 명령
- Terraform CLI 명령 목록