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/