今天下午,永力智庫的 LINE 群裡有人問萊卡:「照片都有存了嗎?」萊卡是我放在 LINE 群裡的專案助理,其中一條工作是把群裡的照片、影片、檔案自動備份到 Google 雲端硬碟。我去後台查,發現它每一輪只存得下兩到三張。整條線跑在 Cloudflare 的免費方案上,我第一個念頭是「免費額度太少」,查完才發現每天的總用量連上限的百分之一都不到。卡住它的是另一種規則:每一輪對外呼叫最多五十個,資料庫查詢也最多五十個,兩本帳分開算,哪一本先用完就停。這篇把免費方案的規則分成兩種額度攤開,再配上我這幾天踩過的四個雷。
- 你已經用 AI 做出一個會自己跑的小服務(LINE 機器人、定時備份、表單後端),放在 Cloudflare 上,想知道免費方案撐不撐得住
- 你看過「每天十萬次請求免費」就放心上線,結果東西跑得很慢,又查不出原因
- 你正在決定要不要花每月五美元升級,想要一個算得出來的判斷依據
- 一張免費額度對照表,分成「每天總量」與「每一輪上限」兩種。這兩種卡人的方式完全不同
- 我實際踩到的四個雷,每個都附我後來怎麼改
- 一份上線前的三題自檢,算過再決定要不要升級
先看萊卡在做什麼
先把架構攤開,後面的數字才有對照。
- LINE 群有訊息,LINE 會主動打一個網址通知我的程式(這叫 webhook),接電話的是 Cloudflare Worker(跑在 Cloudflare 機器上的一小段程式),驗過簽章後寫進 D1(Cloudflare 提供的資料庫)。這一步零 AI token。
- Worker 上掛三條 cron(定時自動執行的排程):台北 07:00 整理回報、17:00 服務狀態回報、每五分鐘一輪媒體備份(原本是每小時)。
- 媒體備份那一輪做的事:從 D1 撈出還沒備份的照片,跟 LINE 要檔案,上傳到 Google 雲端硬碟,再回 D1 記一筆「已存」。
- 家裡的 Mac mini 每天拉一次文字紀錄做本機備存。那是第二道保險,主線在雲端。
沒有任何一台電腦要開著。程式碼在 GitHub,事件資料在 D1,檔案在雲端硬碟。數量級給你參考:9 月 1 日那天 D1 裡的群組事件有 3,847 筆,媒體備份從 8 月 24 日到 31 日跑了 231 輪、存了 25 個附件,全部在免費方案裡。
- 散在 LINE 各群組的資料,怎麼每天自動下載歸檔
那篇是這條備份線的起點,講為什麼要把群裡的資料收下來。這篇講它搬上雲端之後撞到的額度牆。 - AI 助理換個平台,能力就不一樣:我為什麼把它拆成兩個角色
萊卡為什麼跟官網客服咪卡分家。這篇只講萊卡的備份工作。
Cloudflare 免費方案的規則:兩種額度
免費方案的限制分兩種。第一種是每天的總量,大多數人只看這種。
| 每天總量 | 免費額度 | 萊卡一天的用量 |
|---|---|---|
| Worker 請求數 | 100,000 次(cron 每跑一次也算一次) | 每五分鐘一輪=288 次,加群訊息不到 400 次 |
| D1 讀取 | 500 萬列 | 幾千列 |
| D1 寫入 | 100,000 列 | 幾百列 |
| D1 儲存 | 5 GB(全帳號合計,單一資料庫 500 MB) | 幾 MB |
| Cron 排程數 | 全帳號 5 個 | 3 個 |
第二種是每一輪的上限。Worker 每被叫醒一次,不管是收到 webhook 還是 cron 到點,都算一輪。
| 每一輪上限 | 免費方案 | 付費方案 |
|---|---|---|
| 對外呼叫(fetch) | 50 個 | 10,000 個(預設,可再調高) |
| D1 查詢 | 50 個 | 1,000 個 |
| CPU 時間 | 10 毫秒 | 30 秒(HTTP 預設,可調到 5 分鐘;cron 另有規則) |
| 記憶體(每個 isolate) | 128 MB | 128 MB |
雷一:一輪五十件事,一張照片吃掉十幾件
一張照片要走完整條路:跟 Google 開一個上傳 session、跟 LINE 要檔案、把檔案傳過去,對外呼叫三到四個。D1 這邊要認領工作、預留額度、記結果、收尾,五到六個查詢。每一輪還要固定留一些額度給 token 更新、告警、本輪紀錄,主線能用的剩四十出頭。
所以一輪只塞得下兩三張。
我改了兩層:
- 程式裡放一本帳。每個動作發出前先問帳本還有沒有額度,不夠就停手,沒做完的下一輪自然再被挑中,因為篩選條件沒變。開始一件工作前先把整條路徑的最壞成本鎖住,避免做到一半沒額度,留下「Google 已經收到檔案、D1 沒記到」的半成品。用不完的在收尾時退回去。
- 用輪數換每輪量。每小時一輪追不上,先改十五分鐘,再改五分鐘。一天 288 輪,理論上能存六七百張,花東參訪的量夠用。
- 每件事 AI 都要我確認,怎麼可以更自動?|什麼是迴圈工程 Loop Engineering
那篇講迴圈工程的概念。這裡的帳本是同一個想法落到程式裡的樣子:每一輪做能做的,做不完的靠條件沒變自然回頭。
雷二:額度不夠時「整批放棄」
備份線合回去的第一天,D1 裡有 44 筆媒體等著存,每小時的 cron 卻一直記 idle,一張都沒存。
根因在建工作單那一段。原本的寫法是「一次建全部」,本輪額度放不下 44 筆,就整批放棄,回報「建立 0 筆」,下一輪再來做一次一模一樣的事。改成「只建額度放得下的那幾筆」,留一點給後面的主線,整條線才動起來。
雷三:Cron 全帳號只有五個,換 Worker 時新舊並存就掛不上
Worker 在 Cloudflare 後台可以改名,但我是在設定檔換一個新名字再部署,這等於新建一個 Worker。8 月 31 日我把萊卡的 Worker 從舊名字換成 lyca-line-relay,新舊兩個 Worker 並存了一段時間,讓 LINE 的通知網址平順切過去(這種新舊並存再切換的做法叫藍綠切換)。
免費方案的五個 cron 是整個帳號共用,舊 Worker 的排程還佔著位子,新 Worker 的排程就掛不上,而且不會報錯。順序要鎖死:先刪舊的,才 deploy 掛新的排程。
雷四:2026 年 9 月 1 日起,D1 超額直接失敗
Cloudflare 公告免費方案的 D1 超過當日讀寫上限時,查詢會直接失敗,不再只是警告。萊卡每天寫入離十萬列還很遠,但如果一個帳號接了很多群,或一次補抓大量歷史訊息,會從「慢」變成「當天寫不進去」。上線前值得算一次:一天寫幾列。
順便一條跟額度無關的小規則。Worker 的 secret 存進去之後,後台和 wrangler 都看不到值(只有程式執行時讀得到),自己沒另存就等於沒有備份,另建 Worker 時要全部重設。我把群白名單、成員對照表從 secret 搬進 D1,secret 只留真正的鑰匙。
什麼時候該付那五美元
Workers 付費方案每月 5 美元起,帳號級,升一次全部 Worker 都受惠。
| 項目 | 免費 | 付費 |
|---|---|---|
| 每輪對外呼叫 | 50 | 10,000(預設) |
| 每輪 D1 查詢 | 50 | 1,000 |
| 每輪 CPU | 10 毫秒 | 30 秒(預設) |
| Cron 排程 | 全帳號 5 個 | 250 個 |
| D1 讀取 | 每天 500 萬列 | 每月 250 億列 |
| D1 寫入 | 每天 10 萬列 | 每月 5,000 萬列 |
我的判斷方式:
- 自己用、一兩個群、一天幾十張照片:免費撐得住,用短間隔換量。
- 要幫客戶架第二個實例:cron 會先不夠。一個實例三條排程,兩個就六條,超過五。
- 一輪要處理大檔案或幾十件事:每輪五十是牆,升級比改程式便宜。
- 網站放 GitHub、Vercel 還是 Cloudflare?三家免費額度、商用限制與功能差異
那篇比的是靜態網站託管的免費額度。這篇講的是 Worker 跟 D1 這種會自己跑程式的部分,兩邊的額度是分開算的。
上線前三題自檢
數對外呼叫幾個、D1 查詢幾個。超過四十就要分批,或直接升級。
乘起來看每天總量離十萬次多遠、D1 寫入離十萬列多遠。
要掛新排程前先數。換 Worker 時先刪舊的再掛新的。
這篇的數字是 2026 年 9 月 2 日查 Cloudflare 官方文件的結果,10 月 10 日再對過一次。他們每年都在調,用之前再看一次:Workers 定價、D1 定價、Workers 限制。
本文的四個雷都發生在 2026 年 8 月 24 日到 9 月 2 日之間。萊卡的程式碼在 GitHub 的 lyca-line-agent,帳本那段在 worker/src/budget.js。