С AWS на Cloudflare Workers: сравнение бесплатных тиров и холодного старта

11 сентября 2026 г. Telegram Aws Lambda S3 Cloudflare Workers R2 Go



В прошлой статье я рассказывал, как уложил Telegram-бота-организатора волейбольных игр в AWS Free Tier: Lambda + S3 + EventBridge и счёт около нуля долларов. Схема жила месяцами. Потом я перенёс того же бота на Cloudflare Workers и R2 — тот же Go, те же JSON-файлы стейта, тот же Gemini.

Зачем трогать то, что уже бесплатно? Из-за холодного старта. Lambda на custom runtime provided.al2023 после простоя просыпается сотни миллисекунд, иногда дольше секунды. Для Telegram webhook это ощущается: первый апдейт после тишины приходит заметно медленнее, чем второй. У Workers isolate поднимается за десятки миллисекунд. На реальном деплое этого бота Wrangler показывал Worker Startup Time 16–37 ms.

Ниже — практическое сравнение бесплатных тиров AWS, GCP, Azure и Cloudflare по двум вещам, которые нужны такому боту: compute в стиле Lambda и объектное хранилище в стиле S3. Цифры — ориентир на сентябрь 2026, перед продом всегда сверяю официальные страницы.

Сравнение холодного старта

Что осталось тем же ботом

Логика не менялась: webhook из Telegram, Gemini как роутер, JSON-стейт игр и памяти чата, джобы до/после игры и Gmail-полл оплат.

На AWS это были отдельные Lambda и EventBridge one-shot (at(...)) на каждую игру. На Cloudflare:

  1. Один Worker на Go, собранный в Wasm через syumai/workers-go.
  2. Тот же набор ключей в R2, что раньше в S3 (state/game_state.json и соседи).
  3. Вместо EventBridge — JSON-календарь jobs в R2 и cron раз в 10 минут, который запускает due-задачи.

One-shot «разбуди меня 12 сентября в 15:30» у Workers нет. Зато нет и отдельного зоопарка функций: webhook и cron — один бинарник, разные входы.

Compute: Lambda-подобные сервисы

AWS LambdaGCP Cloud Run functionsAzure Functions (Consumption)Cloudflare Workers
Бесплатные вызовы1 млн / мес, always free2 млн / мес, always free1 млн / мес (grant на Consumption)Free: 100 000 / день (~3 млн / мес). Paid: 10 млн / мес в $5
Compute400 000 GB-s / мес400 000 GB-s + 200 000 GHz-s400 000 GB-sFree: 10 ms CPU на вызов. Paid: 30 млн CPU-ms / мес
Что считается временемwall-clock × памятьwall-clock × память/CPUwall-clock × памятьCPU, не ожидание HTTP
Cold startсотни ms (Go custom runtime)сотни ms … секундычасто секундыдесятки ms (isolate)
Gonative provided.al2023nativecustom handlerWasm (GOOS=js)

Источники: AWS Lambda pricing, Google Cloud Free Tier, Azure Functions pricing, Workers pricing, Workers limits.

Три больших облака устроены похоже: миллионы запросов и сотни тысяч GB-секунд. Этого хватает маленькому боту. Разница не в «влезу / не влезу», а в как просыпается рантайм и не кончится ли бесплатность через год.

Холодный старт

Классическая Lambda поднимает микро-ВМ, тянет runtime и ваш zip/image. Для Go на provided.al2023 это обычно сотни миллисекунд. GCP Gen2 ближе к Cloud Run: лучше Lambda первого поколения, но cold start всё ещё «контейнерный». Azure Consumption — самый неприятный из четвёрки: после простоя первый запрос легко уходит в секунды.

Workers работают иначе. Это не контейнер, а V8 isolate. Cloudflare держит лимит старта в 1 секунду, но реальный старт моего Wasm-воркера — 16–37 ms. Повторные запросы в тёплый isolate ещё короче. Для чат-бота это важнее таблички «1 млн запросов»: люди замечают паузу, а не GB-секунды.

Отдельный бонус биллинга: пока Worker ждёт ответ Gemini, wall-clock идёт, а CPU почти нет. На Lambda вы платите за всё время, пока функция жива. На Workers в лимит входит CPU, а не секунды ожидания HTTP.

Этот бот живёт на Workers Free

Бесплатный Workers щедрый по количеству запросов: 100k в день — это уже больше always-free Lambda (1 млн в месяц). С 4 сентября 2026 у Free и Paid один лимит размера: 64 MiB uncompressed. Мой Go Wasm — около 39 MiB Total Upload, в лимит влезает без апгрейда.

10 ms CPU на вызов на Free звучит страшно для Gemini-бота, но ожидание HTTP почти не ест CPU. Пока модель думает, isolate ждёт сеть. Прод этого бота так и крутится на Workers Free: в дашборде Subscriptions стоит Workers Free, не $5/month.

Paid за $5 имеет смысл, если упрётесь в 10 ms CPU или 100k запросов в день. Мне пока не нужен.

R2 в подписках может отображаться как отдельный продукт (R2 Paid) — так Cloudflare включает биллинг хранилища. Always-free квота при этом остаётся: 10 ГБ, 1 млн Class A, 10 млн Class B. Для JSON-стейта бота это по-прежнему ноль долларов.

