can 함수
can 함수
can 함수는 주어진 표현식을 평가하고, 그 표현식이 오류 없이 결과를 만들어냈는지 여부를 나타내는 불리언(boolean) 값을 반환해요.
출처: 문서
본문
can은 인자 평가 중에 발생하는 오류를 잡을 수 있는 특별한 함수예요. can을 사용할 수 있는 대부분의 상황에서는 try를 사용하는 게 더 좋아요. 실패하는 표현식에 대한 대체(fallback) 값을 더 간결하게 정의할 수 있기 때문이에요.
can의 주요 용도는 변수 검증(variable validation)을 작성할 때 오류 조건을 불리언 검증 결과로 바꾸는 거예요. 예를 들어:
variable "timestamp" {
type = string
validation {
# formatdate fails if the second argument is not a valid timestamp
condition = can(formatdate("", var.timestamp))
error_message = "The timestamp argument requires a valid RFC 3339 timestamp."
}
}
can 함수는 런타임까지 알 수 없는 데이터에 접근할 때 발생하는 동적 오류만 잡아서 처리할 수 있어요. 잘못된 리소스 참조처럼 어떤 입력에 대해서도 유효하지 않다고 증명될 수 있는 표현식과 관련된 오류는 잡지 못해요.
경고: can 함수는 변수 검증 규칙 안의 간단한 테스트만을 위한 함수예요. 기술적으로는 어떤 종류의 표현식도 받아들이고 설정의 다른 곳에서도 사용할 수 있지만, 다른 문맥에서는 사용하지 않는 걸 권장해요. 설정의 다른 곳에서 오류 처리가 필요하면 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.
관련 함수
try, 표현식 시퀀스를 차례로 평가해 첫 번째로 성공한 결과를 반환하는 함수.