Cloud Healthcare API を使用して問題が発生した場合に役立つトラブルシューティングの手順について説明します。
Cloud Healthcare API を有効にできない
Google Cloud プロジェクトで Cloud Healthcare API を初めて有効にすると、プロジェクトで Google Cloud API を有効にする権限がないことを示す権限エラーが発生することがあります。
Cloud Healthcare API を含む Google Cloud API を有効にする方法については、API の有効化と無効化をご覧ください。
Cloud Healthcare API に対して認証できない
Cloud Healthcare API を呼び出すと、「アプリケーションのデフォルト認証情報」が使用できないことを示すエラーメッセージが表示されることがあります。
アプリケーションのデフォルト認証情報を構成する方法や、アプリケーションまたはコマンドに認証情報を手動で渡す方法については、API に対する認証をご覧ください。
Cloud Healthcare API サービス アカウントまたは Healthcare Service Agent のロールがない
Cloud Healthcare API を有効にして、最初のデータセットを作成すると、Cloud Healthcare サービス エージェントのサービス アカウントが自動的に作成されます。これは 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 サービス エージェントのサービス アカウントを再作成するか、Healthcare サービス エージェント IAM ロールをサービス アカウントに付与します。
- Cloud Healthcare Service Agent サービス アカウントは Identity and Access Management ページには表示されません。
- Cloud Healthcare Service Agent サービス アカウントは見つかりますが、Healthcare Service Agent のロールは含まれていません。
Google Cloud CLI で、service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount
形式を使用したサービス アカウントの 識別子 を使用して healthcare.serviceAgent
ロールを Cloud Healthcare Service Agent サービス アカウントに追加します。
サービス アカウントを再作成するか、Healthcare サービス エージェントの 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-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
形式のサービス アカウント ID が含まれています。 - [メンバー] 列と同じ行の [名前] 列に Cloud Healthcare Service Agent が含まれます。
- [メンバー] 列と同じ行の [ロール] 列に、Healthcare Service Agent が含まれます。
累積的な高負荷により FHIR トランザクション バンドルが中止されました
FHIR トランザクション バンドルの実行時に、リクエストが「トランザクション バンドル実行のための負荷の累積過多により中止」されたことを示すエラー メッセージが表示されることがあります。
トランザクション バンドルを実行する際に、作成できるロック競合の量に制限はありません。たとえば、各バンドルが一般的な単一の Patient リソースを更新するバンドル セットを作成し、同時に一般的でない他のリソースをいくつか作成して、それらを並列実行するとします。その場合、すべてのバンドルがそのトランザクション全体で同じ Patient のロックを保持する必要があるため、処理時間が急激に増加します。その結果、タイムアウトが発生します。Cloud Healthcare API では、トランザクション バンドルのタイムアウトが検出されると、このエラー メッセージを伴うすべてのトランザクション バンドルを一時的に拒否して競合を一掃します。
この問題を回避するには、次のいずれかを行ってください。
- トランザクション セマンティクスが不要な場合は、バッチ バンドルを使用します。バッチ バンドルはアトミックではないので、この問題を完全に回避できます。ただし、参照整合性が徹底されにくくなります。
- 並列処理でどのリソースが更新されているのかを特定できる場合は、その更新を除外または回避できるかどうかを判断します。FHIR で、Observation などの新しいリソースを作成し、すでに存在していて変更されていない関連の Patient(または Organization、Location、Device など)を更新する場合が、これに該当します。
- クライアント側でのレート制限: トランザクション バンドルの実行に時間がかかる場合は、リクエストがタイムアウトする前に取り込みレートを減らします。