我阅读了这篇关于将 Terraform 与 GCP 结合使用的文章:
https://cloud.google.com/community/tutorials/managing-gcp-projects-with-terraform
我几乎让它工作了,但我遇到了一些问题并希望得到一些澄清。
我创建了一个 terraform 管理项目,并在该项目中使用角色/查看器和角色/storage.admin 角色创建了一个服务帐户。然后我在管理项目中创建了一个存储桶并将其用作 terraform 后端存储。
terraform {
backend "gcs" {
bucket = "test-terraform-admin-1"
prefix = "terraform/state"
credentials = "service-account.json"
}
}
然后,我使用该服务帐户创建另一个项目并在该项目中配置资源:
provider "google" {
alias = "company_a"
credentials = "./service-account.json"
region = "us-east4"
zone = "us-east4-c"
version = "~> 2.12"
}
resource "google_project" "project" {
name = var.project_name
project_id = "${random_id.id.hex}"
billing_account = "${var.billing_account}"
org_id = "${var.org_id}"
}
我认为为使用 terraform 创建的项目启用服务就足够了,如下所示:
resource "google_project_service" "container_service" {
project = "${google_project.project.project_id}"
service = "container.googleapis.com"
}
但是,当 terraform 尝试创建我的 gke 集群时出现错误:
resource "google_container_cluster" "primary" {
project = "${google_project.project.project_id}"
name = "main-gke-cluster"
node_pool {
....
}
network = "${google_compute_network.vpc_network.self_link}"
}
它说我的项目尚未启用容器服务,它引用了 terraform 管理项目 ID(不是使用 google_project 资源创建的项目!)。似乎我必须启用 terraform admin 项目上的服务,以便服务帐户访问由服务帐户创建的任何项目上的这些服务。
事实上,只要在 terraform admin 项目上启用了容器、servicenetworking 等服务,我就可以让它工作,而无需在 create 项目上启用它们。
项目之间是否存在某种父/子关系,其中一个项目中的服务由从父项目中的服务帐户创建的项目继承?这似乎是这种情况,但我在任何地方都找不到任何关于此的文档。
谢谢收听!