问题排查

如果您在使用 Cloud Healthcare API 时遇到问题,请查阅以下实用的问题排查步骤。

无法启用 Cloud Healthcare API

首次在 Google Cloud 项目中启用 Cloud Healthcare API 时,您可能会遇到权限错误,指出您无权为项目启用 Google Cloud API。

如需了解如何启用 Google Cloud API(包括 Cloud Healthcare API),请参阅启用和停用 API

无法向 Cloud Healthcare API 进行身份验证

调用 Cloud Healthcare API 时,您可能会收到一条错误消息,表明您的“应用默认凭据”不可用。

如需了解如何配置应用默认凭据或如何将身份验证凭据手动传递到应用或命令,请参阅向 API 进行身份验证

缺少 Cloud Healthcare API 服务账号或 Healthcare Service Agent 角色

启用 Cloud Healthcare API 并创建第一个数据集后,系统会自动创建 Cloud Healthcare Service Agent 服务帐号。这是 Google 管理的服务帐号。您无法完全删除该服务帐号,但在某些情况下,该帐号可能不会显示在 Identity and Access Management 页面中,并且您可能会遇到 Cloud Healthcare API 问题。

为使 Cloud Healthcare API 正常运行并完成从 Pub/Sub 发布和接收消息或向 Cloud Logging 写入指标等任务,Cloud Healthcare Service Agent 服务账号必须存在,且必须具有 Healthcare Service Agent IAM 角色。

如果遇到以下任何问题,您可以重新创建 Cloud Healthcare Service Agent 服务账号或向其授予 Healthcare Service Agent IAM 角色:

  • 您无法在身份和访问权限管理页面中找到 Cloud Healthcare Service Agent 服务账号。
  • 可以找到 Cloud Healthcare Service Agent 服务账号,但它不具有包含 Healthcare Service Agent 角色。

使用 Google Cloud CLICloud Healthcare Service Agent 服务账号的标识符(格式为 service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount),将 healthcare.serviceAgent 角色添加到该服务账号。

如需重新创建该服务账号或向其授予 Healthcare Service Agent IAM 角色,请运行 gcloud projects add-iam-policy-binding 命令。如需查找 PROJECT_IDPROJECT_NUMBER,请参阅识别项目

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com \
    --role=roles/healthcare.serviceAgent

如果请求成功,命令提示符将显示类似于以下示例的消息:

Updated IAM policy for project [PROJECT_ID].
bindings:
...
- members:
  - serviceAccount:service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com
  role: roles/healthcare.serviceAgent
...
etag: VALUE
version: VALUE

再次返回 Identity and Access Management,并验证以下各点:

  • 成员列包含一个格式为 service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount 的服务账号标识符。
  • 成员列的上述标识符所在的同一行中,名称列包含的值是 Cloud Healthcare Service Agent
  • 成员列的上述标识符所在的同一行中,角色列包含的值是 Healthcare Service Agent

FHIR 事务包因累计高负载而中止

执行 FHIR 事务包时,您可能会收到一条错误消息,表明请求“因执行事务包造成的累积高负载而中止”。

执行事务包时,可以创建的锁争用没有数量限制。例如,如果您构建一组包,其中每个包更新一个常见的患者资源,同时创建一些不常见的其他资源,然后并行执行这些资源,则它们所需的时间将快速增加,因为每个包都需要在整个事务中锁定该常见患者。因此,它们将开始超时。当 Cloud Healthcare API 检测到事务包超时时,它会暂时拒绝所有包含此错误消息的事务包,以尝试清除争用。

为避免此问题,您可以尝试以下某种方法:

  • 如果您不需要考虑事务语义,请使用批处理。对包进行批处理完全可以避免此问题,因此这种方式不是 atomic。但是,这会降低参照完整性强制执行。
  • 如果可以确定并行更新的资源,请确定是可以分解或者避免这些更新。在 FHIR 中,如果您要创建“观察对象”等新资源,并且还要更新已存在并且未更改的相关患者(或组织、位置、设备等),就会发生这种情况。
  • 客户端的速率限制:如果事务包需要很长时间才能执行,请在请求开始超时之前降低提取速率。