본 시리즈는 가시다님의 T101(테라폼으로 시작하는 IaC) 3기 진행 내용입니다. (가시다님 노션)
도서 정보
https://www.yes24.com/Product/Goods/119179333
실습 코드
https://github.com/terraform101
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 활용
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 뿐만 아니라 다른 수학 연산 방식도 함수로 제공한다
이러니 테라폼이 하나의 언어로써 카테고리에 등록된 거구나 실감한다.
#
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으로 전달한 값을 사용하는 용도가 가장 큰 사용처이다.
- 자식 모듈의 특정 값을 정의하고 루트 모듈에서 결과를 참조
- 서로 다른 루트 모듈의 결과를 원격으로 읽기 위한 접근 요소
'Tech > Terraform' 카테고리의 다른 글
[T101_3기] 3주차 - 기본 사용 및 프로바이더 (2/3) - 기본 사용(2/2) (0) | 2023.09.10 |
---|---|
[T101_3기] 3주차 - 기본 사용 및 프로바이더 (1/3) - 기본 사용(1/2) (0) | 2023.09.10 |
[T101_3기] 2주차 - 기본 사용 (2/3) - 입력 변수(Variable) 및 지역값(local) (0) | 2023.09.09 |
[T101_3기] 2주차 - 기본 사용 (1/3) - 데이터 소스 및 반복문 (0) | 2023.09.09 |
[T101_3기] 1주차 - Terraform 설명 및 환경 구성 (2/2) - 도전 과제 (0) | 2023.09.01 |
댓글