とある小さなGCPプロジェクトのTerraform v0.12 対応

4 min読了の目安(約3600字TECH技術記事

published_at: 2020-02-01 18:04

これは自身の記事を、サービス終了に伴い Qrunch から移行したものです


これからやるならもう最初からv0.12で始めればいいのでは、とも思ったのですが、
terraformer から採取した tf ファイルはまだ v0.11 の感じだったので、変更点を共有してみます。
GCP の事例がそんなには見つからなかったのもあり。

こんな環境です:静的サイト1つとなんとなく小さなサーバー2台(稼働してないので止めている)

myGCP.jpg (60.6 kB)

変更点

共通

  • "${...}" のように括る必要がなくなった
    • 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
      }
      

.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
    
    

補足

Appendix