El escalamiento manual te permite establecer un recuento de instancias específico para tu servicio de Cloud Run, independientemente del tráfico o el uso, y sin volver a implementarlo. También puedes usarla para implementar tu propia lógica de escalamiento desde un sistema externo, como cambiar el recuento de instancias según un programa. Para ver un ejemplo, consulta Escalamiento basado en programas.
De forma predeterminada, Cloud Run escala horizontalmente de forma automática a una cantidad máxima de instancias especificada o predeterminada según el tráfico, la CPU o tus propios objetivos de uso de CPU o simultaneidad personalizados. El ajuste de escala manual anula este comportamiento cuando necesitas una cantidad fija de instancias.
Configuración mínima y máxima a nivel de revisión y escalamiento manual
Si configuras tu servicio para que se escale de forma manual, se ignorará cualquier configuración de instancias mínimas y máximas a nivel de revisión.
Divisiones de tráfico para el escalamiento manual
En la siguiente lista, se describe cómo se asignan las instancias cuando se divide el tráfico con el escalamiento manual. Esto incluye el comportamiento de las revisiones de solo 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 manual de instancias, algunas de las revisiones no tendrán instancias. El tráfico que se envíe a esas revisiones recibirá 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, haz lo siguiente:
- Si se establecen las instancias mínimas a nivel de revisión, se iniciará la cantidad especificada de instancias, pero no se considerará en el recuento total de instancias manuales del servicio. La revisión no se ajustará automáticamente.
- Si no se configuran las instancias mínimas a nivel de la revisión, esta se escala horizontalmente a una instancia como máximo, en respuesta al tráfico enviado a la URL de la etiqueta.
Comportamiento de la facturación con el ajuste de escala manual
Cuando usas el escalamiento manual, el comportamiento de facturación es similar al que se produce cuando usas la función de instancias mínimas.
Es decir, con el escalamiento manual y la facturación basada en instancias, las instancias inactivas con escalamiento manual se facturan como instancias activas.
Si usas el escalamiento manual con la facturación basada en solicitudes, las instancias inactivas escaladas de forma manual se facturan como instancias mínimas inactivas. Para obtener detalles completos sobre la facturación, consulta la página de precios.
Roles obligatorios
Para obtener los permisos que necesitas para implementar servicios de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- Desarrollador de Cloud Run (
roles/run.developer) en el servicio de Cloud Run - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) en la identidad del servicio - Lector de Artifact Registry (
roles/artifactregistry.reader) en el repositorio de Artifact Registry de la imagen de contenedor implementada (si corresponde)
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 las APIs deGoogle Cloud , 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 los permisos de implementación y cómo administrar el acceso.
Configura el escalamiento manual
Puedes configurar el modo de escalamiento con la consola de Google Cloud , Google Cloud CLI, el archivo YAML o la API cuando creas un servicio o actualizas una revisión:
Console
En la consola Google Cloud , ve a Cloud Run:
Selecciona Servicios en el menú de navegación de Cloud Run:
Si configuras un servicio nuevo, haz clic en Implementar contenedor y completa la página de configuración inicial del servicio.
Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en la pestaña Ajuste de escala.
Haz clic en Ajuste de escala manual.
Especifica la cantidad de instancias de contenedor para el servicio en el campo Cantidad de instancias.
Haz clic en Crear para un servicio nuevo. Haz clic en Ver diferencia y volver a implementar y, luego, en Implementar cambios para un servicio existente.
gcloud
Para especificar el escalamiento de un servicio nuevo, usa el comando deploy:
gcloud run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
Reemplaza lo siguiente:
- SERVICE: Es el nombre de tu servicio.
- INSTANCE_COUNT: Es la cantidad de instancias para el servicio.
Esto configura el servicio para el escalado manual. Especifica un valor de
0para inhabilitar el servicio. Especifica un valor deautopara usar el comportamiento de ajuste de escala automático predeterminado de Cloud Run. IMAGE_URL: una referencia a la imagen de 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 deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Especifica el escalamiento de un servicio existente con el siguiente comando de actualización:
gcloud run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
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
Actualiza los atributos
scalingModeymanualInstanceCount: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:
manualpara el escalamiento manual oautomaticpara el comportamiento predeterminado de ajuste de escala automático de Cloud Run. - INSTANCE_COUNT: Es la cantidad de instancias que escalas de forma manual para el servicio. Especifica un valor de
0para inhabilitar el servicio.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
El comando
gcloud run services replaceusa de forma predeterminada el archivoservice.yamlsi está presente.
API de REST
Para actualizar la cantidad de instancias de un servicio determinado en el escalamiento 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 congcloud 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: Es la cantidad de instancias para el servicio.
Esto configura el servicio para el escalado manual. Especifica un valor de
0para inhabilitar el servicio. - SERVICE: El nombre del servicio
- REGION: Es la región de Google Cloud en la que se implementa el servicio.
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
Para cambiar el modo de escalamiento de manual a automático, envía una solicitud PATCH al extremo service de la API de Cloud Run Admin y establece el campo scalingMode en 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 recursogoogle_cloud_run_v2_service
en tu 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 de 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 deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- INSTANCE_COUNT: Es la cantidad de instancias que escalas de forma manual 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 escalamiento de tu servicio
Para ver las instancias de configuración de escalamiento de tu servicio de Cloud Run, sigue estos pasos:
Console
En la consola de Google Cloud , ve a la página Servicios de Cloud Run:
Haz clic en el servicio que te interesa para abrir el panel Detalles del servicio.
Haz clic en la pestaña Ajuste de escala para encontrar la configuración de ajuste de escala.
gcloud
Usa el siguiente comando para ver la configuración de escalamiento actual del servicio:
gcloud run services describe SERVICE
SERVICE por el nombre del servicio
Busca el campo Scaling: Manual (Instances: ) cerca de la parte superior del texto
que se muestra desde 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 escalamiento se encuentra en los atributos scalingMode y
manualInstanceCount.
Inhabilitar un servicio
Cuando inhabilitas un servicio, se permite que se completen todas las solicitudes que se están procesando en ese momento.
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 servicios 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 establecer el escalamiento en cero. Puedes inhabilitar un servicio con la consola de Google Cloud , Google Cloud CLI, el archivo YAML o la API:
Console
En la consola de Google Cloud , ve a la página Servicios de Cloud Run:
Haz clic en el servicio que deseas inhabilitar para mostrar su panel de detalles y, luego, en la pestaña Escalamiento.
Selecciona Escalamiento manual.
Ingresa el valor
0(cero) en el campo etiquetado como Cantidad de instancias.Haz clic en Ver diferencias e implementar y, luego, en Implementar cambios.
gcloud
Para inhabilitar un servicio, usa el siguiente comando para establecer el escalamiento en cero:
gcloud run services update SERVICE --scaling=0
SERVICE por el nombre del servicio
YAML
Descarga la configuración YAML del servicio:
gcloud run services describe SERVICE --format export > service.yaml
Establece el atributo
manualInstanceCounten cero (0):apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
SERVICE por el nombre de tu servicio de Cloud Run.
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 congcloud 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: Es la región de Google Cloud en la que se implementa el servicio.
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
Terraform
Para inhabilitar un servicio, establece 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 de 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 deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Ejemplo de escalamiento basado en programas
Un caso de uso común del escalamiento 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 escalar la cantidad de instancias. El primer trabajo de Cloud Scheduler configura el servicio para que escale de forma manual 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 configura el servicio para que reduzca la escala verticalmente a una cantidad especificada de instancias durante el horario sin restricciones.
En este ejemplo, usamos la guía de inicio rápido de Cloud Run para simplificar, pero puedes usar el servicio que prefieras.
Para configurar el ajuste de escala manual basado en programas, haz lo siguiente:
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 es 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 ID del proyecto de Google Cloud .
Configura tu servicio para que se ajuste de forma manual a 10 instancias con el siguiente comando:
gcloud run services update SERVICE \ --region=REGION \ --scaling=10
Crea un trabajo de Cloud Scheduler que escale de forma manual 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 ID del proyecto de Google Cloud .
- INSTANCE_COUNT: Es la cantidad de instancias a las que deseas escalar, por ejemplo,
10. - PROJECT_NUMBER: Es el número del proyecto de Google Cloud .
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 que especifiques. En el ejemplo, se usa la cuenta de servicio predeterminada de Compute Engine
PROJECT_NUMBER-compute@developer.gserviceaccount.compara los trabajos de Cloud Scheduler. Puedes usar cualquier cuenta de servicio que tenga permisos para actualizar los servicios de Cloud Run.Crea un trabajo de Cloud Scheduler que reduzca verticalmente la escala de las instancias de servicio de forma manual durante el horario sin restricciones:
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 ID del proyecto de Google Cloud .
- INSTANCE_COUNT: Es la cantidad de instancias a las que deseas escalar.
Para inhabilitar el servicio, establece este valor en
0. - PROJECT_NUMBER: Es el número del proyecto de Google Cloud .
Este comando crea un trabajo de Cloud Scheduler que realiza una llamada HTTP a la API de Cloud Run Admin, lo que establece las instancias de escalamiento manual en la cantidad de instancias que especificaste. Si estableces las instancias en cero, se inhabilita el servicio, pero no los trabajos de Cloud Scheduler. Esos trabajos se siguen ejecutando y restablecerán (y volverán a habilitar) el servicio a una mayor cantidad de instancias según lo programado.