将 GCP 云与 terraform 结合使用时,我可以自动启用 API 吗?

use*_*145 18 google-cloud-platform terraform terraform-provider-gcp

我对使用 terraform 的 GCP 非常陌生,我想使用集中式工具部署我的所有模块。

有没有什么办法可以去掉每次启用google API的步骤,这样部署就不会中断?

kar*_*bal 27

count您也可以循环使用有问题的服务,而不是按照@pradeep的建议使用:

variable "gcp_service_list" {
  description ="The list of apis necessary for the project"
  type = list(string)
  default = [
    "cloudresourcemanager.googleapis.com",
    "serviceusage.googleapis.com"
  ]
}

resource "google_project_service" "gcp_services" {
  for_each = toset(var.gcp_service_list)
  project = "your-project-id"
  service = each.key
}
Run Code Online (Sandbox Code Playgroud)


Kol*_*ban 15

有一个名为“google_project_service”的 Terraform 资源定义,它允许启用服务 (API)。这记录在google_project_service

使用示例似乎是:

resource "google_project_service" "project" {
  project = "your-project-id"
  service = "iam.googleapis.com"
}
Run Code Online (Sandbox Code Playgroud)

  • 未启用 serviceusage.googleapis.com,可能是什么问题? (4认同)

pra*_*eep 10

是的,您可以使用google_project_service资源一次启用一个 API。您可以使用count或 其他循环方法来启用多个 API。您需要项目编辑者/所有者角色来执行此操作。

# Enable services in newly created GCP Project.
resource "google_project_service" "gcp_services" {
  count   = length(var.gcp_service_list)
  project = google_project.demo_project.project_id
  service = var.gcp_service_list[count.index]

  disable_dependent_services = true
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到完整的示例


nba*_*lle 10

对于那些在 2022 年阅读本文的人来说,从 Terraform 中自动启用serviceusagecloudresourcesmanager不起作用,因为通过 API 启用这些 API 依赖于它们已经启用......

解决方案是通过 gcloud 命令行来完成:

# Use `gcloud` to enable:
# - serviceusage.googleapis.com
# - cloudresourcemanager.googleapis.com
resource "null_resource" "enable_service_usage_api" {
  provisioner "local-exec" {
    command = "gcloud services enable serviceusage.googleapis.com cloudresourcemanager.googleapis.com --project ${var.project_id}"
  }

  depends_on = [google_project.project]
}

# Wait for the new configuration to propagate
# (might be redundant)
resource "time_sleep" "wait_project_init" {
  create_duration = "60s"

  depends_on = [null_resource.enable_service_usage_api]
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请访问https://medium.com/rockedscience/how-to-filled-automate-the-deployment-of-google-cloud-platform-projects-with-terraform-16c33f1fb31f

  • 这似乎是 Terraform 团队的一个巨大疏忽。Github上还没人提出这个问题吗? (6认同)