読者です 読者をやめる 読者になる 読者になる

Got Some \W+ech?

Could be Japanese. Could be English. Android, セキュリティ, 機械学習などをメインに、たまにポエムったり雑感記載したりします。

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

追記

  • 2017/05/12: 下記の備忘録は正確ではない可能性がある。下記の設定を実際に反映させてないのに、プロジェクトが作成できたから。

本編

GCPの備忘録を作っていこうと思う。 今までプロジェクトを2個つくり、最初は GUIでポチポチと、2個目は極力gcloud と kubectlだけで作成をした。今回は可能な限りTerraformをつかい、記録を残したいと思う。 というわけで、プロジェクトの作成から。

いきなりTerraformから逸脱してしまうが、ProjectをTerraformから作るにあたり"roles/resourcemanager.projectCreator"が付与されたIAM Policyが必要だ。これを個人メアドに割り当てることもできるが、冗長性や拡張性を意識しグループメアドに割り当てるのが得策だとかんがえる(システム用アカウントは極力作りたくない)。

ので、まずGsuiteでグループメアド(infra-admin@hogehoge.com)を作り、そこにインフラに携わる人間のアカウントを追加する。そして、iam_policyを作る

gcloud alpha organizations add-iam-policy-binding ${ORG_ID} \
            --member='group:infra-admin@hogehoge.com' --role='oles/resourcemanager.projectCreator'

これをTerraformで記述する

data "google_iam_policy" "admin" {
    binding {
        role = "roles/resourcemanager.projectCreator"
        members = [
            "group:infra-admin@hogehoge.com"
        ]
    }
}

後は、providerとproject.tfを書けば、おk

// Configure the Google Cloud provider
provider "google" {
  project     = "${var.project_id}"
  region      = "${var.region}"
}
resource "google_project" "proj-hoge" {
    project_id      = "${var.project_id}"
    org_id          = "${var.org_id}"
    name            = "${var.project_id}"
}

Plan & Apply

% terraform plan
% terraform apply                                                                 (git)-[master]
data.google_iam_policy.admin: Refreshing state...
google_project.proj-hoge: Creating...
  name:        "" => "gcp-hoge"
  number:      "" => "<computed>"
  org_id:      "" => "${ORG_ID}"
  policy_data: "" => "<computed>"
  policy_etag: "" => "<computed>"
  project_id:  "" => "gcp-hoge"
  skip_delete: "" => "<computed>"
google_project.proj-hoge: Still creating... (10s elapsed)
google_project.proj-hoge: Creation complete (ID: gcp-hoge)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

以上。