본문 바로가기
  • lakescript
스터디 이야기/Terraform

[T101] 3-5. Terraform - 함수

by lakescript 2024. 6. 27.

 

더보기

이 스터디는 CloudNet@에서 진행하는 T101 스터디를 참여하면서 공부하는 내용을 기록하는 블로그 포스팅입니다.

CloudNet@에서 제공해주는 자료들과 테라폼으로 시작하는 IaC 를 바탕으로 작성되었습니다.

 

함수

테라폼은 일반적인 프로그래밍 언어적인 특성처럼 값의 유형을 변경하거나 조합할 수 있는 함수들이 내장되어있습니다. 단, 내장된 함수외에 사용자가 구현하는 별도의 사용자 정의 함수는 지원하지 않습니다. 

함수 종류

https://developer.hashicorp.com/terraform/language/functions

 

Functions - Configuration Language | Terraform | HashiCorp Developer

An introduction to the built-in functions that you can use to transform and combine values in expressions.

developer.hashicorp.com

위의 페이지에서 테라폼에 내장되어있는 함수들의 종류을 확인하실 수 있습니다. 어떤 함수가 있지? 싶어서 외울 필요 전혀 없이 위의 사이트에 접속하셔서 궁금한 함수 페이지에 접근하시면 예시도 자세히 나와있으니 확인하시면 좋습니다.

함수의 종류에는 숫자, 문자열, 컬렉션, 인코딩, 파일 시스템, 날짜/시간, 해시/암호화, IP 네트워크, 유형 변환이 있으며 테라폼 코드에 함수를 적용하면 변수나 리소스 속성, 데이터 속성, 출력 값 표현 시 작업을 동적이고 효율적으로 처리할 수 있습니다.

 

terraform console 명령어를 사용하여 테라폼에서 함수 적용 결과 확인

함수 사용의 결과를 확인하기 위해 매번 코드를 작성하고 terraform plan이나 terraform apply를 실행해 결과를 확인하는 것은 매우 비효율적입니다. 이 경우 terraform console 명령어를 사용하여 테라폼에서 함수를 적용했을 때 어떤 결과가 나오는지 확인하실 수 있습니다.

terraform console

몇가지 실습을 통해 알아보겠습니다. 

upper("foo!")
max(5, 12, 9)

 

upper 함수는 주어진 인수를 대문자로 출력하는 내장 함수이며, max는 주어진 인수 중 최대값을 찾는 내장 함수입니다.

 

#cidrnetmask(prefix)
cidrnetmask("172.16.0.0/12")

cidrnetmask 내장 함수는 CIDR 표기법으로 주어진 IPv4 주소를 서브넷 마스크 주소로 변환하는 함수입니다.

# cidrsubnet(접두사 , newbits , netnum)
cidrsubnet("1.1.1.0/24", 1, 0)
cidrsubnet("1.1.1.0/24", 1, 1)
cidrsubnet("1.1.1.0/24", 2, 2)

cidrsubnet은 주어진 IP 네트워크 주소 접두사 내에서 서브넷 주소를 계산하는 함수입니다. 

첫번째 인수는 CIDR 표기법으로 표기된 IP 네트워크 주소이고, 두번째 인수는 몇개의 서브넷으로 나눌 건지에 대한 비트(bit)입니다. 예를들어 1로 명시되어있으면 1bit이기 때문에 2개로 나눈다는 의미입니다. 세번째 인수는 그 중 몇번째를 보일건지에 대한 인수입니다.

위의 사진처럼 2개로 나눈 서브넷에서 3번째의 서브넷을 인수로 넣으면 Error가 발생하는 것을 확인하실 수 있습니다.