Saltar al contenido

¿Cómo ejecutar Google Cloud SQL solo cuando lo necesito?

Al fin luego de tanto trabajar ya hallamos el arreglo de este apuro que tantos usuarios de nuestro sitio web tienen. Si quieres compartir algún detalle no dejes de dejar tu información.

Solución:

No se trata tanto del grupo como de la naturaleza de Cloud SQL. A diferencia de App Engine, las instancias de Cloud SQL son siempre arriba. Aprendí esto de la manera más dura un sábado por la mañana cuando había estado fuera del proyecto durante una semana. 🙂

No hay forma de desactivarlos cuando no se están utilizando, a menos que detenga explícitamente el servicio.

no hay manera de calendario una parada de servicio, al menos dentro del SDK de GCP. Siempre puede escribir un trabajo cron, o algo así, que se ejecuta un poco gcloud sql instances patch [INSTANCE_NAME] --activation-policy NEVER comando, por ejemplo, a las 6:00 p. m., hora local, de lunes a viernes. Era demasiado perezoso para hacer eso, así que configuré un recordatorio de calendario para mí mismo para cerrar mi instancia al final de mi jornada laboral.

Aquí está la página de inicio/detención/reinicio de la instancia de MySQL para los documentos del SDK actual: https://cloud.google.com/sql/docs/mysql/start-stop-restart-instance

En una nota adicional, hay una “Solicitud de función” en curso en la plataforma GCP para iniciar o detener Cloud SQL (2.ª generación), según el tráfico también. También puede visitar el enlace y proporcionar sus valiosas sugerencias/comentarios allí también.

Tomé la idea de @ingernet y creé una función en la nube que inicia/detiene la instancia de CloudSQL cuando es necesario. Se puede activar a través de un trabajo programado para que pueda definir cuándo se activa o desactiva la instancia.

Los detalles están aquí en este Github Gist (inspiración tomada de aquí). Descargo de responsabilidad: No soy un desarrollador de python, por lo que puede haber problemas en el código, pero al final funciona.


Básicamente necesitas seguir estos pasos:

  1. Cree un tema de pub/sub que se utilizará para activar la función de nube.
  2. Cree la función de nube y copie el código a continuación.
    1. Asegúrese de configurar el ID de proyecto correcto en la línea 8.
    2. Establezca el activador en Pub/Sub y elija el tema creado en el paso 1.
  3. Cree un trabajo del programador de la nube para activar la función de la nube de forma regular.
    1. Elija la frecuencia con la que desea que se active la función de la nube.
    2. Establezca el objetivo en Pub/Sub y defina el tema creado en el paso 1.
    3. La carga útil debe establecerse en start [CloudSQL instance name] o stop [CloudSQL instance name] para iniciar o detener la instancia especificada (p. ej. start my_cloudsql_instance iniciará la instancia de CloudSQL con el nombre my_cloudsql_instance)

Principal.py:

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
import base64
from pprint import pprint

credentials = GoogleCredentials.get_application_default()
service = discovery.build('sqladmin', 'v1beta4', credentials=credentials, cache_discovery=False)
project = 'INSERT PROJECT_ID HERE'

def start_stop(event, context):
  print(event)
  pubsub_message = base64.b64decode(event['data']).decode('utf-8')
  print(pubsub_message)
  command, instance_name = pubsub_message.split(' ', 1)

  if command == 'start':
    start(instance_name)
  elif command == 'stop':
    stop(instance_name)
  else:
    print("unknown command " + command)

def start(instance_name):
  print("starting " + instance_name)
  patch(instance_name, "ALWAYS")

def stop(instance_name):
  print("stopping " + instance_name)
  patch(instance_name, "NEVER")

def patch(instance, activation_policy):
  request = service.instances().get(project=project, instance=instance)
  response = request.execute()

  dbinstancebody = 
    "settings": 
      "settingsVersion": response["settings"]["settingsVersion"],
      "activationPolicy": activation_policy
    
  

  request = service.instances().patch(
    project=project,
    instance=instance,
    body=dbinstancebody)
  response = request.execute()
  pprint(response)

Requisitos.txt

google-api-python-client==1.10.0
google-auth-httplib2==0.0.4
google-auth==1.19.2
oauth2client==4.1.3

Puntuaciones y reseñas

Al final de la artículo puedes encontrar las anotaciones de otros creadores, tú todavía eres capaz dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *