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

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

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

変更点

共通

  • "${...}" のように括る必要がなくなった
    • IDE (IntelliJ IDEA) の HashiCorp Terraform / HCL language support に従ってひたすら修正
      例)
        resource "google_compute_project_metadata_item" "ssh_public_keys" {  
           key = "sshKeys"  
        -  value = "${var.metadata-ssh_keys}"  
        +  value = var.metadata-ssh_keys  
        }  

.terraform-version

  • いまはもっと上がってるようです
      -0.11.14  
      +0.12.19  

backend.tf

  • プロジェクトの指定が不要になったようで(削除で良いと思うのですが一旦コメントアウト)
      terraform {  
        backend "gcs" {  
      -    project = "XXXXX-corp"  
      +    #project = "XXXXX-corp"  
           bucket  = "XXXXX-gcs"  
           prefix  = "terraform/state"  
        }  

dns.tf

  • dnssec_config はSlackコミュニティとterraformerに教えてもらいました

      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

  • = を付け加えるところがありました。それと " をはずしてます

      ・・・  
    
      -  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 "google" {  
        credentials = "/path/to/json"  
      -  project     = "${var.project}"  
      -  region      = "${var.region}"  
      +  project     = var.project  
      +  region      = var.region  
      +  version     = "~> 3.4.0"  
      }  

variables.tf

  • " の排除だけ必要そうです

      -  type = "string"  
      +  type = string  
    

補足

Appendix