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, 표현식 시퀀스를 차례로 평가해 첫 번째로 성공한 결과를 반환하는 함수.

더 알아보기 (Learn more)