Implementa una herramienta de escalador automático por proyecto o centralizado para Cloud Spanner


En este instructivo, se muestra cómo configurar la infraestructura de la herramienta Escalador automático para Cloud Spanner. En este instructivo, se muestran dos formas de configurar la infraestructura según tus requisitos:

  • Una topología de implementación por proyecto. Recomendamos esta topología para equipos independientes que desean administrar su propia infraestructura y configuración del escalador automático. Una topología de implementación por proyecto también es un buen punto de partida para probar las capacidades del escalador automático.
  • Una topología de implementación centralizada. Recomendamos esta topología para los equipos que administran la configuración y la infraestructura de una o más instancias de Spanner, a la vez que mantienen los componentes y la configuración para el escalador automático en un lugar central. En la topología centralizada, además de un proyecto de escalador automático, debes configurar un segundo proyecto, que en este instructivo se denomina proyecto de aplicación. El proyecto de aplicación contiene los recursos de la aplicación, incluido Cloud Spanner. En este instructivo, configurarás y habilitarás la facturación y las API para estos dos proyectos por separado.

Este documento forma parte de una serie:

Esta serie está dirigida a equipos de TI, ingeniería de confiabilidad de sitios (SRE) y operaciones que desean reducir la sobrecarga operativa y optimizar el costo de las implementaciones de Cloud Spanner.

Objetivos

  • Implementar el escalador automático con una topología de implementación centralizada o por proyecto.
  • Importar instancias existentes de Cloud Spanner al estado de Terraform.
  • Configurar el escalador automático.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Los costos asociados con la operación de los componentes del escalador automático cuando implementas este instructivo deben ser cero o cerca de cero. Sin embargo, esta estimación no incluye los costos de las instancias de Cloud Spanner. Para ver un ejemplo de cómo calcular los costos de las instancias de Cloud Spanner, consulta Ajuste de escala automático en Cloud Spanner.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

  2. En Cloud Shell, clona el repositorio de GitHub:

    git clone https://github.com/cloudspannerecosystem/autoscaler
    
  3. Exporta las variables de los directorios de trabajo en los que residen los archivos de configuración de Terraform para cada topología:

    export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/per-project"
    

Prepara el proyecto del escalador automático

En esta sección, prepararás tu proyecto de escalador automático para la implementación.

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  3. Habilita las API de Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Cloud Spanner, Pub/Sub, Cloud Functions, Cloud Build, and Cloud Scheduler.

    Habilita las API

  4. En Cloud Shell, configura las variables de entorno con el ID de tu proyecto de Escalador automático:

    export PROJECT_ID=INSERT_YOUR_PROJECT_ID
    gcloud config set project "${PROJECT_ID}"
    
  5. Configura la región y zona y la ubicación de App Engine para Cloud Scheduler y Firestore para la infraestructura del escalador automático:

    export REGION=us-central1
    export ZONE=us-central1-c
    export APP_ENGINE_LOCATION=us-central
    
  6. Crea una cuenta de servicio para que Terraform use a fin de crear todos los recursos en tu infraestructura:

    gcloud iam service-accounts create terraformer --display-name "Terraform service account"
    
  7. Otorga la función de propietario del proyecto (roles/owner) a la cuenta de servicio:

    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    
  8. Crea un archivo de claves de la cuenta de servicio:

    gcloud iam service-accounts keys create \
        --iam-account "terraformer@${PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
    
  9. Si tu proyecto aún no tiene una instancia de Firestore, crea una:

    gcloud app create --region="${APP_ENGINE_LOCATION}"
    gcloud alpha firestore databases create --region="${APP_ENGINE_LOCATION}"
    

Prepara el proyecto de la Aplicación

Si estás implementando el escalador automático en modo por proyecto, puedes pasar a la implementación del escalador automático.

En la topología de implementación centralizada, todos los componentes del escalador automático residen en el mismo proyecto. Las instancias de Spanner pueden ubicarse en diferentes proyectos.

En esta sección, configurarás el proyecto de aplicación en el que reside tu instancia de Spanner. La instancia de Spanner entrega una o más aplicaciones específicas. En este instructivo, se supone que los equipos responsables de estas aplicaciones son independientes del equipo responsable de la infraestructura y la configuración del escalador automático.

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  3. Habilita la API de Spanner .

    Habilita la API

  4. En Cloud Shell, configura las variables de entorno.

    export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
    

    Reemplaza INSERT_YOUR_APP_PROJECT_ID por el ID del proyecto de aplicación.

  5. Otorga a la cuenta de servicio terraformer que creaste la función de propietario (roles/owner) en el proyecto de aplicación:

    gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \
        --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    

    Otorga esta función a la cuenta de servicio le permite crear recursos.

  6. Configura el ID del proyecto de aplicación en la variable de entorno de Terraform correspondiente:

    export TF_VAR_app_project_id="${APP_PROJECT_ID}"
    

