Terraformのmapでkeyが数字から始まったり、スペースを含んだりするとエラーになる問題の備忘録です。
はじめに
こんにちは、@bioerrorlogです。
Terraformのmapを書いているときに、下記のようなエラーに遭遇しました。
╷ │ Error: Missing key/value separator │ │ on main.tf line 3, in locals: │ 2: map_example = { │ 3: 123key = "abcd" │ │ Expected an equals sign ("=") to mark the beginning of the attribute value. If you intended to given an attribute name containing periods or spaces, write the name in quotes to create a string │ literal. ╵
ここで起きたこととその対処法を備忘録としてまとめます。
※ 検証時のTerraformバージョン
$ terraform --version Terraform v1.3.4 on linux_amd64
Terraformエラー対処: "Error: Missing key/value separator"
検証コードは下記に置いています: github.com
起きたこと
下記のようなmapのコードがエラーを引き起こしました。
locals { map_example = { 123key = "abcd" } } ## エラー発生 # ╷ # │ Error: Missing key/value separator # │ # │ on main.tf line 3, in locals: # │ 2: map_example = { # │ 3: 123key = "abcd" # │ # │ Expected an equals sign ("=") to mark the beginning of the attribute value. If you intended to given an attribute name containing periods or spaces, write the name in quotes to create a string # │ literal. # ╵
原因
数字から始まる文字列をそのままkeyとしたことが原因です。
それによりエラーメッセージ: Error: Missing key/value separatorの通り、keyとvalueを分けるseparatorが適切に付与されていない(とTerraformのパーサーに解釈される)エラーが発生しています。
もともと上記のコードの意図ととしては、
- key:
123key
- value:
"abcd"
と解釈されたいところですが、パーサーは123key
という文字列の中にkeyとvalueの両方を見出し、それらがseparatorで区切られてないよ!というエラーを出しています。
- key:
123
- value:
key
- -> エラー: separatorが存在ない
数字から始まる文字列はnumber
型として解釈されるので、途中からstring
が入ってくると別ブロックとして解釈される -> separatorが無いのでエラー、ということでしょう(ソースコード読んだ訳ではないので推測です)。
対処法
keyをクォート""
で囲うことで解決できます。
locals { map_example = { "123key" = "abcd" } }
クォートで囲うことで全体をstringブロックとして解釈させることができるので、ブロックが分離して解釈される問題を回避できます。
問題あるmap/問題ないmapまとめ
分かりにくいので、問題あるmap/問題ないmapをいくつかのパターンでまとめておきます。
# map key starting with numbers causes error locals { map_example = { key_valid = "abcd" # OK 123 = "abcd" # OK # 123key = "abcd" # Error: Missing key/value separator "123key" = "abcd" # OK key123 = "abcd" # OK # spaces cause same error # 123 key = "abcd" # Error: Missing key/value separator "123 key" = "abcd" # OK } }
terraform-examples/map_key_separator_error.tf at main · bioerrorlog/terraform-examples · GitHub
"数字から始まる"以外にも、スペースを含む場合にも同じエラーが発生します。
おわりに
以上、TerraformのエラーError: Missing key/value separator
に関する問題をまとめました。
Terraformパーサーの気持ちになってコードを書いていきたいものです。
どなたかの参考になれば。
[関連記事]
参考
Variable key names that start with numbers cause error · Issue #6857 · hashicorp/terraform · GitHub
resource names starting with numbers cause error · Issue #19919 · hashicorp/terraform · GitHub