トラブルシューティング

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

これらの問題を解決するには、次の手順を順番に行います。

  1. Cloud Life Sciences API と Compute Engine API が有効になっていることを確認します
  2. Cloud Life Sciences Service Agent のサービス アカウントが正しく構成されていることを確認します
  3. Compute Engine のデフォルトのサービス アカウントが正しく構成されていることを確認します

Cloud Life Sciences API と Compute Engine API の有効化

Google Cloud プロジェクトで Cloud Life Sciences API と Compute Engine API が有効になっていることを確認します。

  1. Cloud Life Sciences API を有効にします。

    Cloud Life Sciences API を有効にする

  2. Compute Engine API を有効にします。

    Compute Engine API を有効にする

プロジェクトで Google Cloud API を有効にする権限がないことを示す権限エラーが発生した場合は、Google Cloud API を有効にする方法について API の有効化と無効化をご覧ください。

Cloud Life Sciences サービス アカウントまたは Cloud Life Sciences Service Agent の役割がない

Cloud Life Sciences Service Agent のサービス アカウントは、Cloud Life Sciences を有効にすると自動的に作成されます。これは Google が管理するサービス アカウントです。サービス アカウントは完全には削除できませんが、一定の環境においては Identity and Access Management ページに表示されず、Cloud Life Sciences API に問題が発生する場合があります。

Cloud Life Sciences API が正しく機能し、Compute Engine VM でパイプラインを実行するなどのタスクを完了するには、Cloud Life Sciences Service Agent のサービス アカウントが存在し、Life Sciences Service Agent の IAM ロールが付与されている必要があります。

次のいずれかの問題が発生した場合は、Cloud Life Sciences Service Agent のサービス アカウントを再作成するか、Life Sciences Service Agent の IAM ロールを付与します。

  • Cloud Life Sciences Service Agent のサービス アカウントが Identity and Access Management ページに見つからない。
  • Cloud Life Sciences Service Agent のサービス アカウントは見つかるものの、Life Sciences Service Agent の役割が割り当てられていない。

gcloud コマンドライン ツールを使用して、service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount 形式のサービス アカウントの ID を使用し、lifesciences.serviceAgent 役割を Cloud Life Sciences Service Agent のサービス アカウントに追加します。

サービス アカウントを再作成するか、Life Sciences 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-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 形式のサービス アカウント ID が含まれています。
  • [メンバー] 列と同じ行の [名前] 列に、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 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 Platform Console または gcloud コマンドライン ツールを使用して、次の手順を実行します。

Console

  1. Cloud Life Sciences API が有効になっていることを確認します。
  2. Google Cloud Console の IAM ページで、サービス アカウントを探します。
  3. サービス アカウントと一致する [継承] 列で、鉛筆のアイコンをクリックします。[権限の編集] ペインが開きます。
  4. [別の役割を追加] をクリックして、Life Sciences Workflows Runnerサービス アカウント ユーザーの役割を検索します。
  5. 役割を選択し、[保存] をクリックします。lifesciences.workflowsRunneriam.serviceAccountUser の役割が、サービス アカウントに追加されます。

gcloud

サービス アカウントの権限を追加するには、gcloud projects add-iam-policy-binding コマンドを実行します。PROJECT_IDPROJECT_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

カテゴリ: ユーザーエラー

説明: リソースが不足しています。このエラーコードは、アプリケーションがプロジェクト レベルの 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",
    "gsutil -q cp /google/logs/output gs://CLOUD_STORAGE_BUCKET/output"
  ],
  "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 ログをお調べください

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 を使用すると、特に障害が発生しやすくなります。プリエンプティブル VM は、運用コストを抑えられますが、中断が発生する可能性が高くなります。Cloud Life Sciences API は、パイプライン処理を自動的に再試行できません。パイプラインのすべてが、べき等ではないためです。

エラーコード セクションに示されているように、通常は次のいずれかのエラーコードが発生した場合は、再試行することをおすすめします。

  • RESOURCE EXHAUSTED (8)
  • ABORTED (10)
  • UNAVAILABLE (14)

Cloud Monitoring の有効化

パイプラインで Cloud Monitoring を有効にすると、パイプラインの実行に使用するワーカー VM のヘルスとリソースの使用状況をモニタリングできます。ただし、モニタリングを有効にすると追加費用が発生します。モニタリングを有効にするには、パイプライン リクエストの送信時に enableStackdriverMonitoring フラグを VirtualMachineオブジェクトに指定します。

パイプラインのディスク容量が不足している

パイプラインのディスク容量が不足していて、Docker イメージを pull できない場合や、タスクを記録または実行するためのディスク容量が必要な場合は、

  • パイプライン リクエストの送信時に、VirtualMachine オブジェクトの bootDiskSizeGb フラグを使用してブートディスクのサイズを増やします。
  • 別のディスクを接続し、パイプライン リクエストを送信する際に Action オブジェクト内の Mount オブジェクトにディスク容量を追加します。

割り当て遅延の発生

Google Cloud プロジェクトの Compute Engine 割り当てが不足している場合、Cloud Life Sciences API は VM を割り当てません。それ以外の割り当ての試行は、既存のパイプラインが完了するまで繰り延べられます。この遅延が引き続き発生する場合は、割り当ての増加をリクエストできます。

パイプラインがハングしている

パイプラインがハングし、Cloud Life Sciences API サービスと通信できないため、VM の割り当てと解放が繰り返し行われている場合は、VM の default ネットワークが削除され、Network オブジェクトに別のネットワークが指定されていないことが原因として考えられます。

この問題を解決するには、次のいずれかを行います。

  • Network オブジェクトでネットワークを指定する

OR

VM のキャンセルと削除

不要なワーカー VM を削除するのではなく、関連するオペレーションをキャンセルする必要があります。VM を削除すると、パイプラインの処理が遅くなり、起動中の場合は新しい VM が割り当てられる場合があります。