본문 바로가기
Tech/Terraform

[T101_3기] 2주차 - 기본 사용 (3/3) - 출력(output)

by 구름_쟁이 2023. 9. 9.

본 시리즈는 가시다님의 T101(테라폼으로 시작하는 IaC) 3기 진행 내용입니다. (가시다님 노션)

 

도서 정보

https://www.yes24.com/Product/Goods/119179333

 

테라폼으로 시작하는 IaC - 예스24

“현업에서 요구하는 진짜 IaC 사용법”테라폼으로 배우는 인프라 운영의 모든 것IaC는 효율적인 데브옵스와 클라우드 자동화 구축을 위해 꼭 필요한 기술로 각광받고 있다. 그중에서도 테라폼

www.yes24.com

실습 코드

https://github.com/terraform101

 

목차

1. 데이터 소스 및 반복문 - (링크)
2. 입력 변수(Variable) 및 지역값(local) - (링크)
3. 출력(output)

 

 


1. 출력(output)

출력 값은 주로 테라폼 코드의 프로비저닝 수행 후의 결과 속성 값을 확인하는 용도로 사용된다.

또한 프로그래밍 언어에서 코드 내 요소 간에 제한된 노출을 지원하듯, 테라폼 모듈 간, 워크스페이스 간 데이터 접근 요소로도 활용할 수 있다.

예를 들면 자바의 getter와 비슷한 역할이다. 출력 값의 용도는 다음과 같이 정의할 수 있다.

  • 루트 모듈에서 사용자가 확인하고자 하는 특정 속성 출력
  • 자식 모듈의 특정 값을 정의하고 루트 모듈에서 결과를 참조
  • 서로 다른 루트 모듈의 결과를 원격으로 읽기 위한 접근 요소

output 선언

  • 모듈 내에서 생성되는 속성 값들은 outout 블록에 정의된다
output "instance_ip_addr" {
  value = "http://${aws_instance.server.private_ip}"
}
  • 출력되는 값은 value의 값이며 테라폼이 제공하는 조합과 프로그래밍적인 기능들에 의해 원하는 값을 출력할 수 있다.
  • 주의할 점은 output 결과에서 리소스 생성 후 결정되는 속성 값은 프로비저닝이 완료되어야 최종적으로 결과를 확인할 수 있고 terraform plan 단계에서는 적용될 값이 출력하지 않는다는 것이다.
  • 변수 정의 시 사용 가능한 메타인수는 다음과 같다.
    • description : 출력 값 설명
    • sensitive : 민감한 출력 값임을 알리고 테라폼의 출력문에서 값 노출을 제한
    • depends_on : value에 담길 값이 특정 구성에 종속성이 있는 경우 생성되는 순서를 임의로 조정
    • precondition : 출력 전에 지정된 조건을 검증

output 활용

  • main.tf 파일 내용
    • (참고) abspath : 파일 시스템 경로를 포함하는 문자열을 가져와 절대 경로로 변환하는 함수 - 링크
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)
}
  • 실행 : plan 실행 시, 이미 정해진 속성은 출력을 예측하지만 아직 생성되지 않은 file_id 값은 값의 경우는 결과 예측을 할 수 없다
# plan 실행 시, 이미 정해진 속성은 출력을 예측하지만
terraform init && terraform plan
...
Changes to Outputs:
  + file_abspath = "/Users/gasida/Downloads/workspaces/3.8/abc.txt"
  + file_id      = (known after apply)


# 
terraform apply -auto-approve
...
Outputs:
file_abspath = "/Users/gasida/Downloads/workspaces/3.8/abc.txt"
file_id = "6367c48dd193d56ea7b0baad25b19455e529f5ee"

# graph 확인 > graph.dot 파일 선택 후 오른쪽 상단 DOT 클릭
terraform graph > graph.dot

#
terraform state list
terraform output

 

(추가) abs 함수: 숫저의 절대값 반화, 음수면 양수로 - 링크, abapath 함수

abs 뿐만 아니라 다른 수학 연산 방식도 함수로 제공한다

이러니 테라폼이 하나의 언어로써 카테고리에 등록된 거구나 실감한다.

 

 

 

https://youtu.be/ejAwCK-gr0U

#
terraform state list
terraform output

terraform console
>
-----------------
abspath(local_file.abc.filename)
...

abspath(path.root)
...

abs(23)
...

abs(0)
...

abs(-12.4)
...

exit
-----------------

 

 

 

 

결론

2주차도 마무리가 되었다.

output은 단순히 표출하는 용도가 아닌 다른 모듈에서 output으로 전달한 값을 사용하는 용도가 가장 큰 사용처이다.

  • 자식 모듈의 특정 값을 정의하고 루트 모듈에서 결과를 참조
  • 서로 다른 루트 모듈의 결과를 원격으로 읽기 위한 접근 요소

 

댓글