함수 호출

함수 호출 (Function Calls)

Terraform 언어에는 표현식 안에서 값을 변환하고 결합하는 데 사용할 수 있는 내장 함수가 여러 개 있어요. 이것들은 연산자와 비슷하지만 모두 공통된 문법을 따라요.

출처: 문서

본문

함수 호출 문법

함수 호출은 다음과 같은 형태를 가져요:

<FUNCTION NAME>(<ARGUMENT 1>, <ARGUMENT 2>)

함수 이름은 호출할 함수를 지정해요. 정의된 각 함수는 특정 수의 인자와 특정 값 타입을 기대하며, 결과로 특정 값 타입을 반환해요.

일부 함수는 임의의 수의 인자를 받아요. 예를 들어 min 함수는 얼마든지 많은 숫자 인자를 받아 그중 가장 작은 값을 반환해요:

min(55, 3453, 2)

함수 호출 표현식은 함수의 반환 값으로 평가돼요.

사용 가능한 함수

사용 가능한 함수의 전체 목록은 함수 참조를 참고하세요.

함수 인자 확장 (Expanding Function Arguments)

함수에 전달할 인자가 list나 tuple 값으로 제공된다면 그 값을 별도의 인자로 *확장(expand)*할 수 있어요. 리스트 값을 인자로 제공하고 그 뒤에 ... 기호를 붙이면 돼요:

min([55, 2453, 2]...)

확장 기호는 세 개의 마침표(...)이고 유니코드 줄임표 문자()가 아니에요. 확장은 함수 호출에서만 사용할 수 있는 특별한 문법이에요.

민감한 데이터를 함수 인자로 사용하기

민감한 입력 변수민감한 출력 값 같은 민감한 데이터를 함수 인자로 사용하면 함수 호출 결과도 민감한 것으로 표시돼요.

이것은 호출하는 함수와 무관하게 적용되는 보수적인 동작이에요. 예를 들어, 민감한 입력 변수를 포함하는 객체를 keys() 함수에 전달하면 결과리스트도 민감해져요:

> local.baz
{
  "a" = (sensitive value)
  "b" = "dog"
}
> keys(local.baz)
(sensitive value)

Terraform이 함수를 호출하는 시점 (When Terraform Calls Functions)

Terraform의 내장 함수 대부분은 프로그래밍 언어 용어로 순수 함수예요. 즉 그 결과가 인자에만 기반하므로 Terraform이 언제 호출하든 실질적인 차이가 없어요.

하지만 소수의 함수는 외부 상태와 상호작용하므로, 이런 함수에 대해서는 Terraform 실행 중 다른 이벤트와 관련해 언제 호출되는지 아는 것이 도움이 될 수 있어요.

특별한 함수의 작은 집합에는 file, templatefile, timestamp, uuid가 있어요. 이 함수들을 다루지 않는다면 이 섹션을 읽을 필요는 없지만, 아래 정보가 흥미로운 배경 지식이 될 수는 있어요.

filetemplatefile 함수는 구성의 정적 부분으로 포함된 파일을 읽기 위한 것이므로, Terraform은 다른 작업을 하기 전에 초기 구성 검증의 일부로 이 함수들을 실행해요. 즉 plan이나 apply 단계에서 구성이 디스크에 동적으로 생성하는 파일을 이 함수들로 읽을 수는 없어요.

timestamp 함수는 Terraform이 호출하는 시점의 현재 시스템 시간을 반환하고, uuid 함수는 호출할 때마다 다른 무작위 결과를 반환해요. 특별한 동작이 없다면, 이 둘은 apply 단계의 최종 구성이 plan에 표시된 작업과 일치하지 않게 만들어 Terraform 실행 모델을 위반하게 돼요.

그래서 Terraform은 두 함수 모두 plan 단계에서 알 수 없는 값 결과를 생성하도록 배치하고, 실제 결과는 apply 단계에서만 결정돼요. 특히 timestamp는 기록된 시간이 Terraform이 변경을 계획한 시점이 아니라 변경 적용을 시작한 순간이 돼요.

이 함수들의 동작에 대한 자세한 내용은 각각의 문서 페이지를 참고하세요.

더 알아보기 (Learn more)