【问题标题】:Need clarification on using Terraform to manage Google Cloud projects需要说明如何使用 Terraform 管理 Google Cloud 项目
【发布时间】: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 项目上启用它们。

项目之间是否存在某种父/子关系,其中一个项目中的服务被从父项目中的服务帐户创建的项目继承?这似乎是这种情况,但我在任何地方都找不到任何关于此的文档。

感谢收听!

【问题讨论】:

    标签: google-cloud-platform terraform-provider-gcp


    【解决方案1】:

    在我的公司中,我们在此文件夹中创建了一个文件夹和一个服务帐户。然后,我们为 terraform 创建了一个项目,每个 terraform 作业使用文件夹级服务帐户在此文件夹中创建项目和资源。

    由于角色和权限是从文件夹继承到较低级别(文件夹或项目)的,因此创建资源没有问题。

    如果它对您的特定问题有帮助,我不会,但对我们来说,它解决了很多问题并简化了服务帐户管理。

    【讨论】:

    • 有趣的是,我不知道服务帐户可以绑定到文件夹。感谢您的提示!
    • 组织级别也是如此。您可以在每个级别定义用户、组和用户帐户的角色。对于需要一段时间查看所有项目的主管团队来说非常有趣。只添加一个群组,如果一个人离开团队/群组,授权将被自动移除。资源管理功能强大
    猜你喜欢
    • 2023-03-20
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多