Ajuste de escala manual

En esta página, se describe cómo ajustar la escala de tu servicio de forma manual. También se proporcionan instrucciones para un caso de uso común, que consiste en cambiar el recuento de instancias según un programa con trabajos de Cloud Scheduler y la API de Cloud Run Admin.

Descripción general

El ajuste de escala manual te permite establecer un recuento de instancias específico, independientemente del tráfico o el uso, y sin necesidad de volver a realizar la implementación. Todo esto te da la opción de escribir tu propia lógica de ajuste de escala con un sistema externo. Para ver un ejemplo, consulta Ajuste de escala según los programas.

De forma predeterminada, Cloud Run se ajusta automáticamente a una cantidad máxima especificada o predeterminada de instancias, según el tráfico, la CPU o tus propios objetivos de uso de CPU o simultaneidad personalizados. Sin embargo, para algunos casos de uso, es posible que desees establecer una cantidad específica de instancias mediante el ajuste de escala manual.

Configuración mínima y máxima a nivel de revisión y ajuste de escala manual

Si configuras tu servicio para el ajuste de escala manual, se ignorará cualquier configuración mínima a nivel de revisión y máxima de instancias.

Divisiones de tráfico para el ajuste de escala manual

En la siguiente lista, se describe cómo se asignan las instancias cuando se divide el tráfico en el ajuste de escala manual. Esto incluye el comportamiento de las revisiones solo con etiquetas de tráfico.

  • Durante una división del tráfico, a cada revisión se le asignan instancias de forma proporcional, según la división del tráfico, de manera similar a la división del tráfico con instancias mínimas a nivel de servicio.

  • Si la cantidad de revisiones que reciben tráfico supera el recuento de instancias manual, algunas de las revisiones no tendrán instancias. El tráfico enviado a esas revisiones obtendrá el mismo error que si las revisiones estuvieran inhabilitadas.

  • Para todas las revisiones que reciben tráfico en una división del tráfico, se inhabilitan las instancias mínimas y máximas a nivel de revisión.

  • Si una revisión está activa solo debido a las etiquetas de tráfico:

    • Si se establece la cantidad mínima de instancias a nivel de revisión, se iniciará la cantidad especificada de instancias, pero no se incluirá en el recuento total de instancias manuales del servicio. La revisión no se ajustará automáticamente.
    • Si no se establece la cantidad mínima de instancias a nivel de revisión, la revisión se ajusta a una instancia como máximo, en respuesta al tráfico enviado a la URL de la etiqueta.

Comportamiento de facturación con el ajuste de escala manual

Cuando usas el ajuste de escala manual, el comportamiento de facturación es similar al comportamiento cuando usas la función de instancias mínimas.

Es decir, con el ajuste de escala manual y la facturación basada en instancias, las instancias inactivas ajustadas manualmente se facturan como instancias activas.

Si usas el ajuste de escala manual con la facturación basada en solicitudes, las instancias inactivas ajustadas manualmente se facturan como instancias mínimas inactivas. Para obtener detalles completos de facturación, consulta la página de precios.

Roles obligatorios

Para obtener los permisos que necesitas para configurar y, luego, implementar los servicios de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:

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

Configura el ajuste de escala manual

Puedes configurar el modo de ajuste de escala con la Google Cloud consola de, Google Cloud CLI, un archivo YAML o la API cuando creas un servicio o actualizas una revisión:

Console

  1. En la Google Cloud consola de, ve a la página Servicios de Cloud Run:

    Ir a Cloud Run

  2. Si quieres configurar un servicio nuevo, haz clic en Implementar contenedor para mostrar el formulario Crear servicio. Si quieres configurar un servicio existente, haz clic en el servicio para mostrar su panel de detalles y, luego, haz clic en el ícono de lápiz junto a Ajuste de escala en la parte superior derecha del panel de detalles.

  3. Ubica el formulario Ajuste de escala del servicio (para un servicio nuevo) o el formulario Editar ajuste de escala para un servicio existente.

    imagen

    En el campo Cantidad de instancias, especifica la cantidad de instancias de contenedor para el servicio.

  4. Haz clic en Crear para un servicio nuevo o en Guardar en un servicio existente.

gcloud

Para especificar el ajuste de escala de un servicio nuevo, usa el comando deploy:

gcloud run deploy SERVICE \
    --scaling=INSTANCE_COUNT \
    --image IMAGE_URL

Reemplaza lo siguiente:

  • SERVICE: el nombre del servicio
  • INSTANCE_COUNT: la cantidad de instancias para el servicio Esto establece el servicio en el ajuste de escala manual. Especifica un valor de 0 para inhabilitar el servicio. Especifica un valor de auto para usar el comportamiento predeterminado de ajuste de escala automático 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 debe estar creado. La URL sigue el formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

Especifica el ajuste de escala para un servicio existente con el siguiente comando de actualización:

