share facebook facebook twitter menu hatena pocket slack

2017.01.17 TUE

Terraformで[Error reading config for xxxx : Invalid dot index found:]エラ…

河村 敏貴

WRITTEN BY 河村 敏貴

最近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】

河村 敏貴

河村 敏貴

クラウド業界に興味を持ち、業務系のアプリエンジニアからインフラエンジニア見習いに転身しました。日々新しい技術に触れることができる環境でもがきつつも楽しい毎日を過ごしています。 河村 敏貴

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。