排查部署错误

本页介绍以下内容:

检查部署详情和日志

您可以检查部署和各个修订版的详细信息和日志。

检查部署状态

每个部署都包含有关其当前状态、错误代码以及失败原因的详细信息。

如果出现任何错误,请先查看部署的状态

检查修订版本的状态

如果部署失败并返回错误代码 REVISION_FAILED,您可以查看修订版本的状态

在修订版本状态的输出中,查看 stateDetailerrorCode 字段。

修订版本的状态包含与部署相同的信息。此外,它还包含 build ID。

检查 Cloud Build 日志

查看修订版本的状态,并获取修订版本使用的 Cloud Build 的 build ID。

使用 build ID 检查 Cloud Build 日志。如需详细了解如何检查 build 结果,请参阅查看 build 结果

常见错误

本部分介绍了使用 Infra Manager 部署 Terraform 配置时可能会遇到的常见错误。

部署失败

如果部署状态为 FAILED,则表示部署遇到了意外错误。

查看部署状态并检查 stateDetailerrorCode 字段,了解详情。

如果部署失败并返回错误代码 REVISION_FAILED,您可以检查修订版本的状态

配置错误

如果部署的状态为 FAILED,则可能是因为 Terraform 配置存在配置错误而导致部署失败。

如果部署错误与您的配置相关,部署状态的输出中会包含 tfErrorserrorLogs 字段。配置错误的示例包括配置无效或缺少权限。

查看 Terraform 中的错误。在部署状态的输出中:

  • tfErrors 是 Terraform 遇到的错误的摘要(此列表中的错误数量受 Infra Manager 限制,不得超过 10 个)。
  • errorLogs 指向工件存储桶中的 Cloud Storage 对象。此存储桶包含采用换行分隔的 JSON 格式的所有 tfErrors

每个 tfError 都有一个资源地址,并且 errorDescription 字段中包含直观易懂的错误说明。如果资源因 Google Cloud API 返回的 HTTP 错误代码而失败,系统也会填充 httpResponseCode 字段。任何其他 API 失败信息都会记录在“error”字段中。

服务账号缺少提取配置的权限

您会看到以下错误:

  error downloading 'GCS_LOCATION': googleapi: Error 403: SA_EMAIL does
  not have storage.objects.list access to the Google Cloud Storage bucket.

您之所以看到此错误,是因为 Infra Manager 没有权限从 Cloud Storage 存储桶中获取 Terraform 配置。

如需解决此问题,请向服务账号授予 storage.objectViewer 角色。如需详细了解如何向服务账号授予权限,请参阅配置服务账号

提取配置的位置不正确

您会看到以下错误:

  `blueprint fetch failed: invalid path`

如果指定了用于提取 Terraform 配置的无效位置,您会看到此错误。Infra Manager 使用术语蓝图来指代 Terraform 配置。

如需解决此错误,请验证 Terraform 配置的位置,并确保命令中的该位置格式正确无误。

用于执行资源的权限不正确

错误通常位于 tfErrors 下,对于无法部署的资源,错误的响应代码为 403

如果服务账号没有足够的权限来创建、读取、更新或删除 Terraform 配置中定义的资源,您会看到此错误。

如需解决此错误,请参阅向服务账号授予 IAM 权限

使用后端的配置

您会看到以下错误:

  `blueprint invalid: found backend config in file.tf`

如果 Terraform 配置包含后端块,您会看到此错误。Infrastructure Manager 会管理后端,因此无法在 Terraform 配置中定义后端块。

如需解决此错误,请从配置中移除后端块。

验证 Cloud Build 代码库配置

如果 Infra Manager 无法访问您的 Git 代码库(使用私有 Git 代码库或 Cloud Build 自动化工作流),您可能需要验证 Cloud Build 代码库是否已正确配置。

如需验证 Cloud Build 代码库是否已配置为提供对私有代码库的访问权限,请参阅连接到 GitHub 代码库

Infra Manager 会使用第一个连接,其中 Cloud Build 代码库网址与 Terraform 配置(在 --git-source-repo 中引用)相匹配,并且能够生成只读令牌。系统会通过对所选 Cloud Build 代码库的 accessReadToken API 调用直接验证代码库连接。

使用 Infra Manager 服务账号运行以下命令,以验证权限是否正确:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token \
--impersonate-service-account=SERVICE_ACCOUNT)" \
"https://cloudbuild.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/connections/CB_CONNECTION/repositories/CB_REPO:accessReadToken"

后续步骤