Измените класс экземпляра бэкэнда программно в 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 минут, ознакомьтесь с документом

Это может быть не то, что вы ищете, но это возможный способ достижения того, что вы хотите.

Настройте систему на движке контейнера или что-то в этом роде, чтобы автоматически извлекать последний код из вашего репозитория, автоматически настраивать тип экземпляра и автоматически выполнять повторное развертывание. Вы можете заставить его развертывать разные типы экземпляров в разное время. Новое перераспределение будет необходимо для каждого изменения в классе экземпляра, но теоретически это может быть полностью автоматизировано, так что это будет возможно.

Думал? Это возможное решение для вас?

Другие вопросы по тегам