Solución de problemas

Error API not enabled or service account deleted

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 de permisos que indique que no tienes permiso para habilitar las API de GCP en tu proyecto, consulta Habilita o inhabilita API a fin de obtener información acerca de cómo habilitar las API de GCP.

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 habilitas Cloud Life Sciences. Esta es una cuenta de servicio administrada por Google. No puedes borrar la cuenta de servicio por completo, pero es posible que, en determinadas circunstancias, no aparezca en la página de Cloud Identity and Access Management y podrías tener problemas con la API de Cloud Life Sciences.

Para que la API de Cloud Life Sciences funcione correctamente 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 Cloud IAM de Agente de servicio de Life Sciences.

Puedes recrear la cuenta de servicio del Agente de servicio de Cloud Life Sciences, o bien otorgarle la función de Cloud IAM de Agente de servicio de Life Sciences si encuentras cualquiera de los siguientes problemas:

  • No puedes encontrar la cuenta de servicio del Agente de servicio de Cloud Life Sciences en la página de Cloud Identity and Access Management.
  • Puedes encontrar la cuenta de servicio del Agente de servicio de Cloud Life Sciences, pero no contiene la función de Agente de servicio de Life Sciences.

Utiliza la herramienta de línea de comandos de gcloud para agregar la función de lifesciences.serviceAgent a la cuenta de servicio del Agente de servicio de Cloud Life Sciences con el identificador de la cuenta de servicio, que utiliza el formato service-PROJECT_NUMBER@gcp-sa-lifesciences.iam.gserviceaccount.

A fin de recrear la cuenta de servicio, o bien otorgarle la función de Cloud IAM de Agente de servicio de Life Sciences, 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 Cloud Identity and Access Management y verifica lo siguiente:

  • La columna Miembro contiene 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 contiene el Agente de servicio de Cloud Life Sciences.
  • En la misma fila que la columna Miembro, la columna Función contiene el Agente de servicio de Life Sciences.

Falta la cuenta de servicio predeterminada de Compute Engine

Los proyectos de GCP recién creados tienen la cuenta de servicio predeterminada de Compute Engine, la cual se puede identificar mediante este correo electrónico:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

La cuenta de servicio debe existir en tu proyecto de GCP; de lo contrario, la API de Cloud Life Sciences no puede ejecutar canalizaciones en VM de Compute Engine. Si borras la cuenta de servicio de tu proyecto, cualquier aplicación que dependa de las credenciales de la cuenta de servicio podría fallar. Si borras de forma accidental la cuenta de servicio predeterminada de Compute Engine, puedes intentar recuperarla dentro de 30 días. 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 estás ejecutando una canalización con la API de Cloud Life Sciences con una cuenta de servicio como tus credenciales (en lugar de, por ejemplo, usar gcloud auth application-default login), 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 Google Cloud Platform Console o la herramienta de línea de comandos de gcloud:

Console

  1. Asegúrate de haber habilitado la API de Cloud Life Sciences.
  2. En la página de Cloud IAM en Google Cloud Platform 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, luego, haz clic en Guardar. Las funciones lifesciences.workflowsRunner y iam.serviceAccountUser se agregarán a la cuenta de servicio.

gcloud

A fin de 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 Configurar 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 cómo transferir las credenciales de autenticación manualmente a una aplicación o comando.

Códigos de estado

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 Stackdriver Logging para obtener más información.

UNAVAILABLE (14)

Código: 14

Estado: UNAVAILABLE

Categoría: Error del sistema

Error completo: Execution failed: worker was terminated

Descripción: La VM de Compute Engine que ejecuta la canalización se interrumpió.

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 producirse debido a problemas no relacionados con el trabajo que estaba haciendo la canalización y, en la mayoría de los casos, debes reintentar la operación de canalización. Las canalizaciones son particularmente propensas a fallar cuando se usan VM interrumpibles, que son más baratas, 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 Stackdriver Monitoring

Puedes habilitar Stackdriver 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 iniciar sesión o realizar sus tareas, puedes elegir cualquiera 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.
  • Conecta otro disco y agrégalo al objeto Mount dentro del objeto Action cuando realices la solicitud de canalización.

Retrasos en las cuotas

La API de Cloud Life Sciences no asignará VM si tu proyecto de GCP está fuera de la cuota de Compute Engine. 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 están en espera

Si tus canalizaciones están en espera y asignan y liberan VM repetidamente porque no pueden comunicarse con el servicio de API de Cloud Life Sciences, esto puede producirse porque se borró la red default de las VM y no se especificó otra red en el objeto Network.

Realiza una de estas acciones para resolver este problema:

  • Especifica una red en el objeto Network.

O

Cancela o borra VM

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, se puede asignar una nueva VM.