Terraform、Docsに沿って書いたのに動かない?
TerraformでAzureリソースを作る時にハマった事例をご紹介します。
VMSS(仮想マシン スケールセット)の作成時のエラー
VMSSの作成のため、下記のドキュメントを参考にTerraform定義を作成しました。
https://www.terraform.io/docs/providers/azurerm/r/virtual_machine_scale_set.html
記事執筆時点の最新のterraform.exe(0.12系)を使用してterraform plan
を実行すると、エラーが発生します。
Error: Reference to "count" in non-counted context
on test.tf line 146, in resource "azurerm_virtual_machine_scale_set" "test":
146: load_balancer_inbound_nat_rules_ids = ["${element(azurerm_lb_nat_pool.lbnatpool.*.id, count.index)}"]
The "count" object can be used only in "resource" and "data" blocks, and only
when the "count" argument is set.
え…なんで公式ドキュメント通り書いてるのにエラー?element
の中でcount
が参照できないみたいです。
こちら、Terraformのバージョンアップ(0.11 ⇒ 0.12)の際に仕様変更があったようです。
古いバージョンのTerraformを使用するか、別の記述に変更する必要があります。
今回はとりあえず、Terraformのバージョンを0.11系に下げて対処しました。
AGW(Application Gateway)のSSLPolicy設定でエラー
Application GatewayをTerraformで作る時、設定が多いので泣きそうになります。
そんな中でどうしても下記のエラーが出て困りました。
Error: module.application_gateway.azurerm_application_gateway.network: : invalid or unknown key: ssl_policy
要は「ssl_policy
って、何?」と言われてます。
調べてみた結果、ssl_policyの設定はazurermプロバイダーのバージョン1.29.0以降で使えるようでした。
具体的に書くと、providerの設定部分が下記のようになっていたので、
provider "azurerm" {
version = "=1.28.0"
}
下記のように変更すれば解消しました。
provider "azurerm" {
version = "=1.29.0"
}
まとめ
Terraformでエラーが出た時、基本的にはtfファイル等の記述ミスを疑うべきです。
しかしエラーの内容によっては、使用しているterraform.exeやproviderのバージョンを確認してみるのが良さそうです。