version
Terraform 0.6.16
本文
ドキュメント にも書いてあったのですが、Terraformで複数リソースを一気に定義するときに count
という項目を使うのですが、ここでは直接数字を入力するか、 variables
で定義した値に対するinterpolationしか使えないようです。
例えばこんな感じで、AWSのsubnetごとに1つEC2インスタンスを作るようなtfファイルを書いた場合
resource "aws_subnet" "foo" { count = 2 cidr_block = "${format("10.1.%d.0/24", count.index)}" vpc_id = "aaa" } resource "aws_instance" "var" { count = "${length(aws_subnet.foo.*.id)}" ami = "bbb" instance_type = "ccc" subnet_id = "${element(aws_subnet.foo.*.id, count.index)}" }
terraform plan
を実行するとエラーになります。
Error configuring: 1 error(s) occurred: * strconv.ParseInt: parsing "${length(aws_subnet.foo.*.id)}": invalid syntax
上記の場合は単純に2をaws_instanceの方のcountに入れてあげれ良いのですが、ちと難しいのが別の tfstate
から値を取ってくるような場合。
resource "terraform_remote_state" "foo" { backend = "s3" config { bucket = "kamatama41-tfstate" key = "example.tfstate" } } resource "aws_instance" "var" { count = "${length(split(",", terraform_remote_state.foo.output.subnet_ids))}" ami = "bbb" instance_type = "ccc" subnet_id = "${element(split(",", terraform_remote_state.foo.output.subnet_ids), count.index)}" }
この場合countを計算することが出来ないし、以下のように単なる数字の2をoutputとして定義してもダメなので、現状完全にお手上げ状態です。。
resource "terraform_remote_state" "foo" { backend = "s3" config { bucket = "kamatama41-tfstate" key = "example.tfstate" } } resource "aws_instance" "var" { count = "${terraform_remote_state.foo.output.subnet_cidrs_count}" ami = "bbb" instance_type = "ccc" subnet_id = "${element(split(",", terraform_remote_state.foo.output.subnet_cidrs_count), count.index)}" }
誰か解決策があったら教えて下さい!