API not enabled or service account deleted
error
Cuando llames a la API de Cloud Life Sciences, es posible que recibas uno de los siguientes mensajes de error, o ambos:
API not enabled or service account deleted
checking service account permission: Account deleted: PROJECT_ID
Para resolver estos problemas, realiza los siguientes pasos en orden:
- Asegúrate de que las API de Cloud Life Sciences y Compute Engine estén habilitadas.
- Asegúrate de que la cuenta de servicio del Agente de Cloud Life Sciences esté configurada correctamente.
- Asegúrate de que la cuenta de servicio predeterminada de Compute Engine esté configurada correctamente.
Habilita las API de Cloud Life Sciences y Compute Engine
Asegúrate de que las API de Cloud Life Sciences y Compute Engine estén habilitadas en tu proyecto de Google Cloud Platform:
Habilita la API de Cloud Life Sciences:
Habilita la API de Compute Engine:
Si encuentras un error que indica que no tienes permiso para habilitar las API de Google Cloud en tu proyecto, consulta la página sobre cómo habilitar o inhabilitar las API.
Falta la cuenta de servicio de Cloud Life Sciences o la función de Agente de servicio de Cloud Life Sciences
La cuenta de servicio del Agente de servicio de Cloud Life Sciences se crea automáticamente. cuando se ejecuta una canalización por primera vez en un proyecto de Google Cloud. Puedes ejecutar la canalización con Google Cloud CLI o las APIs de REST y RPC. No puedes borrar la cuenta de servicio, es posible que no aparezca en la página de Identity and Access Management. Esto podría generar errores con la API de Cloud Life Sciences.
Para que la API de Cloud Life Sciences funcione y complete tareas, como ejecutar canalizaciones de VM de Compute Engine, debes tener una cuenta de servicio del Agente de servicio de Cloud Life Sciences y la función de IAM de Agente de servicio de Life Sciences.
Si encuentras alguno de los siguientes problemas, vuelve a crear la cuenta de servicio del Agente de servicio de Cloud Life Sciences, o bien otórgale la función de IAM Agente de servicio de Life Sciences:
- No puedes encontrar la cuenta de servicio del Agente de servicio de Cloud Life Sciences en la página de administración de identidades y accesos.
- La cuenta de servicio del Agente de servicio de Cloud Life Sciences está presente, pero no tiene la función de Agente de servicio de Life Sciences.
Usa Google Cloud CLI
Para agregar el rol lifesciences.serviceAgent
al
Agente de Cloud Life Sciences en la cuenta de servicio
identificador de la cuenta de servicio, que usa el formato
service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount
Para volver a crear la cuenta de servicio u otorgarle la función de IAM de Life Sciences Service Agent, ejecuta el comando gcloud projects add-iam-policy-binding
. Para encontrar los valores de PROJECT_ID y PROJECT_NUMBER, consulta cómo identificar proyectos.
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 solicitud se realiza correctamente, el símbolo del sistema muestra un mensaje similar al siguiente ejemplo:
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
Vuelve a la página de administración de identidades y accesos de nuevo y verifica lo siguiente:
- La columna Miembro debe contener un identificador de cuenta de servicio con el formato
service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount
. - En la misma fila que la columna Miembro, la columna Nombre debe contener el Agente de servicio de Cloud Life Sciences.
- En la misma fila que la columna Miembro, la columna Función debe contener el Agente de servicio de Life Sciences.
Falta la cuenta de servicio predeterminada de Compute Engine
Los proyectos de Google Cloud recientemente creados incluyen la cuenta de servicio predeterminada de Compute Engine, que se puede identificar mediante el siguiente correo electrónico:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
La cuenta de servicio debe existir en tu proyecto de Google Cloud; de lo contrario, la API de Cloud Life Sciences no podrá ejecutar canalizaciones en las VM de Compute Engine. Si borras la cuenta de servicio de tu proyecto, es posible que falle cualquier aplicación que dependa de sus credenciales. Si borras de forma accidental la cuenta de servicio predeterminada de Compute Engine, tienes un plazo de 30 días para intentar recuperarla. Consulta cómo recuperar una cuenta de servicio para obtener más información.
No te puedes autenticar en la API de Cloud Life Sciences
Si ejecutas una canalización con la API de Cloud Life Sciences y usas una cuenta de servicio como tus credenciales (en lugar de usar gcloud auth application-default login
como tus credenciales), asegúrate de que la cuenta de servicio tenga las siguientes funciones:
roles/lifesciences.workflowsRunner
roles/iam.serviceAccountUser
Para agregar estos roles a tu cuenta de servicio, completa los siguientes pasos: la consola de Google Cloud o Google Cloud CLI:
Console
- Asegúrate de haber habilitado la API de Cloud Life Sciences.
- En la página IAM En la consola de Google Cloud, busca tu cuenta de servicio.
- En la columna Herencia que coincide con la cuenta de servicio, haz clic en el ícono de lápiz. Se abrirá el panel Editar permisos.
- Haz clic en Agregar otra función y, luego, busca las funciones de Ejecutor de flujos de trabajo de Life Sciences y Usuario de cuenta de servicio.
- Selecciona la función y haz clic en Guardar. Las funciones
lifesciences.workflowsRunner
yiam.serviceAccountUser
se agregan a la cuenta de servicio.
gcloud
Para agregar los permisos de la cuenta de servicio, ejecuta el comando gcloud projects add-iam-policy-binding
. Para encontrar los valores de PROJECT_ID y PROJECT_NUMBER, consulta cómo identificar proyectos.
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
No te puedes autenticar con las credenciales predeterminadas de la aplicación
Cuando llames a la API de Cloud Life Sciences, podrías recibir un mensaje de error que indica que tus "Credenciales predeterminadas de la aplicación" no están disponibles.
Consulta Configura la autenticación para aplicaciones de producción de servidor a servidor a fin de obtener más información sobre cómo configurar las credenciales predeterminadas de la aplicación o transferir las credenciales de autenticación manualmente a una aplicación o un comando.
Códigos de error
La API de Cloud Life Sciences puede mostrar los siguientes códigos de error:
RESOURCE EXHAUSTED (8)
Código: 8
Estado: RESOURCE_EXHAUSTED
Categoría: Error del usuario
Descripción: Se agotó un recurso. Esto puede indicar que tu aplicación agotó una cuota de API de administrador a nivel de proyecto.
Acción recomendada: Vuelve a intentar la operación.
FAILED_PRECONDITION (9)
Código: 9
Estado: FAILED_PRECONDITION
Categoría: Error del usuario
Error completo: Execution failed: while running "[USER_COMMAND_LINE]": unexpected exit status [NUMBER] was not ignored
Descripción: Se rechazó la operación porque una acción del usuario mostró un estado de salida distinto de cero. Aparecerá un fragmento del resultado de error estándar de la acción, que puedes usar para diagnosticar el problema. Para subir los registros completos desde la máquina virtual (VM) de Compute Engine, utiliza la acción ALWAYS_RUN
cuando realices la solicitud de canalización, de la siguiente manera:
{ "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" }
Acción recomendada: No vuelvas a intentarlo sin solucionar el problema.
ABORTED (10)
Código: 10
Estado: ABORTED
Categoría: Error del sistema
Error completo: The assigned worker has failed to complete the operation
Descripción: La operación se anuló debido a que la VM de Compute Engine que ejecutaba la canalización falló, posiblemente porque se interrumpió y no pudo informar su estado antes de finalizar.
Acción recomendada: Vuelve a intentar la operación. Si el error se repite constantemente, es posible que exista un problema que provoque el error de la VM de Compute Engine, como usar demasiados recursos. Inspecciona los registros de Compute Engine en Cloud Logging para obtener más información.
13
Código: 13
Error completo: Execution failed: generic::internal: action INDEX: waiting for container: container is still running, possibly due to low system resources
Descripción: Es posible que se haya agotado la memoria del contenedor de la acción.
Acción recomendada: Vuelve a intentar la canalización con un tipo de máquina más grande.
UNAVAILABLE (14)
Código: 14
Estado: UNAVAILABLE
Categoría: Error del sistema
Error completo: Execution failed: worker was terminated
Descripción: Se interrumpió la VM de Compute Engine que ejecuta la canalización.
Acción recomendada: Vuelve a intentar la operación.
Reintenta la operación después de encontrar errores
Una canalización puede fallar y mostrar un código de error. Errores puede ocurrir debido a problemas no relacionados con el trabajo que realizaba la canalización. En la mayoría de los casos, debes reintentar la operación de canalización. Las canalizaciones son propensos a fallas cuando se usan VMs interrumpibles, que son más económicos, pero tienen más interrupciones. La API de Cloud Life Sciences no puede reintentar operaciones de canalización automáticamente porque no todas las canalizaciones son idempotentes.
Como se muestra en la sección de códigos de error, por lo general, se recomienda reintentar la operación si se detecta alguno de los siguientes códigos de error:
RESOURCE EXHAUSTED (8)
ABORTED (10)
UNAVAILABLE (14)
Habilita Cloud Monitoring
Puedes habilitar Cloud Monitoring en tus canalizaciones a fin de supervisar el estado y el uso de recursos de las VM de los trabajadores que se utilizan para ejecutar la canalización. Sin embargo, habilitar Monitoring puede generar costos adicionales. Para habilitar Monitoring, especifica la marca enableStackdriverMonitoring
en el objeto VirtualMachine
cuando realices la solicitud de canalización.
La canalización se está quedando sin espacio en disco
Si tu canalización se está quedando sin espacio en disco y no puede extraer imágenes de Docker, o si necesita más espacio en disco para registrar o realizar sus tareas, puedes elegir una de las siguientes opciones:
- Aumenta el tamaño del disco de arranque con la marca
bootDiskSizeGb
en el objetoVirtualMachine
cuando realices la solicitud de canalización. - Adjunta un disco aparte y agrégalo al objeto
Mount
dentro del objetoAction
cuando realices la solicitud de canalización.
Retrasos en las cuotas
Si tu proyecto de Google Cloud está fuera de la cuota de Compute Engine, la API de Cloud Life Sciences no asigna VM. Cualquier intento de asignación adicional se retrasa para dar tiempo de completarse a las canalizaciones existentes. Si esta demora continúa, puedes solicitar un aumento en la cuota.
Las canalizaciones se detienen
Si tus canalizaciones se detienen y asignan VM de forma repetida porque las VM no pueden comunicarse con el servicio de la API de Cloud Life Sciences, la causa puede ser la siguiente:
- Las VMs Es posible que se haya borrado la red
default
. - No se especificó otra red en el objeto
Network
.
Para solucionar este problema, realiza una de las siguientes acciones:
- Especifica una red en el objeto
Network
. - Vuelve a crear la red
default
mediante los pasos que aparecen en Cómo crear una red de modo automático y asigna a la nueva red el nombredefault
Cancela o borra VMs
En lugar de borrar VM de trabajador no deseadas, debes cancelar sus operaciones asociadas. Si borras la VM, la canalización fallará lentamente y, si está en proceso de inicio, es posible que se asigne una VM nueva.