最近Terraformを触っていて少し躓いたので備忘録として残しておこうと思います。
現象としては、mapping定義にドットで参照しようとしてエラーが発生しました

variable "vpc_subnet_cidr" {
     default = {
       public-a  = "10.1.10.0/24"
       public-c  = "10.1.20.0/24"
       private-a = "10.1.100.0/24"
       private-c = "10.1.200.0/24"
     }
}

上記のようなmapping定義に対して以下のように変数を参照したとことタイトルのエラーが発生しました。

output "cidr" {
  value = "${var.vpc_subnet_cidr.public-a}"
}

発生したエラーの全文です。

Error loading config: Error loading terraform_test/main.tf: Error reading config for output cidr: Invalid dot index found: 'var.vpc_subnet_cidr.public-a'. Values in maps and lists can be referenced using square bracket indexing, like: 'var.mymap["key"]' or 'var.mylist[1]'. in:

エラーメッセージ内容から下記のように書き直せばいいのは分かるのですが、別案件で稼働実績のあるソースを持ってきたので何故動かないのか気になりました。

output "cidr" {
  value = "${var.vpc_subnet_cidr["public-a"]}"
}

調べてみるとCHANGELOGに記載がありました。
terraform/CHANGELOG.md at master · hashicorp/terraform · GitHub

原因はterraformのバージョン違いによるものでした。別案件で使用していたterraformは0.6系でしたが自分が利用している
terraformは0.7でした。後方互換のない変更がはいったようです。

20161222025343

基本的な参照方法を変更するとはなかなか思い切った変更ですね。
0.6系で作ったterraformソースを0.7以降で利用する場合は気をつける必要がありそうです。

元記事はこちら

Terraformで[Error reading config for xxxx : Invalid dot index found:]エラー【cloudpack 大阪 BLOG】