Implementa el escalador automático

En esta sección, implementarás los componentes que conforman el escalador automático mediante módulos de Terraform preconfigurados. Los archivos de Terraform que definen estos módulos están en los siguientes directorios:

Directorio Contenido del directorio
terraform/ Configuración de nivel superior, que incluye cada una de las opciones de implementación y los módulos reutilizables.
terraform/cloud-functions/per-project/ Instrucciones para la opción de implementación por proyecto
terraform/modules/autoscaler-functions/ Configuración de las funciones de Cloud Functions de escalamiento y sondeo y de Pub/Sub
terraform/modules/scheduler/ Configuración de Cloud Scheduler para activar el sondeo.
terraform/modules/spanner/ Configuración de la base de datos de Cloud Spanner
terraform/cloud-functions/centralized/ Instrucciones para la opción de implementación centralizada.
  1. En Cloud Shell, configura el ID del proyecto, la región y la zona en las variables de entorno de Terraform correspondientes:

    export TF_VAR_project_id="${PROJECT_ID}"
    export TF_VAR_region="${REGION}"
    export TF_VAR_zone="${ZONE}"
    
  2. En este paso, configurarás una instancia existente para que el escalador automático la supervise o cree y configure una instancia nueva.

    Si tienes una instancia de Spanner existente, configura el nombre de tu instancia en la siguiente variable:

    export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
    

    Si deseas crear una nueva instancia de Spanner para probar el escalador automático, configura la siguiente variable:

    export TF_VAR_terraform_spanner=true
    

    La instancia de Spanner que crea Terraform se llama autoscale-test.

    Si quieres obtener más información para configurar Terraform para administrar tu instancia de Spanner, consulta la sección sobre cómo importar tus instancias de Spanner.

  3. Cambie su directorio de trabajo a directorio de Terraform por proyecto:

    cd "${AUTOSCALER_DIR}"
    terraform init
    

    Este comando también inicializa el directorio de Terraform por proyecto.

  4. Importa la aplicación de App Engine existente al estado de Terraform:

    terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
    
  5. Crea la infraestructura del escalador automático:

    terraform apply -parallelism=2
    

    Verás el siguiente mensaje en el que te solicita que verifiques que la lista de recursos que Terraform cree sea correcta:

       Do you want to perform these actions?
       Terraform will perform the actions described above.
       Only 'yes' will be accepted to approve.
       Enter a value:
       

    Después de verificar los recursos, escribe yes cuando se te solicite.

    Cuando ejecutes este comando en Cloud Shell, es posible que encuentres el siguiente mensaje de error:

    "Error: cannot assign requested address"

    Este error es un problema conocido en el proveedor de Terraform de Google. En este caso, vuelve a intentarlo con el siguiente comando: terraform apply -parallelism=1.

Importa tus instancias de Spanner

Si tienes instancias de Spanner existentes que deseas importar para que Terraform las administre, sigue las instrucciones de esta sección. De lo contrario, ve a Configura el escalador automático.

  1. En Cloud Shell, enumera tus instancias de Spanner:

    gcloud spanner instances list
    
  2. Establezca la siguiente variable con el nombre de instancia en el que desea realizar el ajuste de escala automático:

    SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
    
  3. Crea un archivo de configuración de Terraform con un recurso google_spanner_instance vacío:

    echo "resource \"google_spanner_instance\" \"${SPANNER_INSTANCE_NAME}\" {}" > "${SPANNER_INSTANCE_NAME}.tf"
    
  4. Importa la instancia de Spanner al estado de Terraform:

    terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
    
  5. Cuando se complete la importación, actualiza el archivo de configuración de Terraform para tu instancia con el atributo real de instancia:

    terraform state show -no-color "google_spanner_instance.${SPANNER_INSTANCE_NAME}" \
        | grep -vE "(id|num_nodes|state|timeouts).*(=|\{)" \
        > "${SPANNER_INSTANCE_NAME}.tf"
    

    Si tienes instancias adicionales de Spanner para importar, repite el proceso de importación.

Configura el escalador automático