gcloud run services update SERVICE \
   --scaling=INSTANCE_COUNT

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza los atributos scalingMode y manualInstanceCount:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/scalingMode: MODE
      run.googleapis.com/manualInstanceCount: INSTANCE_COUNT

    Reemplaza lo siguiente:

    • SERVICE: el nombre de tu servicio de Cloud Run
    • MODE: manual para el ajuste de escala manual o automatic para el comportamiento predeterminado de ajuste de escala automático de Cloud Run
    • INSTANCE_COUNT: la cantidad de instancias que ajustas manualmente para el servicio Especifica un valor de 0 para inhabilitar el servicio.
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

    El comando gcloud run services replace usa de forma predeterminada el archivo service.yaml si está presente.

API de REST

Para actualizar la cantidad de instancias de un servicio determinado en el ajuste de escala manual, envía una solicitud HTTP PATCH al extremo service de la API de Cloud Run Admin.

Por ejemplo, con curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount

Reemplaza lo siguiente:

  • ACCESS_TOKEN: un token de acceso válido para una cuenta que tenga los permisos de IAM para actualizar un servicio. Por ejemplo, si accediste a gcloud, puedes recuperar un token de acceso con gcloud auth print-access-token. Desde una instancia de contenedor de Cloud Run, puedes recuperar un token de acceso a través del servidor de metadatos de instancias de contenedor.
  • MANUAL_INSTANCE_COUNT: la cantidad de instancias para el servicio Esto establece el servicio en el ajuste de escala manual. Especifica un valor de 0 para inhabilitar el servicio.
  • SERVICE: El nombre del servicio
  • REGION: la Google Cloud región en la que se implementa el servicio
  • PROJECT_ID: Es el Google Cloud ID del proyecto de

Para cambiar el modo de ajuste de escala de manual a automático, envía una solicitud PATCH al extremo service de la API de Cloud Run Admin y configura el campo scalingMode como AUTOMATIC.

Por ejemplo, ejecuta el siguiente comando curl:

      curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer ACCESS_TOKEN" \
      -X PATCH \
      -d '{"launchStage":"BETA","scaling":{"scalingMode": "AUTOMATIC","manualInstanceCount":null}}' \
      https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.scalingMode,scaling.manualInstanceCount

Terraform

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Agrega lo siguiente a un google_cloud_run_v2_service recurso en la configuración de Terraform:
resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  scaling {
    scaling_mode = "MANUAL"
    manual_instance_count = "INSTANCE_COUNT"
  }
}

Reemplaza lo siguiente:

  • SERVICE_NAME: el nombre de tu servicio de Cloud Run
  • REGION: La Google Cloud región. Por ejemplo, europe-west1
  • 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 debe estar creado. La URL sigue el formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • INSTANCE_COUNT: la cantidad de instancias que ajustas manualmente para el servicio Esta cantidad de instancias se divide entre todas las revisiones con tráfico especificado según el porcentaje de tráfico que reciben.

Visualiza la configuración de ajuste de escala de tu servicio

Para ver las instancias de configuración de ajuste de escala de tu servicio de Cloud Run, sigue estos pasos:

Console

  1. En la Google Cloud consola de, ve a la página Servicios de Cloud Run:

    Ir a Cloud Run

  2. Haz clic en el servicio que te interesa para abrir el panel Detalles del servicio.

  3. La configuración de ajuste de escala actual se muestra en la parte superior derecha del panel de detalles del servicio, después de la etiqueta Ajuste de escala, junto al ícono de lápiz.

gcloud

Usa el siguiente comando para ver la configuración de ajuste de escala actual del servicio:

gcloud run services describe SERVICE

Reemplaza SERVICE por el nombre del servicio.

Busca el campo Scaling: Manual (Instances: ) cerca de la parte superior del texto que se muestra en describe.

YAML

Usa el siguiente comando para descargar la configuración YAML del servicio:

gcloud run services describe SERVICE --format export > service.yaml

La configuración de ajuste de escala se incluye en los atributos scalingMode y manualInstanceCount.

Inhabilitar un servicio

Cuando inhabilitas un servicio, se permitirá que se completen todas las solicitudes que se estén procesando. Sin embargo, cualquier otra solicitud a la URL del servicio fallará con un error Service unavailable o Service disabled.

Las solicitudes a las revisiones de servicio que solo están activas debido a las etiquetas de tráfico no se ven afectadas porque esas revisiones no están inhabilitadas.

Para inhabilitar un servicio, debes configurar el ajuste de escala en cero. Puedes inhabilitar un servicio con la Google Cloud consola de, Google Cloud CLI, un archivo YAML o la API:

Console

  1. En la Google Cloud consola de, ve a la página Servicios de Cloud Run:

    Ir a Cloud Run

  2. Haz clic en el servicio que deseas inhabilitar para mostrar su panel de detalles y, luego, haz clic en el ícono de lápiz junto a Ajuste de escala en la parte superior derecha del panel de detalles.

  3. Ubica el formulario Editar ajuste de escala y selecciona Ajuste de escala manual.

    imagen

    En el campo Cantidad de instancias, ingresa el valor 0 (cero).

  4. Haz clic en Guardar.

gcloud

Para inhabilitar un servicio, usa el siguiente comando para configurar el ajuste de escala en cero:

gcloud run services update SERVICE --scaling=0

Reemplaza SERVICE por el nombre del servicio.

