공부하면서/Terraform

[T1012] 2주차 - 테라폼 기본 사용 2/3 (출력 output)

omelette master 2023. 7. 15. 20:02
해당 내용은 T1012 스터디에 나온 내용과 '테라폼으로 시작하는 IaC' 책을 기준으로 정리 했습니다

3.8 출력 output

출력 값은 주로 테라폼 코드의 프로비저닝 수행 후의 결과 속성 값을 확인하는 용도로 사용된다.
또한 프로그래밍 언어에서 코드 내 요소 간에 제한된 노출을 지원하듯
테라폼 모듈 간, 워크스페이스 간 데이터 접근 요소로도 활용할 수 있다.
  • 루트 모듈에서 사용자가 확인하고자 하는 특정 속성 출력
  • 자식 모듈의 특정 값을 정의하고 루트 모듈에서 결과를 참조
  • 서로 다른 루트 모듈의 결과를 원격으로 읽기 위한 접근 요소

output 선언

모듈 내에서 생성되는 속성 값들은 outout 블록에 정의된다
output "instance_ip_addr" {
  value = "http://${aws_instance.server.private_ip}"
}
  • 출력되는 값은 value의 값이며 테라폼이 제공하는 조합과 프로그래밍적인 기능들에 의해 원하는 값을 출력할 수 있다.
  • 참고할점은 output 결과에서 리소스 생성 후 결정되는 속성 값은 프로비저닝이 완료되어야
    최종적으로 결과를 확인할 수 있고 terraform plan 단계에서는 적용될 값이 출력하지 않는다는 것이다.

사용가능한 메타인수

  • description: 출력 값 설명
  • sensitive: 민감한 출력 값임을 알리고 테라폼의 출력문에서 값 노출을 제한
  • depends_on: value에 담길 값이 특정 구성에 종속성이 있는 경우 생성되는 순서를 임의로 조정
  • precondition: 출력 전에 지정된 조건을 검증

output 활용

  • abspath : 파일 시스템 경로를 포함하는 문자열을 가져와 절대 경로로 변환하는 함수
# 실습환경 구성
mkdir 3.8 && cd 3.8

# main.tf 생성
resource "local_file" "abc" {
  content  = "abc123"
  filename = "${path.module}/abc.txt"
}

output "file_id" {
  value = local_file.abc.id
}

output "file_abspath" {
  value = abspath(local_file.abc.filename)
}

terraform init && terraform plan

output이 없다

terraform apply -auto-approve

file_abspath 와 file_id가 output으로 출력되었다