Soluciona problemas

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:

  1. Asegúrate de que las API de Cloud Life Sciences y Compute Engine estén habilitadas.
  2. Asegúrate de que la cuenta de servicio del Agente de Cloud Life Sciences esté configurada correctamente.
  3. 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:

  1. Habilita la API de Cloud Life Sciences:

    Habilitar la API de Cloud Life Sciences

  2. Habilita la API de Compute Engine:

    Habilitar 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 ejecutas una canalización por primera vez en un proyecto de Google Cloud. Puede ejecutar la canalización mediante Google Cloud CLI o las API de REST y RPC. El Agente de servicio de Cloud Life Sciences es una cuenta de servicio administrada por Google. No puedes borrar la cuenta de servicio, pero es posible que no aparezca en la página de administración de identidades y accesos. Esto podría provocar 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, debe existir la cuenta de servicio del agente de servicio de Cloud Life Sciences. También debe tener la función de IAM 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 la función lifesciences.serviceAgent a la cuenta de servicio del Agente de servicio de Cloud Life Sciences con el 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 estas funciones a tu cuenta de servicio, completa los siguientes pasos con la consola de Google Cloud o Google Cloud CLI:

Consola

  1. Asegúrate de haber habilitado la API de Cloud Life Sciences.
  2. En la página de IAM en Google Cloud Console, busca tu cuenta de servicio.
  3. 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.
  4. 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.
  5. Selecciona la función y haz clic en Guardar. Las funciones lifesciences.workflowsRunner y iam.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",
    "gsutil -q cp /google/logs/output gs://CLOUD_STORAGE_BUCKET/output"
  ],
  "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. Las fallas pueden ocurrir debido a problemas no relacionados con el trabajo que estaba haciendo la canalización. En la mayoría de los casos, debe reintentar la operación de canalización. Las canalizaciones son propensas a fallar cuando se usan VM interrumpibles, que son más económicas, pero tienen más probabilidades de sufrir 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 objeto VirtualMachine cuando realices la solicitud de canalización.
  • Adjunta un disco aparte y agrégalo al objeto Mount dentro del objeto Action 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.

Se están deteniendo las canalizaciones

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:

  • Es posible que se haya borrado la red default de las VMs.
  • No se especificó otra red en el objeto Network.

Para solucionar este problema, realiza una de las siguientes acciones:

Cómo cancelar o borrar 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.