Измените класс экземпляра бэкэнда программно в Google App Engine
Я использую серверные экземпляры для проекта Google App Engine. (Экземпляры внешнего интерфейса не могут обрабатывать запросы более 60 секунд - мне нужно больше времени.)
Я выбрал тип экземпляра B4, потому что иногда нагрузка высокая. Тем не менее, в определенные моменты времени (скажем, с 2:00 до 7:00) нагрузка настолько мала, что наличие экземпляра B4 является излишним.
Я хочу сделать работу cron, которая меняет тип этого экземпляра на B2 в определенное время и обратно на B4 в другое время, чтобы сэкономить средства.
Однако, глядя на API модулей, я не смог найти способ сделать это.
Так как я могу это сделать?
Редактировать после получения ответа от Рамиеля
В конце я использовал Admin API следующим образом:
# Construct the api client
cred = GoogleCredentials.get_application_default()
svc = discovery.build('appengine', 'v1', credentials=cred)
vapi = svc.apps().services().versions()
# get list of versions
o = vapi.list(appsId=app_identity.get_application_id(), servicesId=modules.get_current_module_name()).execute()
# PATCH all SERVING versions with the new instanceClass
for v in o['versions']:
if v['servingStatus'] == 'SERVING':
result = vapi.patch(
appsId=app_identity.get_application_id(),
servicesId=modules.get_current_module_name(),
versionsId=v['id'],
updateMask='instanceClass',
body={
'instanceClass': instanceClass
}
).execute()
3 ответа
Оформить заказ конечных точек admin-api
https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions/patch
Если по какой-то причине это не работает, вы также можете развернуть несколько версий приложения с различными настройками экземпляра / масштабирования и программно переключать их с помощью start_version из API модулей
Кстати, если вы переключитесь на ручное масштабирование, у вас нет предела 60 с
Очередь заданий можно запустить за 10 минут, ознакомьтесь с документом
Это может быть не то, что вы ищете, но это возможный способ достижения того, что вы хотите.
Настройте систему на движке контейнера или что-то в этом роде, чтобы автоматически извлекать последний код из вашего репозитория, автоматически настраивать тип экземпляра и автоматически выполнять повторное развертывание. Вы можете заставить его развертывать разные типы экземпляров в разное время. Новое перераспределение будет необходимо для каждого изменения в классе экземпляра, но теоретически это может быть полностью автоматизировано, так что это будет возможно.
Думал? Это возможное решение для вас?