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 中的原始回复。
因为我花了一天的大部分时间来完成这项工作,所以这里是对我有用的快速指南:
- 此致,因为我花了一天中的大部分时间来完成这项工作,这里是对我有用的快速指南:
在 Project-A
创建一个服务帐户
https://console.cloud.google.com/iam-admin/serviceaccounts?orgonly=true&project=Project-A
如果你已经有一个服务账号,你可以在它的json密钥文件
中找到它对应的项目ID
{
"type": "service_account",
"project_id": "Project-A",
...
为您要通过
在(Project-B)创建传输作业的项目激活大查询传输API
通过https://console.cloud.google.com/iam-admin/iam?project=Project-B
将第 1 步中的服务帐户添加到 Project-B,角色为“Big Query Admin”
尝试通过 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'
复制传输服务帐户的名称,例如
通过
将转移服务帐户添加到Project-A,角色为“服务帐户令牌创建者”
https://console.cloud.google.com/iam-admin/iam?project=Project-A
Re-run 按照步骤 4 创建传输服务作业。现在应该会成功。
下面是我的 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 中的原始回复。
因为我花了一天的大部分时间来完成这项工作,所以这里是对我有用的快速指南:
- 此致,因为我花了一天中的大部分时间来完成这项工作,这里是对我有用的快速指南:
在 Project-A
创建一个服务帐户https://console.cloud.google.com/iam-admin/serviceaccounts?orgonly=true&project=Project-A
如果你已经有一个服务账号,你可以在它的json密钥文件
中找到它对应的项目ID{
"type": "service_account",
"project_id": "Project-A",
...
为您要通过
在(Project-B)创建传输作业的项目激活大查询传输API通过https://console.cloud.google.com/iam-admin/iam?project=Project-B
将第 1 步中的服务帐户添加到 Project-B,角色为“Big Query Admin”尝试通过 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'
复制传输服务帐户的名称,例如
通过
将转移服务帐户添加到Project-A,角色为“服务帐户令牌创建者”https://console.cloud.google.com/iam-admin/iam?project=Project-A
Re-run 按照步骤 4 创建传输服务作业。现在应该会成功。