can 함수

can 함수

can 함수는 주어진 표현식을 평가해서, 오류 없이 결과를 만들어냈는지를 불리언 값으로 돌려주는 함수예요. 표현식이 성공했는지 실패했는지 먼저 확인하고 싶을 때 사용해요.

출처: Packer 공식 문서

본문

can은 자기 인자를 평가하면서 발생하는 오류를 잡아낼 수 있는 특별한 함수예요. 대부분 can을 쓸 자리에는 try를 쓰는 게 더 나아요. try를 쓰면 실패한 표현식에 대한 폴백(fallback) 값을 더 간결하게 정의할 수 있거든요.

can 함수는 런타임 때까지 알 수 없는 데이터에 접근하면서 생기는 동적 오류만 잡아낼 수 있어요. 잘못된 리소스 참조처럼 어떤 입력에 대해서도 무효임이 증명될 수 있는 표현식과 관련된 오류는 잡아내지 못해요.

경고: can 함수는 변수 검증 규칙(variable validation rules) 안에서의 단순한 테스트용으로만 쓰는 걸 권장해요. 기술적으로는 어떤 종류의 표현식이든 받아들이고 구성의 다른 곳에서도 쓸 수 있지만, 다른 맥락에서 쓰는 것은 권장하지 않아요. 구성의 다른 곳에서 오류를 처리할 때는 try를 쓰는 편이 좋아요.

예시

> local.foo
{
  "bar" = "baz"
}
> can(local.foo.bar)
true
> can(local.foo.boop)
false

can 함수는 동적 표현식 평가 이전에도 명백히 무효인 구성, 예를 들어 잘못된 참조나 선언되지 않은 최상위 객체 참조 같은 것과 관련된 오류는 잡아내지 못해요:

> can(local.nonexist)

Error: Reference to undeclared local value

A local value with the name "nonexist" has not been declared.

더 알아보기 (Learn more)

  • try 함수 - 일련의 표현식을 차례로 평가해서 처음 성공한 것의 결과를 돌려줘요.
  • Packer 함수 목록 - Packer HCL 템플릿에서 사용할 수 있는 모든 함수를 확인해 보세요.