计划错误:尚未使用Cloud Resource Manager API

时间:2020-07-08 16:47:37

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

当我尝试跑步时

steps:
- id: Plan Terraform
  name: hashicorp/terraform:light
  args:
  - plan

在Cloud Build中,出现错误:

Error: Error reading Project Service foo/cloudbuild.googleapis.com: googleapi: Error 403: Cloud Resource Manager API has not been used in project 123456789 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/cloudresourcemanager.googleapis.com/overview?project=123456789 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry., accessNotConfigured

由于同一台terraform定义在我的本地计算机上运行,因此我认为错误消息会产生误导,这实际上是一个凭证问题。

根据Google Cloud文档,我应用了以下内容:

resource "google_project_iam_binding" "cloudbuild" {
  project = "bar"
  role    = "roles/editor"
  members = [
    "serviceAccount:987654321@cloudbuild.gserviceaccount.com"
  ]
}

该错误仍然存​​在。 知道这里的问题/解决方案是什么吗?

2 个答案:

答案 0 :(得分:0)

必须手动启用 Cloud Resource Manager API 服务使用API​​ 才能使Terraform正常工作。

不知道为什么它可以通过我的本地计算机工作。因此,对于我来说,这仍然不是完全理解/解决的。

我的猜测是,也许它在本地使用gcloud来访问这些东西,并以另一种方式获取数据?

或者用户帐户与服务帐户的约束不同?

答案 1 :(得分:0)

应该可以:

select to_char(ot.fp, 'YYYY-MM') as yyyymm
       count(*) filter (where ot.fp > ot.prev_fp + interval '1 year' or b.prev_fp is null) as cnt_new
from (select ot.*, lag(ot.fp) over (partition by ot.email order by ot.fp) as prev_fp
      from Order_table ot
     ) ot
group by yyyymm;

通过这种方式,您可以在Terraform脚本中启用API。 您也可以将其与resource "google_project_service" "gcp_resource_manager_api" { project = var.project_id service = "cloudresourcemanager.googleapis.com" } 结合使用,以便根据ti等到准备就绪后再使用其他资源。

time_sleep

如果上述方法不起作用 ,那么您需要在管道中包含以下内容(假设您正在从管道中执行TF脚本):

resource "time_sleep" "gcp_wait_crm_api_enabling" {
  depends_on = [
    google_project_service.gcp_resource_manager_api
  ]

  create_duration = "1m"
}

here中的建议。