Назад | Перейти на главную страницу

Сервис AWS Fargate: масштабирование до нуля?

Недавно я перенес небольшое веб-приложение на AWS, используя Fargate и Aurora Serverless. Приложение не получает большого трафика, поэтому моя цель - сэкономить, пока его никто не использует. Aurora Serverless, кажется, автоматически делает это для меня на стороне БД.

Однако я изо всех сил пытаюсь найти какие-либо ресурсы о том, как масштабировать сервис Fargate до нуля.

Перед ним находится ALB, и я знаю, что для масштабирования можно использовать количество запросов ALB ... поэтому в идеале, когда в среднем есть 0 запросов в течение периода, скажем, 10 минут, служба будет масштабироваться до нуля задач. Затем, когда поступает запрос, он запускает масштабирование одной задачи для службы.

Я не уверен, как именно это будет работать. Когда нет исправных целей ALB, ALB возвращает ошибку 503, поэтому ваши посетители будут видеть страницу с ошибкой вместо вашего веб-сайта. Который может запускает запуск контейнера Fargate, но это часто занимает десятки секунд, иногда даже более минуты. К тому времени, как ваш контейнер будет готов, ваш посетитель, вероятно, уйдет.

Если вам нужен действительно бессерверный веб-сайт с нулевыми простоями, вам придется реализовать его с помощью API.

  • Положить ваши внешний интерфейс файлы (HTML, CSS, JS) в S3
  • Загрузите свой динамический контент через API
  • Реализуйте динамическую функциональность в Лямбда-функции
  • Использовать API-шлюз называть лямбды
  • БД может быть Аврора Бессерверная или DynamoDB по запросу

Эта архитектура ничего не стоит в простое и обеспечивает мгновенный отклик вашим посетителям.


Обновить: если вы все еще хотите уменьшить масштаб службы Fargate до 0 задач, вы, безусловно, можете сделать это, установив параметры службы DesiredCount к 0. Это можно сделать, например, через aws-cli:

~ $ aws ecs update-service ... --service xyz --desired-count 0

Если вы хотите сделать это в Dev Я предлагаю вам запустить это UpdateService либо вручную, либо из задания cron, либо из запланированной функции Lambda. В любом случае вы можете поставить задачу 0 ночью и обратно в 1 на следующий рабочий день. Это будет проще, чем полагаться на AutoScaling, которое может оказаться не таким надежным при очень низком трафике.

Надеюсь, это поможет :)

Если вы переписываете свое приложение, чтобы оно соответствовало приведенному выше ответу, это не вариант или дорого, вы можете изучить GCP CloudRun.

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

Таким образом, вы можете объединить Amazon Aurora с GCP CloudRun с минимальными затратами и без необходимости переписывать приложение.