排查部署错误

本页介绍以下内容:

检查部署详情和日志

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

检查部署的状态

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

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

检查修订版本的状态

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

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

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

检查 Cloud Build 日志

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

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

常见错误

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

部署失败

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

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

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

配置错误

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

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

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

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

每个 tfError 都有一个资源地址,并且 errorDescription 字段中包含直观易懂的错误说明。如果资源因从 API 返回的 HTTP 错误代码而失败,系统还会填充 httpResponseCode 字段。 Google Cloud 任何其他 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"

后续步骤