Bigquery Terraform Schedule 查询部署错误

Bigquery Terraform Schedule queries deployment error

下面是我的 Bigquery terraform main.tf 文件中的代码

    resource "google_bigquery_data_transfer_config" "config_queries" {
  for_each = fileset("${path.module}/scheduled_queries", "*.sql")
  depends_on = [google_bigquery_table.tables]
  data_source_id = "scheduled_queries"
  location=var.location
  destination_dataset_id=google_bigquery_dataset.dataset.dataset_id
  display_name = "config_queries_${substr(each.value, 0, length(each.value) -4)}"
  schedule = "every 4 hours "
 params = {
    destination_table_name_template = substr(each.value,0,length(each.value) -4)
    write_disposition = "WRITE_APPEND"
    query = file("${path.module}/scheduled_queries/${each.value}")
  }
}

我遇到以下错误:

│ 错误:创建配置时出错:googleapi:错误 404:找不到请求的实体。

如果 运行 sql 个单独的文件,相同的代码工作正常。 有什么建议

我会留下这个社区答案以提高知名度。如果它没有反映实际答案,请随时更新。这是 link provided with the solution by paslandau 中的原始回复。

因为我花了一天的大部分时间来完成这项工作,所以这里是对我有用的快速指南:

  1. 此致,因为我花了一天中的大部分时间来完成这项工作,这里是对我有用的快速指南:

在 Project-A

创建一个服务帐户

https://console.cloud.google.com/iam-admin/serviceaccounts?orgonly=true&project=Project-A

如果你已经有一个服务账号,你可以在它的json密钥文件

中找到它对应的项目ID
{
  "type": "service_account",
  "project_id": "Project-A",
...
  1. 为您要通过

    在(Project-B)创建传输作业的项目激活大查询传输API

    https://console.cloud.google.com/marketplace/product/google/bigquerydatatransfer.googleapis.com?project=

  2. 通过https://console.cloud.google.com/iam-admin/iam?project=Project-B

    将第 1 步中的服务帐户添加到 Project-B,角色为“Big Query Admin”
  3. 尝试通过 API(即“从您的代码”)创建传输作业。这将触发标题中提到的错误 - 其中还将包括 Project-B 的 auto-generated 传输服务服务帐户,例如

400 P4 service account needs iam.serviceAccounts.getAccessToken permission. Running the following command may resolve this error: gcloud projects  add-iam-policy-binding <PROJECT_ID> --member='serviceAccount:service-<PROJECT_NUMBER>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com'

复制传输服务帐户的名称,例如

  1. 通过

    将转移服务帐户添加到Project-A,角色为“服务帐户令牌创建者”

    https://console.cloud.google.com/iam-admin/iam?project=Project-A

  2. Re-run 按照步骤 4 创建传输服务作业。现在应该会成功。