本文へスキップ

can 関数

can は与えられた式を評価し、式がエラーなしで結果を生成したかどうかを示すブール値を返します。

これは、引数の評価時に発生したエラーをキャッチできる特殊な関数です。can を使用できるほとんどの状況では、より簡潔に失敗した式のフォールバック値を定義できるため、代わりにtry を使用することをお勧めします。

can の主な目的は、カスタム変数検証ルールを作成する際に、エラー状態をブール値の検証結果に変換することです。例:

コードブロック
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 関数は、実行時まで不明なデータへのアクセスから生じる *動的* なエラーのみをキャッチして処理できます。不正なリソース参照など、入力に対して無効であることが証明できる式に関連するエラーはキャッチしません。

コードブロック
> 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 は、一連の式を評価しようと試み、最初に成功した式の結果を返します。