Google

Versions

https://www.terraform.io/docs/providers/google/guides/provider_versions.html

β機能をサポートした google-beta というProviderもある。

「要するに、ふつうの gcloud コマンドの代わりに gcloud beta コマンドを使うようなもの」

NOTE:

  • 両Providerの併用も可能だが、beta -> 無印への移行時には作業が必要

Configuration

Google Provider Configuration Reference - Terraform by HashiCorp

SYNOPSIS:

provider "google" {
  //credentials = "${file("account.json")}"
  project     = "my-project-id"
  region      = "us-central1"
  zone        = "us-central1-c"
  version     = "3.19.0"
}
  • credentials
    • GCPのサービスアカウントキー(JSON)のパスまたは内容
    • 環境変数 GOOGLE_CREDENTIALS or GOOGLE_CLOUD_KEYFILE_JSON or GCLOUD_KEYFILE_JSON による指定も可能。
    • 指定がない場合、Application Default Credentialsにフォールバックする

See also:

Data Sources

compute系

Resources

未分類のもの:

GCP (IAM, API, Billing, Organization)

Providerリファレンスで、「Google Cloud Platform Resources」というカテゴリに属するもの。

Examples:

resource "google_service_account" "terraform" {
  account_id   = "terraform"
}

resource "google_service_account_key" "terraform_key" {
  service_account_id = google_service_account.terraform.name
  private_key_type   = "TYPE_GOOGLE_CREDENTIALS_FILE"
}

# ローカルにService Account KeyのJSONを保存する
resource local_file "terraform_key_json" {
  filename             = "./tmp/terraform_service_account_key.json"
  content              = base64decode(google_service_account_key.terraform_key.private_key)
  file_permission      = "0600"
  directory_permission = "0755"
}

IAM policy for projects

https://www.terraform.io/docs/providers/google/r/google_project_iam.html

  • google_project_iam_policy
  • google_project_iam_binding … role : member = 1 : Nの権限を設定する。Service Accountの権限にも対応
  • google_project_iam_member … role : member = 1 : 1の権限を設定する。Service Accountの権限にも対応
  • google_project_iam_audit_config

compute系

ネットワーク関係:

GKE関連

参考:

Examples

限定公開クラスタ(パブリックエンドポイント有り)

resource "google_container_cluster" "experiment" {
  name     = "experiment"
  location = "asia-northeast1"

  private_cluster_config {
    enable_private_nodes    = true
    enable_private_endpoint = false
    master_ipv4_cidr_block  = "172.16.0.0/28"
  }

  ip_allocation_policy {
    # GKE管理のサブネットを作成してもらう
    cluster_ipv4_cidr_block  = ""
    services_ipv4_cidr_block = ""
  }
}

Pub/Sub

Topic/Subscription IAM

  • pubsub_topic_iam
    • 以下の3種類のリソースがあり、管理したい粒度に応じていずれかを使う
    • いずれも特定のトピックに対する権限をセットする
    • google_pubsub_topic_iam_policy … 該当トピックに対する全ロール x 全メンバーの権限を含むポリシーを管理する
    • google_pubsub_topic_iam_binding … 特定のロールを持つメンバーセットを管理する
    • google_pubsub_topic_iam_member … 特定のロール x メンバーの組み合わせを1つ1つ管理する
    • たぶん、最も細かい粒度の google_pubsub_topic_iam_member を使うのが無難
  • pubsub_subscription_iam
    • topicの方と同様に3種類のリソースを選択的に使う
    • いずれも特定のサブスクリプションに対する権限をセットする
    • google_pubsub_subscription_iam_policy … 該当サブスクリプションに対する全ロール x 全メンバーの権限を含むポリシーを管理する
    • google_pubsub_subscription_iam_binding … 特定のロールを持つメンバーセットを管理する
    • google_pubsub_subscription_iam_member … 特定のロール x メンバーの組み合わせを1つ1つ管理する

参考:

storage (GCS) 系

IAM for GCS Bucket

https://www.terraform.io/docs/providers/google/r/storage_bucket_iam.html

Pub/SubのTopic/Subscription IAMと同じように3種類のリソースが用意されている。

  • google_storage_bucket_iam_policy … そのバケットに対するIAM x 権限(Role)をフルコントロールしたい場合に使う
  • google_storage_bucket_iam_binding … そのバケットに対して特定のRoleの権限を持つIAMメンバーリストを管理する
  • google_storage_bucket_iam_member … 特定の (IAM x Role) の組合せを管理する。既存の他の権限セットとは独立して管理することが可能

特定のIAMアカウントに対して権限を追加したい場合、基本的には google_storage_bucket_iam_member を使えばよさそう。

Cloud Logging

Resources: