解決部署作業錯誤

本頁面說明:

檢查部署詳細資料和記錄

您可以檢查部署作業和個別修訂版本的詳細資料和記錄。

檢查部署狀態

每個部署作業都會顯示目前狀態、錯誤代碼和失敗原因的詳細資訊。

如有任何錯誤,請先查看部署狀態

檢查修訂版本的狀態

如果部署失敗並顯示錯誤代碼 REVISION_FAILED,您可以查看修訂版本的狀態

在修訂版本狀態的輸出內容中,查看 stateDetailerrorCode 欄位。

修訂版本的狀態包含與部署相同的資訊。此外,還包含版本 ID。

檢查 Cloud Build 記錄

查看修訂版本的狀態,並取得修訂版本使用的 Cloud Build 建構 ID。

使用建構 ID 檢查 Cloud Build 記錄。如要進一步瞭解如何檢查建構結果,請參閱「查看建構結果」。

常見錯誤

本節說明您在使用 Infra Manager 部署 Terraform 設定時,可能會看到的常見錯誤。

部署失敗

如果部署狀態為 FAILED,表示部署作業發生非預期的錯誤。

查看部署狀態,並檢查 stateDetailerrorCode 欄位以取得更多資訊。

如果部署失敗並顯示錯誤代碼 REVISION_FAILED,您可以檢查修訂版本的狀態

設定錯誤

如果部署狀態為 FAILED,可能是因為 Terraform 設定發生設定錯誤而失敗。

如果部署錯誤與設定有關,部署狀態的輸出內容就會包含 tfErrorserrorLogs 欄位。設定錯誤的例子包括無效的設定或缺少權限。

查看 Terraform 的錯誤。在部署狀態的輸出內容中:

  • tfErrors 是 Terraform 發生錯誤的摘要 (Infra Manager 會將此清單中的錯誤數限制為 10 個)。
  • errorLogs 會指向建構項目值區中的 Cloud Storage 物件。這個值區包含以換行符號分隔的 JSON 格式中的所有 tfErrors

每個 tfErrorerrorDescription 欄位中都有資源位址和人類可讀的錯誤說明。如果資源因 Google Cloud API 傳回的 HTTP 錯誤代碼而失敗,httpResponseCode 欄位也會填入資料。任何其他 API 失敗資訊都會記錄在錯誤欄位中。

服務帳戶缺少擷取設定的權限

您會看到以下錯誤訊息:

  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 設定包含後端區塊,就會顯示這則錯誤訊息。基礎架構管理工具會管理後端,因此無法在 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"

後續步驟