Dépannage

API not enabled or service account deleted erreur

Lorsque vous appelez l'API Cloud Life Sciences, vous pouvez rencontrer l'une des erreurs suivantes, voire les deux :

  • API not enabled or service account deleted
  • checking service account permission: Account deleted: PROJECT_ID

Pour résoudre ces problèmes, procédez dans l'ordre indiqué ci-dessous :

  1. Assurez-vous que les API Cloud Life Sciences et Compute Engine sont activées.
  2. Assurez-vous que le compte de service de l'agent de service Cloud Life Sciences est correctement configuré.
  3. Assurez-vous que le compte de service par défaut de Compute Engine est correctement configuré.

Activer les API Cloud Life Sciences et Compute Engine

Assurez-vous que les API Cloud Life Sciences et Compute Engine sont activées au sein de votre projet Google Cloud :

  1. Activez l'API Cloud Life Sciences :

    Activer l'API Cloud Life Sciences

  2. Activez l'API Compute Engine :

    Activer l'API Compute Engine

Si vous rencontrez une erreur indiquant que vous n'êtes pas autorisé à activer les API Google Cloud pour votre projet, consultez la page Activer et désactiver des API.

Compte de service Cloud Life Sciences ou rôle d'agent de service Cloud Life Sciences manquants

Le compte de service agent de service Cloud Life Sciences est créé automatiquement lorsque vous exécutez un pipeline pour la première fois dans un projet Google Cloud. Vous pouvez exécuter le pipeline à l'aide de Google Cloud CLI, ou des API REST et RPC. L'agent de service Cloud Life Sciences est un compte de service géré par Google. Vous ne pouvez pas supprimer le compte de service, mais il est possible qu'il n'apparaisse pas sur la page Identity and Access Management. Cela peut entraîner des erreurs avec l'API Cloud Life Sciences.

Pour que l'API Cloud Life Sciences fonctionne et effectue des tâches telles que l'exécution de pipelines sur des VM Compute Engine, le compte de service de l'agent de service Cloud Life Sciences doit exister. Il doit également disposer du rôle IAM Agent de service Life Sciences.

Si vous rencontrez l'un des problèmes suivants, recréez le compte de service agent de service Cloud Life Sciences ou attribuez-lui le rôle IAM agent de service Life Sciences :

  • Vous ne trouvez pas le compte de service agent de service Cloud Life Sciences sur la page Identity and Access Management.
  • Vous trouvez le compte de service agent de service Cloud Life Sciences, mais il ne contient pas le rôle agent de service Life Sciences.

Utilisez Google Cloud CLI pour ajouter le rôle lifesciences.serviceAgent au compte de service de l'agent de service Cloud Life Sciences à l'aide de l'identifiant du compte de service, qui utilise le format service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount.

Pour recréer le compte de service ou lui accorder le rôle IAM Agent de service Life Sciences, exécutez la commande gcloud projects add-iam-policy-binding. Pour trouver les informations PROJECT_ID et PROJECT_NUMBER, consultez la section Identifier des projets.

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

Si la requête aboutit, l'invite de commande affiche un message semblable à l'exemple suivant :

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

Revenez à la page Identity and Access Management et vérifiez les éléments suivants :

  • La colonne Membre contient un identifiant de compte de service au format service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount.
  • Sur la même ligne que celle identifiée à partir de la colonne Membre, la colonne Nom contient Agent de service Cloud Life Sciences.
  • Sur la même ligne que celle identifiée à partir de la colonne Membre, la colonne Rôle contient Agent de service Life Sciences.

Compte de service Compute Engine par défaut manquant

Une fois créés, les projets Google Cloud disposent d'un compte de service Compute Engine par défaut, identifiable par l'adresse e-mail suivante :

PROJECT_NUMBER-compute@developer.gserviceaccount.com