Después de implementar el escalador automático, debes configurar sus parámetros.

  1. En la consola de Google Cloud, ve a la página de Cloud Scheduler.

    Ir a Cloud Scheduler

  2. Selecciona la casilla de verificación junto al trabajo poll-main-instance-metrics que creó la implementación del escalador automático.

  3. Haz clic en Edit.

  4. Modifica los parámetros del escalador automático que se muestra en el campo de carga útil.

    A continuación, se muestra un ejemplo de una carga útil:

        [
            {
                "projectId": "my-spanner-project",
                "instanceId": "spanner1",
                "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling",
                "units": "NODES",
                "minSize": 1,
                "maxSize": 3
            },{
                "projectId": "different-project",
                "instanceId": "another-spanner1",
                "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling",
                "units": "PROCESSING_UNITS",
                "minSize": 500,
                "maxSize": 3000,
                "scalingMethod": "DIRECT"
            }
        ]
       

    La carga útil se define con un array de JSON. Cada elemento del array representa una instancia de Spanner que comparte el mismo programa de trabajo del escalador automático.

    Para obtener más detalles sobre los parámetros y sus valores predeterminados, consulta la README para el componente de sondeo.

  5. Para guardar los cambios, haz clic en Actualizar.

    El escalador automático ya está configurado y listo para comenzar a supervisar y escalar tus instancias en la próxima ejecución de trabajo programado.

    Si hay errores de sintaxis en la carga útil de JSON, puedes examinarlos en la consola de Google Cloud, en la página Explorador de registros, como entradas de registro de la función tf-poller-function.

    Ir al Explorador de registros

    Se muestra un ejemplo de un error que podrías ver, a continuación:

    SyntaxError: Unexpected token errortext in JSON at position 15 JSON.parse

    Para evitar errores de sintaxis, usa un editor que pueda cambiar el formato y validar JSON.

Supervisa el escalador automático

En este paso, configurarás la supervisión en Cloud Functions de sondeo y escalamiento.

  1. En la consola de Google Cloud, abre la página Explorador de registros.

    Ir al Explorador de registros

  2. Haz clic en Vista previa de consulta y, luego, ingresa el siguiente filtro en Compilador de consultas:

    resource.type="cloud_function"
    resource.labels.function_name=~"tf-.*-function"
    
  3. Haga clic en Ejecutar consulta.

    En los resultados de la consulta, puedes ver todos los mensajes de las funciones del escalador automático. Como la aplicación de sondeo solo se ejecuta cada 2 minutos, es posible que debas volver a ejecutar la consulta para recibir los mensajes de registro.

  4. Para ver solo los mensajes de las Cloud Functions para escalar, haz clic en el cuadro Vista previa de consulta y reemplaza el filtro anterior en el cuadro de texto Compilador de consultas con lo siguiente:

    resource.type="cloud_function"
    resource.labels.function_name="tf-scaler-function"
    
  5. Haga clic en Ejecutar consulta.

    En Resultados de la consulta, debido al filtro aplicado a la carga útil de texto, solo se ven los mensajes de la función Escalador que se relaciona con las sugerencias y las decisiones de escalamiento.

    Mediante el uso de filtros de consulta o filtros similares, puedes crear métricas basadas en registros. Estas métricas son útiles para funciones como registrar la frecuencia de los eventos de ajuste de escala automático o en los gráficos de Cloud Monitoring y las políticas de alertas.

Prueba el escalador automático

En esta sección, verificarás la operación del Escalador automático si cambias el tamaño mínimo de la instancia y supervisas los registros.

Cuando implementas el escalador automático con una base de datos de prueba, este se configura para usar NODES como la unidad de capacidad de procesamiento. Para verificar si la herramienta funciona, cambia la configuración del tamaño mínimo (minSize) a  . Si la herramienta se ejecuta como se espera, la instancia de Cloud Spanner escala horizontalmente a 2 nodos. Si usaste una base de datos existente para este instructivo, es posible que veas valores diferentes.

  1. En la consola de Google Cloud, ve a la página Cloud Scheduler.

    Ir a Cloud Scheduler

  2. Selecciona la casilla de verificación junto al trabajo poll-main-instance-metrics que creó la implementación del escalador automático.

  3. Haz clic en Editar.

  4. En el campo Carga útil del trabajo, cambia el valor minSize de 1 a 2:

    "minSize": 2
    
  5. Para guardar los cambios, haz clic en Actualizar.

  6. Ir a la página Explorador de registros.

    Abre el Explorador de registros

  7. Haz clic en Vista previa de consulta y, luego, ingresa el siguiente filtro en Compilador de consultas:

    resource.type="cloud_function"
    resource.labels.function_name="tf-scaler-function"
    
  8. Haga clic en Ejecutar consulta.

  9. Haz clic en Pasar a los más recientes hasta que vea el siguiente mensaje de registro:

    Scaling spanner instance to 2 NODES

  10. Para verificar que Cloud Spanner haya escalado horizontalmente a 2 nodos, en la consola de Google Cloud, ve a la página de la consola de Cloud Spanner.

    Ir a Cloud Spanner

  11. Haz clic en la instancia autoscale-test.

    En descripción general, verifica que la cantidad de nodos sea ahora de 2. En esta prueba rápida, se demuestra un evento de escalamiento horizontal mediante la modificación de los parámetros del escalador automático. Puedes realizar una prueba de carga con una herramienta como YCSB para simular el escalador automático que activa un evento de escalamiento en función del uso.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?