GCP のプロジェクトを Terraform で作成する

題名の通りで今回は GCP のプロジェクトを Terraform で作成します。

Google Provider には google_project があるので、これを使うだけなのですが、ちょっとハマったのでそのメモの記事です。
www.terraform.io

まずは Terraform で GCP 上のリソースを扱うために Provider の定義をします。
今回はサービスアカウントで行いたいので、サービスアカウントを作成します。

ここが僕がハマったところで、サービスアカウントはプロジェクトベースになるのでそのままではプロジェクトを作成することができません。
そのためOrganizationベースでプロジェクトの作成権限を付与します。

$ gcloud \
     organizations \
     add-iam-policy-binding 484761186008 \
     --member='serviceAccount:[service account]' \
     --role='roles/resourcemanager.projectCreator'

後は Provider を下記のように定義します。

provider "google" {
  credentials = file("[service account credential file path]")
  project     = "[project-id]"
  region      = "asia-northeast1"
}

そして google_project を定義して apply したら完了です。

resource "google_project" "project_a" {
  name       = "[project name]"
  project_id = "[project id]"
  org_id     = [orgnization id]
}