API not enabled or service account deleted
個錯誤
呼叫 Cloud Life Sciences API 時,您可能會遇到下列的一或兩個錯誤:
API not enabled or service account deleted
checking service account permission: Account deleted: PROJECT_ID
如要解決這些問題,請依序完成下列步驟:
- 確認已啟用 Cloud Life Sciences 和 Compute Engine API。
- 確認 Cloud Life Sciences 服務代理人服務帳戶設定正確無誤。
- 確認 Compute Engine 預設服務帳戶設定正確無誤。
啟用 Cloud Life Sciences 和 Compute Engine API
確認您的 Google Cloud 專案已啟用 Cloud Life Sciences 和 Compute Engine API:
啟用 Cloud Life Sciences API:
啟用 Compute Engine API:
如果遇到錯誤,表示您沒有權限可為專案啟用 Google Cloud API,請參閱「啟用及停用 API」。
缺少 Cloud Life Sciences 服務帳戶或 Cloud Life Sciences 服務代理人角色
在 Google Cloud 專案中首次執行管道時,系統會自動建立 Cloud Life Sciences 服務代理人服務帳戶。您可以使用 Google Cloud CLI 或 REST 和 RPC API 執行管道。您無法刪除服務帳戶,但該帳戶可能不會顯示在 Identity and Access Management 頁面中。這可能會導致 Cloud Life Sciences API 發生錯誤。
為了使 Cloud Life Sciences API 正常運作並完成諸如在 Compute Engine VM 上的執行管道等工作,Cloud Life Sciences 服務代理人服務帳戶就必須存在。而且必須具有 Life Sciences 服務代理人 IAM 角色。
如果您遇到下列任一問題,請重新建立 Cloud Life Sciences 服務代理人服務帳戶,或授予 Life Sciences 服務代理人 IAM 角色:
- 您無法在 Identity and Access Management 頁面中找到 Cloud Life Sciences 服務代理人服務帳戶。
- 您可以找到 Cloud Life Sciences 服務代理人服務帳戶,但其中不包含 Life Sciences 服務代理人角色。
使用 Google Cloud CLI,透過服務帳戶的 ID (格式為 service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount.com
),將 lifesciences.serviceAgent
角色新增至 Cloud Life Sciences 服務代理人服務帳戶。
如要重新建立服務帳戶或授予 Life Sciences 服務代理人 IAM 角色,請執行 gcloud projects add-iam-policy-binding
指令。如要找出 PROJECT_ID 和 PROJECT_NUMBER,請參閱「識別專案」一文。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount.com \ --role=roles/lifesciences.serviceAgent
如果要求成功,命令提示字元就會顯示類似以下範例的訊息:
Updated IAM policy for project [PROJECT_ID]. bindings: ... - members: - serviceAccount:service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount.com role: roles/lifesciences.serviceAgent ... etag: VALUE version: VALUE
再次回到「Identity and Access Management 頁面」,並驗證以下內容:
- 「Member」欄包含
service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount
格式的服務帳戶 ID。 - 在與該「Member」(成員) 位於同一列的「Name」(名稱) 欄中,包含「Cloud Life Sciences Service Agent」(Cloud Life Sciences 服務代理人)。
- 在與該「Member」(成員) 位於同一列的「Role」(角色) 欄中,包含「Life Sciences Service Agent」(Life Sciences 服務代理人)。
缺少 Compute Engine 預設服務帳戶
新建的 Google Cloud 專案內建 Compute Engine 預設服務帳戶,使用的電子郵件格式如下:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
服務帳戶必須存在於您的 Google Cloud 專案中,否則 Cloud Life Sciences API 無法在 Compute Engine VM 上執行管道。如果您從專案中刪除服務帳戶,則任何倚賴該服務帳戶憑證的應用程式都可能無法運作。如果您不小心刪除了 Compute Engine 預設服務帳戶,可在 30 天內嘗試復原該帳戶。詳情請參閱「取消刪除服務帳戶」一節。
無法驗證 Cloud Life Sciences API
如果您使用以服務帳戶為憑證 (而不是以 gcloud auth application-default login
為憑證) 的 Cloud Life Sciences API 來執行管道,請確認服務帳戶具有下列角色:
roles/lifesciences.workflowsRunner
roles/iam.serviceAccountUser
如要將這些角色新增至您的服務帳戶,請使用 Google Cloud 控制台或 Google Cloud CLI 完成下列步驟:
控制台
- 確認您已啟用 Cloud Life Sciences API。
- 在 Google Cloud 控制台的「IAM」頁面中找出您的服務帳戶。
- 在與服務帳戶相符「Inheritance」(繼承) 欄中,點選鉛筆圖示。「Edit permissions」窗格隨即開啟。
- 按一下 [Add Another Role] (新增其他角色),然後搜尋「Life Sciences Workflows Runner」(Life Sciences 工作流程執行者) 和「Service Account User」(服務帳戶使用者) 角色。
- 選取角色,然後點選 [Save] (儲存)。系統會將
lifesciences.workflowsRunner
和iam.serviceAccountUser
角色加入至服務帳戶。
gcloud
如要新增服務帳戶權限,請執行 gcloud projects add-iam-policy-binding
指令。如要找出 PROJECT_ID 和 PROJECT_NUMBER,請參閱「識別專案」一文。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@SERVICE_ACCOUNT_ID.iam.gserviceaccount.com \ --role=roles/lifesciences.workflowsRunner
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@SERVICE_ACCOUNT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
無法使用應用程式預設憑證來進行驗證
呼叫 Cloud Life Sciences API 時,您可能會收到一則錯誤訊息表示您的「應用程序預設憑證」無法使用。
請參閱設定伺服器對伺服器應用程式的驗證說明,瞭解如何設定應用程式預設憑證,或是如何手動將驗證憑證傳送至應用程式或指令。
錯誤代碼
Cloud Life Sciences API 可能傳回以下的錯誤代碼:
RESOURCE EXHAUSTED (8)
代碼:8
狀態:RESOURCE_EXHAUSTED
類別:使用者錯誤
說明:資源已用盡。這可能表示您的應用程式已耗盡專案層級的 admin API 配額。
建議做法:重試該操作。
FAILED_PRECONDITION (9)
代碼:9
狀態:FAILED_PRECONDITION
類別:使用者錯誤
完整錯誤:Execution failed: while running "[USER_COMMAND_LINE]": unexpected exit status [NUMBER] was not ignored
說明:由於使用者動作傳回非零的結束狀態,因此作業遭到拒絕。系統會顯示這項動作的標準錯誤輸出片段,以供您診斷問題。如要從 Compute Engine 虛擬機器 (VM) 上傳完整記錄,請在發出管道要求時使用 ALWAYS_RUN
動作,如下所示:
{ "commands": [ "-c", "gcloud storage cp /google/logs/output gs://CLOUD_STORAGE_BUCKET/output" --quiet ], "entrypoint": "bash", "flags": [ "ALWAYS_RUN" ], "imageUri": "gcr.io/cloud-genomics-pipelines/io" }
建議動作:未修正問題前請勿重試。
ABORTED (10)
代碼:10
狀態:ABORTED
分類:系統錯誤
完整錯誤:The assigned worker has failed to complete the operation
說明:由於執行管道的 Compute Engine VM 發生錯誤,因此作業已中止,可能是因為該管道已被先占,因此無法在終止前回報其狀態。
建議做法:重試該操作。如果錯誤再次出現,那麼可能是有問題導致 Compute Engine VM 無法運作,例如使用了太多資源。詳情請參閱檢查 Cloud Logging 中的 Compute Engine 記錄說明。
Code 13
代碼:13
完整錯誤:Execution failed: generic::internal: action INDEX: waiting for container: container is still running, possibly due to low system resources
說明:動作的容器可能已耗盡記憶體。
建議做法:使用較大的機器類型重試管道。
UNAVAILABLE (14)
代碼:14
狀態:UNAVAILABLE
分類:系統錯誤
完整錯誤:Execution failed: worker was terminated
說明:執行管道的 Compute Engine VM 已被先占。
建議做法:重試該操作。
遇到錯誤後重試
管道可能會失敗並傳回錯誤代碼。失敗的原因可能與管道所進行的工作無關。在大多數情況下,您都應重新嘗試管道作業。當您使用較便宜但較容易遭遇干擾的先占 VM 時,管道容易發生故障。Cloud Life Sciences API 無法自動重新嘗試管道作業,因為並非所有管道都是冪等的。
如錯誤代碼一節所示,當遇到以下任一錯誤代碼時,通常會建議您重試:
RESOURCE EXHAUSTED (8)
ABORTED (10)
UNAVAILABLE (14)
啟用 Cloud Monitoring
您可以在管道上啟用 Cloud Monitoring,以監控用來執行管道的工作站 VM 的健康狀況和資源使用情況。不過,啟用 Monitoring 可能會產生額外費用。如要啟用 Monitoring,請在提出管道要求時,在 VirtualMachine
物件上指定 enableStackdriverMonitoring
標記。
管道即將耗盡磁碟空間
如果管道即將耗盡磁碟空間,且無法提取 Docker 映像檔,或是需要更多磁碟空間來記錄或執行工作,那麼您可以選擇下列任一做法:
- 在提出管道要求時,使用
VirtualMachine
物件中的bootDiskSizeGb
標記,增加開機磁碟大小。 - 請在提出管道要求時,附加另一個磁碟,並將該磁碟新增至
Action
物件中的Mount
物件。
遭遇配額延遲問題
如果您的 Google Cloud 專案超出 Compute Engine 配額,Cloud Life Sciences API 就不會分配 VM。系統會延遲任何進一步的分配動作,好讓現有的管道有時間完成。如果此延遲持續發生,您可以要求增加配額。
管道停止運作
如果管道因 VM 無法與 Cloud Life Sciences API 服務通訊而停止,並且不斷指派及釋出 VM,原因可能是下列問題同時發生:
如要解決這個問題,請按照下列任一做法進行:
- 在
Network
物件中指定網路。 - 使用「建立自動模式網路」一節中的步驟重新建立
default
網路,並將新網路命名為default
。
取消或刪除 VM
建議您取消相關作業,而不是刪除不需要的工作站 VM。如果您刪除 VM,管道將會慢慢失效;如果該管道正在啟動,則可能會指派新的 VM。