YAML

  1. Descarga la configuración YAML del servicio:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Configura el atributo manualInstanceCount en cero (0):

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/scalingMode: manual
      run.googleapis.com/manualInstanceCount: `0`

    Reemplaza SERVICE por el nombre de tu servicio de Cloud Run.

  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

API de REST

Para inhabilitar un servicio, envía una solicitud HTTP PATCH al extremo service de la API de Cloud Run Admin.

Por ejemplo, con curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"scaling":{"manualInstanceCount":0 }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount

Reemplaza lo siguiente:

  • ACCESS_TOKEN: un token de acceso válido para una cuenta que tenga los permisos de IAM para actualizar un servicio. Por ejemplo, si accediste a gcloud, puedes recuperar un token de acceso con gcloud auth print-access-token. Desde una instancia de contenedor de Cloud Run, puedes recuperar un token de acceso a través del servidor de metadatos de instancias de contenedor.
  • SERVICE: El nombre del servicio
  • REGION: la Google Cloud región en la que se implementa el servicio
  • PROJECT_ID: Es el Google Cloud ID del proyecto de

Terraform

Para inhabilitar un servicio, configura el atributo manual_instance_count en cero (0):

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  scaling {
    scaling_mode = "MANUAL"
    manual_instance_count = "0"
  }
}

Reemplaza lo siguiente:

  • SERVICE_NAME: el nombre de tu servicio de Cloud Run
  • REGION: La Google Cloud región. Por ejemplo, europe-west1
  • 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 debe estar creado. La URL sigue el formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Ejemplo de ajuste de escala según los programas

Un caso de uso común del ajuste de escala manual es cambiar el recuento de instancias según un programa predefinido. En este ejemplo, usamos Cloud Scheduler para programar dos trabajos, cada uno de los cuales invoca la API de Cloud Run Admin para ajustar la escala de la cantidad de instancias. El primer trabajo de Cloud Scheduler establece que el servicio se ajuste manualmente a una cantidad especificada de instancias durante el horario de atención (de 9 a.m. a 5 p.m., de lunes a viernes). El segundo trabajo establece que el servicio se reduzca a una cantidad especificada de instancias durante el horario no laboral.

En este ejemplo, usamos la guía de inicio rápido de Cloud Run para simplificar, pero puedes usar el servicio que elijas.

Para configurar el ajuste de escala manual según los programas, haz lo siguiente:

  1. Implementa tu servicio con el siguiente comando:

    gcloud run deploy SERVICE \
       --image=us-docker.pkg.dev/cloudrun/container/hello \
       --region=REGION \
       --project PROJECT_ID

    Reemplaza lo siguiente:

    • SERVICE: el nombre del servicio de Cloud Run
    • REGION: la región en la que se implementa el servicio de Cloud Run
    • PROJECT_ID: Es el Google Cloud ID del proyecto de
  2. Configura tu servicio para el ajuste de escala manual a 10 instancias con el siguiente comando:

    gcloud run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. Crea un trabajo de Cloud Scheduler que se ajuste manualmente a una cantidad especificada de instancias de servicio durante el horario de atención:

    gcloud scheduler jobs create http hello-start-instances \
      --location=REGION \
      --schedule="0 9 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Reemplaza lo siguiente:

    • REGION: la región en la que se implementa el servicio de Cloud Run
    • PROJECT_ID: Es el Google Cloud ID del proyecto de
    • INSTANCE_COUNT: la cantidad de instancias a las que deseas ajustar la escala, por ejemplo, 10.
    • PROJECT_NUMBER: Es el número del Google Cloud proyecto.

    Este comando crea un trabajo de Cloud Scheduler que realiza una llamada HTTP a la API de Cloud Run Admin y establece la cantidad de instancias en la cantidad que especificas. En el ejemplo, se usa la cuenta de servicio predeterminada de Compute Engine PROJECT_NUMBER-compute@developer.gserviceaccount.com para los trabajos de Cloud Scheduler. Puedes usar cualquier cuenta de servicio que tenga permisos para actualizar los servicios de Cloud Run.

  4. Crea un trabajo de Cloud Scheduler que reduzca manualmente las instancias de servicio durante el horario no laboral:

    gcloud scheduler jobs create http hello-stop-instances \
      --location=REGION \
      --schedule="0 17 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Reemplaza lo siguiente:

    • REGION: la región en la que se implementa el servicio de Cloud Run
    • PROJECT_ID: Es el Google Cloud ID del proyecto de
    • INSTANCE_COUNT: la cantidad de instancias a las que deseas ajustar la escala Para inhabilitar el servicio, configura este parámetro en 0.
    • PROJECT_NUMBER: Es el número del Google Cloud proyecto.

    Este comando crea un trabajo de Cloud Scheduler que realiza una llamada HTTP a la API de Cloud Run Admin y establece las instancias de ajuste de escala manual en la cantidad de instancias que especificaste. Si configuras las instancias en cero, se inhabilita el servicio, pero no los trabajos de Cloud Scheduler. Esos trabajos continúan ejecutándose y restablecerán (y volverán a habilitar) el servicio a una cantidad mayor de instancias según lo programado.