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:
state/game_state.json и соседи).One-shot «разбуди меня 12 сентября в 15:30» у Workers нет. Зато нет и отдельного зоопарка функций: webhook и cron — один бинарник, разные входы.
| AWS Lambda | GCP Cloud Run functions | Azure Functions (Consumption) | Cloudflare Workers | |
|---|---|---|---|---|
| Бесплатные вызовы | 1 млн / мес, always free | 2 млн / мес, always free | 1 млн / мес (grant на Consumption) | Free: 100 000 / день (~3 млн / мес). Paid: 10 млн / мес в $5 |
| Compute | 400 000 GB-s / мес | 400 000 GB-s + 200 000 GHz-s | 400 000 GB-s | Free: 10 ms CPU на вызов. Paid: 30 млн CPU-ms / мес |
| Что считается временем | wall-clock × память | wall-clock × память/CPU | wall-clock × память | CPU, не ожидание HTTP |
| Cold start | сотни ms (Go custom runtime) | сотни ms … секунды | часто секунды | десятки ms (isolate) |
| Go | native provided.al2023 | native | custom handler | Wasm (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 щедрый по количеству запросов: 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-стейта бота это по-прежнему ноль долларов.
| AWS S3 | GCP Cloud Storage | Azure Blob | Cloudflare R2 | |
|---|---|---|---|---|
| Бесплатное хранение | 5 ГБ первые 12 месяцев | 5 GB-month always free, только us-central1 / us-east1 / us-west1 | 5 ГБ 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 | лимитируется, потом $/GB | 100 ГБ (ограниченные регионы) | отдельно | бесплатно |
| После льготы | ~$0.023/ГБ, PUT $0.005/1k | обычные тарифы GCS | storage 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;*/10 * * * *.Жертва точности: after-game может опоздать до 10 минут. Для «спасибо за игру» это нормально. Выигрыш: один деплой, старт isolate в десятки раз короче типичного cold start Lambda, объектное хранилище с always-free лимитами, которые не надо вылизывать под 2 000 PUT.
Если рисовать «бесплатный serverless» только по миллионам запросов, AWS, GCP и Azure выглядят почти одинаково. Если добавить холодный старт и срок жизни free tier хранилища, картинка другая.
Для этого бота я остановился на Workers + R2. Не потому что AWS «перестал быть бесплатным», а потому что первый апдейт после паузы больше не ждёт, пока проснётся Lambda.

Уже больше трех лет я организую игры в нашем волейбольном комьюнити, которое живет в Telegram. Сначала мы использовали обычные встроенные опросы, но рутины становилось все больше, и я решил автоматизировать процесс. Так родился бот-организатор с искусственным интеллектом, вокруг которого и выстроена вся архитектура.
Read More → Telegram Aws Lambda S3 AiЭта статья является продолжением статьи “Создание AI-телеграм бота на Go с Gemini API и AWS Lambda” и содержит детальные инструкции по настройке и деплою Telegram бота на AWS Lambda с использованием Function URL.
Read More → Go Telegram Aws Lambda Deploy Function-Url CliВ этой статье мы рассмотрим, как создать интеллектуального Telegram бота на Go, который выступает в роли прокси между пользователями и API Google Gemini. Бот будет выполнять две основные функции: отвечать на сообщения пользователей и генерировать изображения. Хотя этот механизм может быть существенно расширен дополнительными возможностями, такими как генерация голоса и видео, мы сосредоточимся на этих двух типах запросов для простоты.
Read More → Go Telegram Gemini Ai Aws Lambda Bot