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 の役割がない
Cloud Life Sciences サービス エージェントのサービス アカウントは、Google Cloud プロジェクトで初めてパイプラインを実行するときに自動的に作成されます。Google Cloud CLI か、REST API とリモート プロシージャ コール API を使用して、このパイプラインを実行できます。サービス アカウントは削除できませんが、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 サービス エージェントのサービス アカウントを再作成するか、Life Sciences サービス エージェントの IAM ロールを付与します。
- Cloud Life Sciences Service Agent のサービス アカウントが Identity and Access Management ページに見つからない。
- Cloud Life Sciences Service Agent のサービス アカウントは見つかるものの、Life Sciences Service Agent の役割が割り当てられていない。
Google Cloud CLI で、service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount
形式を使用したサービス アカウントの 識別子 を使用して lifesciences.serviceAgent
ロールを Cloud Life Sciences Service Agent サービス アカウントに追加します。
サービス アカウントを再作成するか、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
形式のサービス アカウント 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 コンソールまたは Google Cloud CLI のいずれかを使用して、次の手順を行います。
Console
- Cloud Life Sciences API が有効になっていることを確認します。
- Google Cloud Console の IAM ページで、サービス アカウントを探します。
- サービス アカウントと一致する [継承] 列で、鉛筆のアイコンをクリックします。[権限の編集] ペインが開きます。
- [別の役割を追加] をクリックして、Life Sciences Workflows Runner とサービス アカウント ユーザーの役割を検索します。
- 役割を選択し、[保存] をクリックします。
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
カテゴリ: ユーザーエラー
説明: リソースが不足しています。このエラーコードは、アプリケーションがプロジェクト レベルの 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 ログをお調べください。
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 を割り当てません。それ以外の割り当ての試行は、既存のパイプラインが完了するまで繰り延べられます。この遅延が引き続き発生する場合は、割り当ての増加をリクエストできます。
パイプラインが停止している
VM が Cloud Life Sciences API サービスと通信できないためにパイプラインが停止し、VM の割り当てと解放を繰り返す場合、次のような問題が同時に発生していることが原因の可能性があります。
この問題を解決するには、以下のいずれかを行います。
Network
オブジェクトでネットワークを指定する- 自動モード ネットワークを作成するの手順によって、
default
ネットワークを再作成し、新しいネットワークの名前をdefault
に設定する
VM のキャンセルまたは削除
不要なワーカー VM を削除するのではなく、関連するオペレーションをキャンセルする必要があります。VM を削除すると、パイプラインの処理が遅くなり、起動中の場合は新しい VM が割り当てられる場合があります。