Le compte de service doit exister au sein de votre projet Google Cloud. Dans le cas contraire, l'API Cloud Life Sciences ne peut pas exécuter de pipeline sur les VM Compute Engine. Si vous supprimez le compte de service de votre projet, toutes les applications qui dépendent des identifiants associés sont susceptibles de connaître des défaillances. Si vous supprimez accidentellement le compte de service Compute Engine par défaut, vous pouvez essayer de le récupérer dans un délai de 30 jours. Pour en savoir plus, consultez la section Annuler la suppression d'un compte de service.

Impossible de s'authentifier auprès de l'API Cloud Life Sciences

Si vous exécutez un pipeline avec l'API Cloud Life Sciences en utilisant un compte de service pour vous authentifier (au lieu d'utiliser gcloud auth application-default login comme identifiant), assurez-vous que le compte de service possède les rôles suivants :

  • roles/lifesciences.workflowsRunner
  • roles/iam.serviceAccountUser

Pour ajouter ces rôles à votre compte de service, procédez comme suit à l'aide de la console Google Cloud ou de Google Cloud CLI:

Console

  1. Assurez-vous d'avoir activé l'API Cloud Life Sciences.
  2. Sur la page IAM de la console Google Cloud, recherchez votre compte de service.
  3. Dans la colonne Héritage qui correspond au compte de service, cliquez sur l'icône en forme de crayon. Le volet Modifier les autorisations s'affiche.
  4. Cliquez sur Ajouter un autre rôle, puis recherchez les rôles Exécuteur de workflows Life Sciences et Utilisateur du compte de service.
  5. Sélectionnez le rôle, puis cliquez sur Enregistrer. Les rôles lifesciences.workflowsRunner et iam.serviceAccountUser sont alors ajoutés au compte de service.

gcloud

Pour ajouter les autorisations de compte de service, exécutez la commande gcloud projects add-iam-policy-binding. Pour trouver les informations PROJECT_ID et PROJECT_NUMBER, consultez la section Identifier des projets.

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

Impossible de s'authentifier à l'aide des identifiants par défaut de l'application

Lorsque vous appelez l'API Cloud Life Sciences, vous pouvez être confronté à un message d'erreur indiquant que vos "Identifiants par défaut de l'application" ne sont pas disponibles.

Pour en savoir plus sur la configuration des identifiants par défaut des applications ou sur la transmission manuelle des identifiants à une application ou une commande, consultez la page Configurer l'authentification pour des applications de production serveur à serveur.

Codes d'erreur

L'API Cloud Life Sciences est susceptible de renvoyer les codes d'erreur suivants :

RESOURCE EXHAUSTED (8)

Code : 8

État : RESOURCE_EXHAUSTED

Catégorie : erreur utilisateur

Description : une ressource est épuisée. Cela peut indiquer que votre application a épuisé un quota pour l'API d'administration au niveau de votre projet.

Action recommandée : retentez l'opération.

FAILED_PRECONDITION (9)

Code : 9

État : FAILED_PRECONDITION

Catégorie : erreur utilisateur

Erreur détaillée : Execution failed: while running "[USER_COMMAND_LINE]": unexpected exit status [NUMBER] was not ignored

Description : l'opération a été refusée, car une action de l'utilisateur a renvoyé un état de sortie différent de zéro. Un extrait de la sortie d'erreur standard associée à l'action s'affiche, et vous pouvez utiliser ces informations pour diagnostiquer le problème. Pour importer les journaux complets depuis la VM Compute Engine, utilisez l'action ALWAYS_RUN lors de la création de la requête de pipeline, comme illustré ci-dessous :

{
  "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"
}

Action recommandée : n'effectuez aucune nouvelle tentative avant d'avoir résolu le problème.

ABORTED (10)

Code : 10

État : ABORTED

Catégorie : erreur système

Erreur détaillée : The assigned worker has failed to complete the operation

Description : l'opération a été annulée, car la VM Compute Engine exécutant le pipeline a connu une défaillance. Cela peut se produire, par exemple, lorsque la VM a été préemptée sans pouvoir signaler son état avant son extinction.

