Экземпляр Cloud SQL не останавливается с помощью Cloud Scheduler

#python #sql #google-cloud-platform #google-cloud-functions #google-cloud-scheduler

# #python #sql #google-облачная платформа #google-cloud-функции #google-cloud-scheduler

Вопрос:

Экземпляр облачного SQL не останавливается с помощью облачного расписания после выполнения этих шагов:

  1. Создайте раздел / подраздел, который должен запускать функцию cloud.
  2. Разверните облачную функцию, используя раздел, уже созданный на шаге 1, с приведенным ниже файлом кода python (3.8) и требованиями. (Точка входа: start_stop )
  3. Создайте задание cloud scheduler для регулярного запуска облачной функции с темой, созданной на шаге 1. Полезная нагрузка устанавливается в start [CloudSQL instance name] или stop [CloudSQL instance name] для запуска или остановки указанного экземпляра

Main.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 = 'projectID'

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()
  j = response["settings"]
  settingsVersion = int(j["settingsVersion"])
  
  dbinstancebody = {
    "settings": {
      "settingsVersion": settingsVersion,
      "activationPolicy": activation_policy
    }
  }

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

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

Requirements.txt

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

Когда я нажимаю RUN NOW кнопку в планировщике остановки, он выполняется успешно, но когда я перехожу к экземпляру SQL, он не останавливается.
Может кто-нибудь заметить, чего мне не хватает? Если вам нужна более подробная информация, просто дайте мне знать, пожалуйста, я только начал с GCP. 🙂

Ответ №1:

Конфигурация уровня отсутствовала в теле, отправленном в GCP api:

 dbinstancebody = {
    "settings": {
      "settingsVersion": settingsVersion,
      "tier": "db-custom-2-13312"
      "activationPolicy": activation_policy
    }
}
 

Если вы нажмете на развернутую функцию, вы увидите все подробности (вместе с графиками), но в конце также отображаются ошибки. (Мой компьютер не поместился на весь экран, поэтому я заметил этот раздел позже 😅)