当我尝试跑步时
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"
]
}
该错误仍然存在。 知道这里的问题/解决方案是什么吗?
答案 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中的建议。