created: 2022-06-05T01:43:07.355Z

GCPのterraformを使い始める

terraform は tfstate というものがあるので、バージョンの互換性を担保するのがけっこう大変なので、プロジェクトごとに terraform のバージョンを固定するのがよい。

tfファイル

最初に main.tf でこういったものを用意する。

terraform {
  required_version = "1.0.5"

  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "3.81.0"
    }
  }

  backend "gcs" {
    bucket = "myservice-tfstate"
  }
}

provider "google" {
  project     = "myservice-123456"
  region      = "us-central1"
}

認証

認証情報は provider google.credentials に定義することもできるが、GOOGLE_APPLICATION_CREDENTIALS 環境変数を使いたいので direnv などでセットされるようにしておく。

export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/myservices-be2312345678.json

バケット

tfstateを入れておくバケットは事前に作成する必要があるので作っておく。

$ gsutil mb gs://myservice-tfstate

ここで少しこのエラーでハマった。tfstate は terraform が管理するリソースではないので terraform が自動的に作ってくれたりはしない。

Failed to get existing workspaces: querying Cloud Storage failed: storage: bucket doesn't exist

init

バケットができたら init。

$ terraform init

.gitignore

.terraform 配下に、数十MBあるproviderのバイナリが置かれるのでignoreする。

.terraform/
入門 モダンLinux ―オンプレミスからクラウドまで、幅広い知識を会得する
[ad] 入門 モダンLinux ―オンプレミスからクラウドまで、幅広い知識を会得する
Michael Hausenblas, 武内 覚 (単行本(ソフトカバー))