殆ど使う機会は無いですが、関数により違いがあったのでメモ。
題材
list 型の変数の要素に対して演算する例です。
variable "list" { default = [56, 27, 84, 13, 42] } output "count_value" { value = length(var.list) } output "sum_value" { value = sum(var.list) } output "min_value" { value = min(var.list...) } output "max_value" { value = max(var.list...) }
結果
Outputs: count_value = 5 max_value = 84 min_value = 13 sum_value = 222
Count
length 関数で取得します。
これは利用頻度がそれなりにある気がします。
length(var.list)
別の使い方として string を渡して文字数を取得することもできます。 ちなみに Terraform では count という関数は無く、別の意味を持ちます。 複数リソースを作成するための構文になります。参考: The count Meta-Argument
Sum
sum 関数で取得します。
sum(var.list)
Min / Max
Nurmeric Functions に分類され、1つ以上の number を渡して使うようになっています。
list を渡す場合は ...
を末尾に付与する必要があります。
min(var.list...) max(var.list...)
Average
avg や average 関数はありません。 使うケースも思い浮かばないです。
どうしても必要となったら自前関数を無理やり作ることになるのではと思います。
- external 例
data "external" "avg" { program = ["python", "./calc_avg.py"] query = { values = join(",", var.list) } } output "avg_value" { value = tonumber(data.external.avg.result.avg) }
- calc_avg.py
import sys import json import numpy input = sys.stdin.read() input_json = json.loads(input) values = input_json.get('values', "").split(",") avg = numpy.average([int(i) for i in values]) output = { 'avg': str(avg), } print(json.dumps(output, indent=2))
- 結果
Outputs: avg_value = 44.4