Object storage: S3 и аналоги

AWS S3GCP Cloud StorageAzure BlobCloudflare R2
Бесплатное хранение5 ГБ первые 12 месяцев5 GB-month always free, только us-central1 / us-east1 / us-west15 ГБ LRS первые 12 месяцев (Free Account)10 ГБ / мес always free
Чтения20 000 GET / мес (год 1)50 000 Class B~20 000 read (год 1)10 млн Class B / мес
Записи2 000 PUT / мес (год 1)5 000 Class A~10 000 write (год 1)1 млн Class A / мес
Egressлимитируется, потом $/GB100 ГБ (ограниченные регионы)отдельнобесплатно
После льготы~$0.023/ГБ, PUT $0.005/1kобычные тарифы GCSstorage account не входит в Functions grantсверх лимита $0.015/ГБ, без egress

Источники: AWS S3 pricing, GCP Free Tier, Azure Functions pricing (storage billed separately), R2 pricing.

В прошлой статье узким местом S3 были 2 000 PUT в первый год. Ленивая загрузка и запись только в конце запроса как раз про это. На R2 лимит записи — миллион Class A в месяц, always free. Для бота, который пишет несколько JSON-файлов на апдейт, это другой порядок.

Второй сюрприз Azure: grant Functions не покрывает storage account, который создаётся вместе с Function App. «Бесплатные лямбды» легко начинают капать из-за Blob.

GCP Cloud Storage always free есть, но только в трёх US-регионах и со скромными 5 000 Class A. Для JSON-стейта хватит, для привычки «PUT на каждое сообщение» — уже впритык.

R2 ещё и без платы за отдачу в интернет. Для бота это почти неважно (стейт мелкий), но как бесплатный S3-аналог линейка выглядит честнее: 10 ГБ + много операций + без «первый год».

Что я вынес из переноса

Код бота почти не переписывал. Поменялся рантайм и планировщик:

  • GOOS=js GOARCH=wasm вместо linux/amd64;
  • http.DefaultClient через Workers fetch (обычный net/http на JS падает с Illegal invocation);
  • зона Europe/Istanbul через embed time/tzdata — в Wasm нет IANA zoneinfo;
  • EventBridge one-shot заменил календарём в R2 и кроном */10 * * * *.

Жертва точности: after-game может опоздать до 10 минут. Для «спасибо за игру» это нормально. Выигрыш: один деплой, старт isolate в десятки раз короче типичного cold start Lambda, объектное хранилище с always-free лимитами, которые не надо вылизывать под 2 000 PUT.

Вывод

Если рисовать «бесплатный serverless» только по миллионам запросов, AWS, GCP и Azure выглядят почти одинаково. Если добавить холодный старт и срок жизни free tier хранилища, картинка другая.

  • AWS — отличный always-free Lambda и привычный S3, но S3-щедрость на год, а cold start Go-Lambda заметный.
  • GCP — больше бесплатных вызовов functions, storage always free только в трёх регионах США.
  • Azure — похожий grant на Functions, но Blob не в комплекте, cold start Consumption часто самый длинный.
  • Cloudflare Workers — самый короткий старт из этой четвёрки (isolate, у меня 16–37 ms). Free plan покрывает и запросы, и (с сентября 2026) большой Wasm. R2 даёт лучший always-free объектный тир: 10 ГБ, миллион записей, 10 миллионов чтений, без egress.

Для этого бота я остановился на Workers + R2. Не потому что AWS «перестал быть бесплатным», а потому что первый апдейт после паузы больше не ждёт, пока проснётся Lambda.

Tags:

Проверьте свои знания

1. У какого serverless-рантайма обычно самый короткий cold start?
2. Какой always-free лимит у Cloudflare R2 на хранение?
3. Что из этого верно про бесплатные тиры объектного хранилища?

Похожие статьи

28 февраля 2026 г.

Как я задеплоил Telegram-бота c ИИ в AWS забесплатно

Как я задеплоил Telegram-бота c ИИ в AWS забесплатно

Уже больше трех лет я организую игры в нашем волейбольном комьюнити, которое живет в Telegram. Сначала мы использовали обычные встроенные опросы, но рутины становилось все больше, и я решил автоматизировать процесс. Так родился бот-организатор с искусственным интеллектом, вокруг которого и выстроена вся архитектура.

Read More → Telegram Aws Lambda S3 Ai
20 декабря 2024 г.

Деплой Telegram бота на AWS Lambda с Function URL

Эта статья является продолжением статьи “Создание AI-телеграм бота на Go с Gemini API и AWS Lambda” и содержит детальные инструкции по настройке и деплою Telegram бота на AWS Lambda с использованием Function URL.

Read More → Go Telegram Aws Lambda Deploy Function-Url Cli
19 декабря 2024 г.

Создание AI-телеграм бота на Go с Gemini API и AWS Lambda

В этой статье мы рассмотрим, как создать интеллектуального Telegram бота на Go, который выступает в роли прокси между пользователями и API Google Gemini. Бот будет выполнять две основные функции: отвечать на сообщения пользователей и генерировать изображения. Хотя этот механизм может быть существенно расширен дополнительными возможностями, такими как генерация голоса и видео, мы сосредоточимся на этих двух типах запросов для простоты.

Read More → Go Telegram Gemini Ai Aws Lambda Bot