🛕
とある小さなGCPプロジェクトのTerraform v0.12 対応
published_at: 2020-02-01 18:04
これからやるならもう最初からv0.12で始めればいいのでは、とも思ったのですが、
terraformer から採取した tf ファイルはまだ v0.11 の感じだったので、変更点を共有してみます。
GCP の事例がそんなには見つからなかったのもあり。
こんな環境です:静的サイト1つとなんとなく小さなサーバー2台(稼働してないので止めている)
変更点
共通
-
"${...}"
のように括る必要がなくなった- IDE (IntelliJ IDEA) の HashiCorp Terraform / HCL language support に従ってひたすら修正
例)metadata.tf.diff
resource "google_compute_project_metadata_item" "ssh_public_keys" { key = "sshKeys" - value = "${var.metadata-ssh_keys}" + value = var.metadata-ssh_keys }
- IDE (IntelliJ IDEA) の HashiCorp Terraform / HCL language support に従ってひたすら修正
.terraform-version
- いまはもっと上がってるようです
.terraform-version.diff
-0.11.14 +0.12.19
backend.tf
- プロジェクトの指定が不要になったようで(削除で良いと思うのですが一旦コメントアウト)
backend.tf.diff
terraform { backend "gcs" { - project = "XXXXX-corp" + #project = "XXXXX-corp" bucket = "XXXXX-gcs" prefix = "terraform/state" }
dns.tf
- dnssec_config はSlackコミュニティとterraformerに教えてもらいました
dns.tf.diff
resource "google_dns_managed_zone" "XXXX" { name = "XXXXX-zone" dns_name = "XXXXXXXXX." + + dnssec_config { + kind = "dns#managedZoneDnsSecConfig" + non_existence = "nsec3" + state = "off" + } } resource "google_dns_record_set" "www" { - managed_zone = "${google_dns_managed_zone.XXXX.name}" + managed_zone = google_dns_managed_zone.XXXX.name name = "www.${google_dns_managed_zone.XXXX.dns_name}" # こういう、 "${...}" で括ったままのケースもまれにあり type = "A" ttl = 3600 }
instance.tf
-
=
を付け加えるところがありました。それと"
をはずしてますinstance.tf.diff
・・・ - metadata { - "block-project-ssh-keys" = "false" + metadata = { + "block-project-ssh-keys" = false } }
provider.tf
-
"Error: failed to load provider "google": Incompatible API version with plugin. Plugin version: 4, Client versions: [5]"
のエラー対策、だと思います
provider.tf.diff
provider "google" { credentials = "/path/to/json" - project = "${var.project}" - region = "${var.region}" + project = var.project + region = var.region + version = "~> 3.4.0" }
variables.tf
-
"
の排除だけ必要そうですvariables.tf.diff
- type = "string" + type = string
補足
-
なんだかんだで
terraform 0.12upgrade
コマンドは使っていないと思います。正攻法ではなかったのかも。とはいえ自分は成功したのです。 -
ときたま
terraform validate
は使いました。 -
追記
- ちょっと自分のメモを再確認したら、 tfupdate で更新されてたのかも知れない・・・すみません
Appendix
- https://www.terraform.io/upgrade-guides/0-12.html
- https://www.terraform.io/upgrade-guides/0-12.html#terraform-0-12checklist
- https://www.terraform.io/docs/providers/google/r/compute_project_metadata.html
- https://www.terraform.io/docs/providers/google/r/compute_instance.html
- https://www.terraform.io/docs/providers/google/r/dns_managed_zone.html
- https://github.com/GoogleCloudPlatform/terraformer#use-with-gcp
Discussion