Definir el tiempo de espera de las solicitudes de los servicios

Si un servicio se ejecuta durante demasiado tiempo, el sistema toma medidas para finalizarlo o limitarlo.

En el caso de los servicios de Cloud Run, el ajuste de tiempo de espera de la solicitud especifica el tiempo en el que los servicios desplegados en Cloud Run deben devolver una respuesta. Si no se devuelve una respuesta en el plazo especificado, la solicitud finaliza y se devuelve un error 504. Ten en cuenta que la instancia del contenedor que ha atendido la solicitud no se termina. Es posible que el contenedor o el código sigan procesando la solicitud finalizada y otras solicitudes. Para evitarlo, impide que se agote el tiempo de espera en tu servicio con las siguientes técnicas:

  • Define un tiempo de espera superior al tiempo de ejecución previsto.
  • Monitoriza el tiempo que queda durante la ejecución. Después, realiza la limpieza y vuelve pronto.

Periodo de tiempo de espera

El tiempo de espera predeterminado es de 5 minutos (300 segundos) y se puede ampliar hasta 60 minutos (3600 segundos).

Cuando activas tu servicio a partir de eventos de Eventarc, suscripciones de inserción de Pub/Sub o Cloud Scheduler, se aplica el tiempo de espera de estos servicios.

Puedes cambiar este ajuste al implementar una imagen de contenedor o actualizando la configuración del servicio.

Además de cambiar el tiempo de espera de las solicitudes de Cloud Run, también debes comprobar si tu framework de lenguaje tiene su propio ajuste de tiempo de espera de las solicitudes, que también debes actualizar. Algunos clientes del servicio Cloud Run también pueden imponer un tiempo de espera más restrictivo.

Roles obligatorios

Para obtener los permisos que necesitas para configurar e implementar servicios de Cloud Run, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Si vas a desplegar un servicio o una función a partir de código fuente, también debes tener otros roles concedidos en tu proyecto y en la cuenta de servicio de Cloud Build.

Para ver una lista de los roles y permisos de gestión de identidades y accesos asociados a Cloud Run, consulta los artículos sobre roles de gestión de identidades y accesos de Cloud Run y permisos de gestión de identidades y accesos de Cloud Run. Si tu servicio de Cloud Run interactúa con APIs, como las bibliotecas de cliente de Cloud, consulta la guía de configuración de la identidad del servicio.Google Cloud Para obtener más información sobre cómo conceder roles, consulta los artículos sobre permisos de implementación y gestión del acceso.

Configurar y actualizar el tiempo de espera de las solicitudes

Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.

Puedes definir el tiempo de espera de las solicitudes mediante la Google Cloud consola, la línea de comandos gcloud o un archivo YAML cuando creas un servicio o despliegas una revisión.

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.

  3. Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.

  4. Haz clic en la pestaña Contenedor.

    imagen

    • En el campo Tiempo de espera de la solicitud, introduce el valor de tiempo de espera que quieras usar en segundos. Usa valores entre 1 y 3600 segundos, o entre 1 y 60 minutos.
  5. Haz clic en Crear o en Implementar.

gcloud

Puedes actualizar el tiempo de espera de la solicitud de una revisión concreta en cualquier momento con el siguiente comando:

gcloud run services update SERVICE --timeout=TIMEOUT

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • TIMEOUT: el tiempo en el que se debe devolver una respuesta, mediante un valor entero o un valor de duración absoluta. Por ejemplo, 1m20s, que es 1 minuto y 20 segundos. Si usas un valor entero, se asumirá que la unidad son segundos. El valor que especifiques debe ser inferior a 60 minutos.

También puedes definir el tiempo de espera de las solicitudes durante la implementación con el siguiente comando:

gcloud run deploy --image IMAGE_URL --timeout=TIMEOUT

Haz los cambios siguientes:

  • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • TIMEOUT: el tiempo en el que se debe devolver una respuesta. Se usa un valor entero o un valor de duración. Por ejemplo, 1m20s, que es 1 minuto y 20 segundos. Si usas un valor entero, se asume que la unidad es segundos. El valor que especifiques debe ser inferior a 60 minutos.

YAML

  1. Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualice el atributo timeoutSeconds:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE
          timeoutSeconds: VALUE

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio de Cloud Run.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • VALUE: el tiempo de espera elegido, en segundos.
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

Terraform

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

Añade lo siguiente a un recurso google_cloud_run_v2_service en tu configuración de Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-request-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    # Timeout
    timeout = "300s"
  }
}

Sustituye 300s por el tiempo de espera de la solicitud que quieras para tu servicio.

Ver la configuración del tiempo de espera de las solicitudes

Para ver la configuración actual del tiempo de espera de las solicitudes de tu servicio de Cloud Run, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en el servicio que te interese para abrir la página Detalles del servicio.

  3. Haz clic en la pestaña Revisiones.

  4. En el panel de detalles de la derecha, el ajuste de tiempo de espera de la solicitud se encuentra en la pestaña Contenedor.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Busca el ajuste de tiempo de espera de la solicitud en la configuración devuelta.