需要说明如何使用 Terraform 管理 Google Cloud 项目
Posted
技术标签:
【中文标题】需要说明如何使用 Terraform 管理 Google Cloud 项目【英文标题】:Need clarification on using Terraform to manage Google Cloud projects 【发布时间】:2019-12-21 04:21:26 【问题描述】:我阅读了这篇关于将 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 项目上启用它们。
项目之间是否存在某种父/子关系,其中一个项目中的服务被从父项目中的服务帐户创建的项目继承?这似乎是这种情况,但我在任何地方都找不到任何关于此的文档。
感谢收听!
【问题讨论】:
【参考方案1】:在我的公司中,我们在此文件夹中创建了一个文件夹和一个服务帐户。然后,我们为 terraform 创建了一个项目,每个 terraform 作业使用文件夹级服务帐户在此文件夹中创建项目和资源。
由于角色和权限是从文件夹继承到较低级别(文件夹或项目)的,因此创建资源没有问题。
如果它对您的特定问题有帮助,我不会,但对我们来说,它解决了很多问题并简化了服务帐户管理。
【讨论】:
有趣的是,我不知道服务帐户可以绑定到文件夹。感谢您的提示! 组织级别也是如此。您可以在每个级别定义用户、组和用户帐户的角色。对于需要一段时间查看所有项目的主管团队来说非常有趣。只添加一个群组,如果一个人离开团队/群组,授权将被自动移除。资源管理功能强大以上是关于需要说明如何使用 Terraform 管理 Google Cloud 项目的主要内容,如果未能解决你的问题,请参考以下文章
Terraform 学习总结—— 如何解决存量云资源的管理难题
Terraform 学习总结—— 如何解决存量云资源的管理难题
如何使用一个 terraform 脚本和不同的变量值管理多个不同环境的部署