Цены на Google App Engine Flexible env, урок за 500 долларов

Я следовал учебному пособию по Nodejs для App Engine Flexible @: https://cloud.google.com/nodejs/getting-started/hello-world

Успешно развернув и протестировав учебник, я немного изменил код для эксперимента и успешно развернул его... и затем оставил его работающим, поскольку это была среда тестирования (не общедоступная).

Через месяц я получил от Google счет на сумму более 370 долларов!

В деталях сделки я вижу следующее:

1–31 октября 2017 г. ОЗУ экземпляра Flex App Engine: 5948,774 гибибайт-часа ([MYPROJECT]) $ 42,24

1–31 октября 2017 г. Базовые часы экземпляра App Engine Flex: 5948,774 часа ([MYPROJECT]) $ 312,91

Как этой среде тестирования с почти 0 запросами потребовалось около 6000 часов ресурсов? В худшем случае я бы предположил, что 720 часов работы в течение полного рабочего дня в течение месяца при $ 0,05 в час обойдутся мне в ~ 40 долларов. https://cloud.google.com/appengine/pricing

Может ли кто-нибудь помочь пролить свет на это? Я не смог выяснить, зачем было так много ресурсов?

Спасибо за помощь!

Для получения дополнительных данных это трафик за последний месяц (в основном 0): Traffic Data

И данные экземпляра Instance Data

ОБНОВЛЕНИЕ: обратите внимание, что я внес одну модификацию в package.json: я добавил nodemon в качестве зависимости и добавил его как часть моего сценария "nmp start". Хотя я сомневаюсь, что это объясняет 6000 часов ресурсов:

  "scripts": {
    "deploy": "gcloud app deploy",
    "start": "nodemon app.js",
    "dev": "nodemon app js",
    "lint": "samples lint",
    "pretest": "npm run lint",
    "system-test": "samples test app",
    "test": "npm run system-test",
    "e2e-test": "samples test deploy"
  },

App.yaml (по умолчанию - без изменений из учебника)

runtime: nodejs
env: flex

Ответ 1

После нескольких встреч с Google, часов чтения блогов и просмотра отчетов я наконец-то (несколько) нашел объяснение тому, что произошло. Я опубликую это здесь со своими предложениями, чтобы другие люди также не стали жертвами этой проблемы.

Обратите внимание, что это может показаться очевидным для некоторых, но, как новый пользователь GAE, все это было совершенно новым для меня.

Короче говоря, при развертывании в GAE и использовании следующей команды " $ gcloud app deploy ", она создает новую версию и устанавливает ее в качестве версии по умолчанию, но также и, что более важно, она НЕ удаляет предыдущую версию, которая была развернута.

Дополнительную информацию о версиях и экземплярах можно найти здесь: https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine.

Так что в моем случае, не зная об этом, я создал несколько версий моего простого приложения для узлов. Эти версии все еще работают на случай, если нужно переключиться после ошибки. Но эти версии также требуют экземпляров, и по умолчанию, если это не указано в app.yaml, это 2 экземпляра.

Google говорит:

По умолчанию App Engine масштабирует количество экземпляров, работающих вверх и вниз, чтобы соответствовать нагрузке, обеспечивая постоянную производительность вашего приложения, минимизируя время простоя и, следовательно, снижая стоимость.

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

В итоге, следуя руководству и не закрывая проект, у меня было 4 версии, каждая с 2 экземплярами, работающими полный рабочий день в течение 1,5 месяцев, которые обслуживали 0 запросов и генерировали множество сообщений об ошибках, и это стоило мне 500 долларов.

РЕКОМЕНДАЦИИ ЕСЛИ ВЫ ХОТИТЕ ИСПОЛЬЗОВАТЬ GAE FLEX ENV:

  1. Прежде всего, настройте платежный бюджет и предупреждения, чтобы вы не удивились дорогостоящему счету, который автоматически списывается с вашей учетной записи: https://cloud.google.com/billing/docs/how-to/budgets

  2. В тестовой среде, скорее всего, вам не нужно несколько версий, поэтому при развертывании используйте следующую команду:
    $ gcloud app deploy --version v1

  3. Обновите ваш app.yaml, чтобы заставить только 1 экземпляр с минимальными ресурсами:

runtime: nodejs
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10
  1. Установить дневной лимит расходов

enter image description here

См. Этот пост в блоге для получения дополнительной информации: https://medium.com/google-cloud/three-simple-steps-to-save-costs-when-prototyping-with-app-engine-f flex-environment-104fc6736495

Я хотел бы, чтобы некоторые из этих шагов были включены в учебное пособие, чтобы защитить тех, кто пытается учиться и экспериментировать, но это не так.

Google App Engine Flex env может быть сложным, если вы не знаете всех этих деталей. Друг указал мне на Heroku, у которого есть как установленные цены, так и бесплатные/хобби. Я был в состоянии быстро выдвинуть новое приложение узла там, и это работало как очарование! https://www.heroku.com/pricing

Этот урок стоил мне всего 500 долларов, но я надеюсь, что это поможет другим, смотрящим на Google App Engine Flex Env.

Ответ 2

У нас был код, развернутый в GAE FE, абсолютно сумасшедший из-за каскадного экспоненциального сбоя (отклоненные электронные письма генерировали отклоненные электронные письма и т.д.), И мы НЕ могли отключить экземпляры GAE, которые были прослушены. После 4+ часов и 1M+ отправленных писем (Mailgun просто НЕ позволил бы нам отключить учетную запись. В нем говорилось: "Пожалуйста, подождите до 24 часов, чтобы изменение пароля вступило в силу", а отзыв ключей API ничего не сделал), виртуальная машина Redis была остановлена, база данных отключена, и весь код сайта уменьшен до одной статической страницы 503 "Down For Maintenance"), электронные письма продолжали отправляться.

Я определил, что GAE FE просто не завершает работу виртуальных машин с док-станцией или виртуальных машин с облачными вычислениями (redis), которые находятся под нагрузкой процессора. Возможно никогда! Как только мы фактически удалили виртуальную машину Compute (вместо того, чтобы "просто" ее остановить), электронные письма немедленно прекратились.

Но наша БД продолжала заполняться уведомлениями "не удалось отправить электронное письмо" в течение еще 2 часов, несмотря на то, что приложение GAE сообщило о 100% версий и экземпляров, которые были "остановлены". В итоге мне пришлось сменить пароль Google Cloud SQL.

Мы продолжали проверять счет, и 7 мошеннических экземпляров продолжали использовать ЦП, поэтому мы отменили карточку, использованную для этого аккаунта, и сайт, фактически, отключился, когда счет был просрочен, но так же поступили и мошеннические экземпляры. Мы так и не смогли разрешить ситуацию с помощью поддержки по электронной почте GAE.

Ответ 3

Также обратите внимание, что если вы все еще хотите, чтобы ваше приложение имело автоматическое масштабирование, но вы не хотите, чтобы минимум 2 экземпляра по умолчанию работали постоянно, вы можете настроить свой app.yaml следующим образом:

runtime: nodejs
env: flex
automatic_scaling:
  min_num_instances: 1