在 Terraform Cloud 上创建 Google Cloud 项目

使用Terraform Cloud创建Google Cloud项目。

首先

如果在公司内要创建一个新的Google Cloud项目,现在是由具有项目创建权限的用户手动操作。这次我们使用Terraform Cloud来实现自动化的项目创建。

建造的步骤

Terraform Cloud 环境配置

我会进行 Terraform Cloud 的设置。
由于 Terraform Cloud 的组织已经准备好了,我们将从创建 Workspace 开始。
这次我们选择 CLI 驱动的工作流程。

create terraform workspace.PNG

选择与工作区名称相关联的项目,并通过“创建工作区”来创建工作区。

create terraform workspace config.PNG

设置 Terraform CLI

安装 Terraform CLI 到本地计算机上,并连接到 Terraform Cloud。

请从以下URL下载CLI用的Zip文件,并解压到任意位置。

 

install terraform cli.PNG

在打开的路径上,使用命令提示符打开terraform login命令。

terraform login.PNG

输入”yes”将自动打开Terraform Cloud的令牌页面。如果是第一次连接,请创建新的令牌并将令牌字符串输入到命令提示符中。

terraform login token.PNG

或许不需要使用terraform workspace命令指定连接的工作区,因为它可以在下面的模板中进行描述。

 

创建一个保存模板的文件夹,并在该文件夹上打开命令提示符,执行 terraform init。

准备 Google Cloud 服务帐号。

要通过Terraform在Google Cloud中创建资源,需要一个具有创建资源所需权限的服务帐号密钥。

你可以为每个项目创建服务帐号。无法直接为组织创建服务帐号。
根据以下文章的参考,在任何项目中创建服务帐号后,使用”gcloud organizations add-iam-policy-binding”命令授予两个角色:roles/resourcemanager.projectCreator 和 roles/billing.user。

 

我們將為服務帳戶發行一個新的金鑰,並授予該角色。
雖然這次是進行金鑰協作,但根據圖片中所述,Workload Identity 協作更安全。

service account key.PNG

如果在创建项目时未启用Cloud Billing API,则在创建服务帐号的项目中启用它。
如果在创建项目时需要指定账单接收账户ID,则如果Cloud Billing API是禁用状态,则会出现以下错误。

Error: failed pre-requisites: failed to check permissions on billing account "billingAccounts/<Billing ID>": googleapi: Error 403: Cloud Billing API has not been used in project <Project ID> before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/cloudbilling.googleapis.com/overview?project=<Project ID> then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry. Details: [ { "@type": "type.googleapis.com/google.rpc.Help", "links": [ { "description": "Google developers console API activation", "url": "https://console.developers.google.com/apis/api/cloudbilling.googleapis.com/overview?project=<Project ID>" } ] }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "googleapis.com", "metadata": { "consumer": "projects/<Project ID>", "service": "cloudbilling.googleapis.com" }, "reason": "SERVICE_DISABLED" } ] , accessNotConfigured
with google_project.new_project

创建模板

我将创建一个用于创建项目的模板。

首先,指定要连接的 Workspace 和要使用的提供程序。

terraform {
  cloud {
    organization = "<Organaization Name>"

    workspaces {
      name = "google-cloud"
    }
  }

  required_providers {
    google = {
      source = "hashicorp/google"
      version = "4.51.0"
    }
  }
}

接下来,我们将添加有关项目创建供应商的模板。

 

只需要一个选项
将之前下载的服务帐号的密钥字符串和创建项目所需的提供程序参数的新项目ID、项目名称、关联组织ID、关联的收费帐号(可选)添加到认证所需中。
其中,服务帐号的密钥字符串、关联的组织ID和关联的收费帐号是不变的,尤其是密钥字符串不希望以明文方式保存。
因此,我将这三个值注册为Terraform Cloud的环境变量。

从 Workspace 的 Variables 中创建作为 Terraform 变量。为了防止意外地泄露值,将其设置为敏感数据。

terraform variables.PNG

在模板中,使用 “<变量名>” {} 来声明变量,如果要使用该变量,则指定 ${var.<变量名>}。

variable "GOOGLE_CREDENTIALS" {}
variable "ORGNIZATION_ID" {}
variable "BILLING_ACCOUNT" {}

provider "google" {
  credentials = "${var.GOOGLE_CREDENTIALS}"
}

resource "google_project" "new_project" {
  name       = "<Project Name>"
  project_id = "<Project ID>"
  org_id     = "${var.ORGNIZATION_ID}"
  billing_account = "${var.BILLING_ACCOUNT}"
}

模板的创建已经完成。
由于我想要将模板分成服务提供商指定部分和资源创建部分,所以我将它们放在了不同的文件中,但是我认为将它们合并在一个文件中描述也不会有问题。

执行

我将执行模板并确认是否能够创建项目。

返回执行 terraform init 的命令提示符,并使用 terraform validate 进行模板语法检查,使用 terraform apply 执行模板。
还可以使用 terraform plan 来查看所创建资源(即所谓的干运行)的情况。

请参照

 

希望上述内容能对某人有所帮助。

广告
将在 10 秒后关闭
bannerAds