#python #sql #google-cloud-platform #google-cloud-functions #google-cloud-scheduler
# #python #sql #google-облачная платформа #google-cloud-функции #google-cloud-scheduler
Вопрос:
Экземпляр облачного SQL не останавливается с помощью облачного расписания после выполнения этих шагов:
- Создайте раздел / подраздел, который должен запускать функцию cloud.
- Разверните облачную функцию, используя раздел, уже созданный на шаге 1, с приведенным ниже файлом кода python (3.8) и требованиями. (Точка входа:
start_stop
) - Создайте задание 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
}
}
Если вы нажмете на развернутую функцию, вы увидите все подробности (вместе с графиками), но в конце также отображаются ошибки. (Мой компьютер не поместился на весь экран, поэтому я заметил этот раздел позже 😅)