Action recommandée : retentez l'opération. Si l'erreur se reproduit régulièrement, cela peut être dû à un problème persistant, par exemple une utilisation excessive de certaines ressources, qui entraîne la défaillance de la VM Compute Engine. Inspectez les journaux Compute Engine dans Cloud Logging pour en savoir plus.

13

Code : 13

Erreur détaillée : Execution failed: generic::internal: action INDEX: waiting for container: container is still running, possibly due to low system resources

Description : le conteneur de l'action manque peut-être de mémoire.

Action recommandée : relancez l'opération du pipeline en utilisant un type de machine offrant plus de ressources système.

UNAVAILABLE (14)

Code : 14

État : UNAVAILABLE

Catégorie : erreur système

Erreur détaillée : Execution failed: worker was terminated

Description : la VM Compute Engine exécutant le pipeline a été préemptée.

Action recommandée : retentez l'opération.

Nouvelles tentatives après avoir rencontré des erreurs

Un pipeline peut échouer et renvoyer un code d'erreur. Des défaillances peuvent se produire en raison de problèmes sans rapport avec la tâche effectuée par le pipeline. Dans la plupart des cas, vous devez relancer l'opération de pipeline. Les pipelines sont particulièrement sujets aux échecs lorsque vous utilisez des VM préemptives, moins chères, mais davantage susceptibles d'être interrompues. L'API Cloud Life Sciences ne peut pas relancer automatiquement les opérations de pipeline, car tous les pipelines ne sont pas idempotents.

Comme indiqué dans la section relative aux codes d'erreur, il est généralement recommandé d'effectuer une nouvelle tentative lorsque vous rencontrez l'un des codes d'erreur suivants :

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

Activer Cloud Monitoring

Vous pouvez activer Cloud Monitoring sur vos pipelines pour surveiller l'état et l'utilisation des ressources des VM de nœud de calcul servant à exécuter le pipeline. Toutefois, activer la surveillance Monitoring peut entraîner des coûts supplémentaires. Pour activer Monitoring, spécifiez l'option enableStackdriverMonitoring sur l'objet VirtualMachine lorsque vous envoyez la requête de pipeline.

Le pipeline est à court d'espace disque

Si votre pipeline manque d'espace disque et ne peut pas extraire d'images Docker, ou s'il a besoin de davantage d'espace disque pour la journalisation ou la réalisation de ses tâches, vous pouvez choisir l'une des options suivantes :

  • Augmentez la taille du disque de démarrage à l'aide de l'option bootDiskSizeGb dans l'objet VirtualMachine lorsque vous envoyez la requête de pipeline.
  • Associez un disque distinct et ajoutez-le à l'objet Mount au sein de l'objet Action lorsque vous envoyez la requête de pipeline.

Retards liés aux quotas

Si votre projet Google Cloud ne dispose plus de quota pour Compute Engine, l'API Cloud Life Sciences n'alloue pas de VM. Toute nouvelle tentative d'allocation est retardée pour donner aux pipelines existants le temps de se terminer. Si ce type de retard persiste, vous pouvez demander une augmentation du quota.

Arrêt des pipelines

Si vos pipelines s'arrêtent, et attribuent puis libèrent des VM de manière répétée, car celles-ci ne peuvent pas communiquer avec le service de l'API Cloud Life Sciences, cela peut être dû aux problèmes suivants :

  • Le réseau default des VM a peut-être été supprimé.
  • Un autre réseau n'a pas été spécifié dans l'objet Network.

Pour résoudre ce problème, vous pouvez effectuer l'une des opérations suivantes :

  • Spécifier un réseau dans l'objet Network
  • Recréer le réseau default en suivant la procédure décrite dans la section Créer un réseau en mode automatique et nommer ce nouveau réseau default

Annuler ou supprimer des VM

Plutôt que de supprimer des VM de travail indésirables, il est préférable d'annuler les opérations associées. Si vous supprimez la VM, le pipeline met du temps à échouer et, s'il est en cours de lancement, une nouvelle VM risque d'être attribuée.