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 API 和 Compute Engine API。
- 确保已正确配置 Cloud Life Sciences Service Agent 服务账号。
- 确保已正确配置 Compute Engine 默认服务账号。
启用 Cloud Life Sciences API 和 Compute Engine API
确保 Google Cloud 项目中启用了 Cloud Life Sciences API 和 Compute Engine API:
启用 Cloud Life Sciences API:
启用 Compute Engine API:
如果您遇到错误,指出您无权为项目启用 Google Cloud API,请参阅启用和停用 API。
缺少 Cloud Life Sciences 服务账号或 Cloud Life Sciences Service Agent 角色
首次在 Google Cloud 项目中运行流水线时,系统会自动创建一个 Cloud Life Sciences Service Agent 服务账号。您可以使用 Google Cloud CLI 或 REST 和 RPC API 来运行流水线。您无法删除此服务账号,但 它可能不会显示在 Identity and Access Management 页面中。 这可能会导致 Cloud Life Sciences API 出错。
为使 Cloud Life Sciences API 运行并完成在 Compute Engine 虚拟机上运行流水线之类的任务,Cloud Life Sciences Service Agent 服务账号必须存在。它还必须具有 Life Sciences Service Agent IAM 角色。
如果您遇到以下任何问题,请重新创建 Cloud Life Sciences Service Agent 服务账号或向其授予 Life Sciences Service Agent IAM 角色:
- 无法在 Identity and Access Management 页面找到 Cloud Life Sciences Service Agent 服务账号。
- 可以找到 Cloud Life Sciences Service Agent 服务账号,但它不具有 Life Sciences Service Agent 角色。
借助 Google Cloud CLI 并使用 Cloud Life Sciences Service Agent 服务账号的标识符(格式为 service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount
)将 lifesciences.serviceAgent
角色添加到该服务账号。
如需重新创建该服务账号或向其授予 Life Sciences Service Agent 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,并验证以下各点:
- 成员列包含一个格式为
service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount
的服务账号标识符。 - 在成员列的上述标识符所在的同一行中,名称列包含的值是 Cloud Life Sciences Service Agent。
- 在成员列的上述标识符所在的同一行中,角色列包含的值是 Life Sciences Service Agent。
缺少 Compute Engine 默认服务账号
新创建的 Google Cloud 项目附带 Compute Engine 默认服务账号,该账号采用如下电子邮件地址形式:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
该服务账号必须位于您的 Google Cloud 项目中,否则 Cloud Life Sciences API 将无法在 Compute Engine 虚拟机上运行流水线。如果从项目中删除该服务账号,那么所有依赖该服务账号凭据的应用都会运行失败。如果您不小心删除了 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。
- 在 IAM 页面上 在 Google Cloud 控制台中找到您的服务账号。
- 在与服务账号匹配的继承列中,点击铅笔图标。修改权限窗格随即会打开。
- 点击添加另一角色,然后搜索 Life Sciences Workflows Runner 和 Service Account User 角色。
- 选择相应角色,然后点击保存。随后,
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 虚拟机发生故障,原因可能是它已被抢占,无法在终止前报告自己的状态。
建议执行的操作:重试操作。如果错误再次出现,则可能存在会导致 Compute Engine 虚拟机出现故障的问题,例如使用了过多的资源。请查看 Cloud Logging 中的 Compute Engine 日志,以了解更多信息。
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 虚拟机已被抢占。
建议执行的操作:重试操作。
遇到错误后重试
流水线可能会发生故障并返回一个错误代码。故障可能是由于与流水线所执行工作无关的问题造成的。在大多数情况下,您应该重试流水线操作。如果您使用了费用更低但更容易发生中断的抢占式虚拟机,那么流水线就很容易发生故障。Cloud Life Sciences API 无法自动重试流水线操作,因为并非所有流水线都具有幂等性。
如错误代码部分所述,当您遇到以下任一错误代码时,通常建议您重试:
RESOURCE EXHAUSTED (8)
ABORTED (10)
UNAVAILABLE (14)
启用 Cloud Monitoring
您可以在流水线上启用 Cloud Monitoring,以监控用于运行流水线的工作器虚拟机的运行状况和资源使用情况。不过,启用 Monitoring 可能会产生额外的费用。如需启用 Monitoring,请在发出流水线请求时在 VirtualMachine
对象上指定 enableStackdriverMonitoring
标志。
流水线的磁盘空间不足
如果流水线的磁盘空间不足,无法提取 Docker 映像,或者它需要更多磁盘空间才能记录或执行任务,您可以选择执行以下任一操作:
- 在发出流水线请求时,使用
VirtualMachine
对象中的bootDiskSizeGb
标志增加启动磁盘大小。 - 挂接一个单独的磁盘,并在发出流水线请求时将其添加到
Action
对象内的Mount
对象中。
遇到配额延迟
如果 Google Cloud 项目的 Compute Engine 配额已用尽,则 Cloud Life Sciences API 不会分配虚拟机。所有进一步分配尝试都会延迟,以便现有流水线有时间完成。如果这种延迟持续发生,您可以申请提升配额。
流水线停止
如果您的流水线因虚拟机无法与 Cloud Life Sciences API 服务停止并重复分配和释放虚拟机,可能是因为下列问题一起出现:
如需解决此问题,请执行以下某项操作:
- 在
Network
对象中指定网络。 - 使用创建自动模式网络中的步骤重新创建
default
网络,并将新网络命名为default
取消或删除虚拟机
您应该取消与不需要的工作器虚拟机关联的操作,而不是删除这些虚拟机。如果删除虚拟机,则流水线会慢慢出现故障;如果该虚拟机正在启动,GCP 可能会分配一个新的虚拟机。