Cloudflare Workers: Hướng dẫn từ A-Z, Free tier tới đâu và cách tính tiền chi tiết

Cloudflare Workers là nền tảng serverless chạy trên hạ tầng edge toàn cầu của Cloudflare. Thay vì deploy code lên một server cố định ở Virginia hay Singapore, Workers chạy ngay tại điểm PoP (Point of Presence) gần người dùng nhất, mang lại độ trễ cực thấp mà không cần quản lý server, container hay load balancer.

Cloudflare Workers: Hướng dẫn từ A-Z, Free tier tới đâu và cách tính tiền chi tiết

Trong bài viết này, chúng ta sẽ đi qua từng khía cạnh thực tế: free tier cho phép bạn chạy miễn phí tới đâu, cách Cloudflare tính tiền khi vượt ngưỡng, và hướng dẫn thiết lập project đầu tiên từ con số 0 với code chạy được ngay trên localhost lẫn production.

Cloudflare Workers miễn phí được tới đâu?

Free tier của Workers không giới hạn thời gian sử dụng. Không giống AWS Lambda (chỉ miễn phí 12 tháng đầu), bạn có thể dùng Workers free vĩnh viễn miễn là nằm trong giới hạn.

Bảng free tier hàng ngày và hàng tháng

Tài nguyênFree tierGhi chú
Requests100,000 / ngàyTính theo ngày, reset lúc 00:00 UTC
CPU time10 ms / invocationNếu vượt 10 ms, request bị terminate
Workers KV — Keys read100,000 / ngàyĐọc key-value
Workers KV — Keys written1,000 / ngàyGhi key-value
Workers KV — Keys deleted1,000 / ngàyXóa key
Workers KV — List requests1,000 / ngàyLiệt kê danh sách key
Workers KV — Stored data1 GBTổng dung lượng lưu trữ
D1 — Rows read5 triệu / ngàyTruy vấn SELECT
D1 — Rows written100,000 / ngàyINSERT, UPDATE, DELETE
D1 — Storage5 GBTổng dung lượng database
Workers Logs — Events written200,000 / ngàyGiữ log trong 3 ngày
Subrequests50 / requestRequest nội bộ từ Worker ra ngoài

Requests tính như thế nào? Mỗi request đến Worker của bạn tính là 1. Cloudflare không tính phí cho subrequests (request mà Worker gọi đến API bên ngoài). WebSocket connection ban đầu tính 1 request, nhưng các message sau đó qua WebSocket không tính thêm. Request đến static assets cũng miễn phí và không giới hạn.

10 ms CPU time là đủ cho những gì?

  • API proxy, redirect, rewrite URL.
  • Middleware xác thực JWT, kiểm tra header.
  • A/B testing đơn giản.
  • Webhook handler nhận và xử lý payload nhỏ.
  • Edge rendering HTML tĩnh hoặc JSON response đơn giản.

Nếu bạn cần xử lý nặng hơn, ví dụ resize ảnh, parse file lớn, hoặc chạy machine learning inference, 10 ms sẽ không đủ và bạn cần nâng lên paid plan.

Cách Cloudflare Workers tính tiền chi tiết

Paid plan có mức phí tối thiểu $5/tháng, bao gồm một lượng usage nhất định. Vượt quá mới tính phí thêm.

Bảng giá Workers Paid plan

Tài nguyênIncludedPhí vượt
Requests10 triệu / tháng+$0.30 / triệu
CPU time30 triệu ms / tháng+$0.02 / triệu ms
Max CPU time / invocation5 phút (default 30 giây)
Workers KV — Keys read10 triệu / tháng+$0.50 / triệu
Workers KV — Keys written1 triệu / tháng+$5.00 / triệu
Workers KV — Keys deleted1 triệu / tháng+$5.00 / triệu
Workers KV — List requests1 triệu / tháng+$5.00 / triệu
Workers KV — Stored data1 GB+$0.50 / GB-month
D1 — Rows read25 tỷ / tháng+$0.001 / triệu rows
D1 — Rows written50 triệu / tháng+$1.00 / triệu rows
D1 — Storage5 GB+$0.75 / GB-month
Workers Logs — Events20 triệu / tháng+$0.60 / triệu
Workers Logs — Retention7 ngày

CPU time được tính như thế nào?

CPU time khác với wall-clock time (thời gian thực tế). Nếu Worker của bạn chờ response từ API bên ngoài mất 2 giây, thời gian chờ không tính vào CPU time. Chỉ thời gian CPU thực sự xử lý logic của bạn mới được tính.

Ví dụ: Một Worker xử lý request trung bình 7 ms CPU, phục vụ 15 triệu request/tháng.

  • Requests: (15M – 10M free) x $0.30/triệu = $1.50
  • CPU time: 15M x 7ms = 105 triệu ms. (105M – 30M free) x $0.02/triệu = $1.50
  • Tổng: $5 (base) + $1.50 + $1.50 = $8.00/tháng

Ví dụ tính tiền thực tế

Scenario 1: API nhỏ, 500K requests/tháng, CPU nhẹ

Chi phíTính toánThành tiền
Base planFixed$5.00
Requests (500K)Dưới 10M, nằm trong included$0
CPU time (giả sử 3M ms)Dưới 30M, nằm trong included$0
Tổng$5.00/tháng

Scenario 2: SaaS medium, 50M requests/tháng, CPU trung bình 5ms

Chi phíTính toánThành tiền
Base planFixed$5.00
Requests (50M)(50M – 10M) x $0.30/triệu$12.00
CPU time (250M ms)(250M – 30M) x $0.02/triệu$4.40
Tổng$21.40/tháng

So sánh với AWS Lambda: Với 50M requests, Lambda có thể tốn hàng trăm đô chỉ riêng request fees và compute charges. Workers với giá $0.30/triệu requests và CPU time billing thay vì duration billing thường rẻ hơn đáng kể cho workload HTTP-first.

Hướng dẫn thiết lập Cloudflare Workers từ con số 0

Dưới đây là hướng dẫn đầy đủ, cập nhật theo Wrangler v4 và C3 (create-cloudflare-cli) hiện tại. Bạn sẽ tạo project, chạy local, và deploy lên production trong vòng 10 phút.

Yêu cầu

  • Node.js 20 trở lên (khuyến nghị dùng nvm để quản lý version).
  • Tài khoản Cloudflare (miễn phí).

Bước 1: Cài đặt C3 và tạo project

C3 (create-cloudflare-cli) là công cụ chính thức của Cloudflare để scaffold project. Mở terminal và chạy:

npm create cloudflare@latest -- my-first-worker

Trong quá trình setup, chọn các option sau:

  • What would you like to start with? Hello World example
  • Which template would you like to use? Worker only
  • Which language do you want to use? JavaScript (hoặc TypeScript nếu bạn quen)
  • Do you want to use git for version control? Yes
  • Do you want to deploy your application? No (chúng ta sẽ chỉnh sửa trước khi deploy)

Sau khi xong, vào thư mục project:

cd my-first-worker

C3 sẽ tạo ra các file sau:

  • wrangler.jsonc — file cấu hình Wrangler (định dạng JSON with comments).
  • src/index.js — entry point của Worker.
  • package.json — dependencies.

Bước 2: Hiểu cấu trúc file wrangler.jsonc

File này là nguồn sự thật duy nhất cho cấu hình deployment. Nội dung mặc định:

{
  "name": "my-first-worker",
  "compatibility_date": "2026-07-01",
  "main": "src/index.js"
}

Các trường quan trọng:

  • name: Tên Worker, phải unique trong account của bạn.
  • compatibility_date: Ngày quyết định version runtime API. Luôn dùng ngày gần nhất khi deploy production.
  • main: Entry point của ứng dụng.

Nếu project cần Node.js APIs (ví dụ dùng Next.js, một số framework), thêm:

{
  "name": "my-first-worker",
  "compatibility_date": "2026-07-01",
  "compatibility_flags": ["nodejs_compat"],
  "main": "src/index.js"
}

Bước 3: Viết code Worker đầu tiên

Mở src/index.js và thay bằng code sau:

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);

    // Route đơn giản
    if (url.pathname === "/") {
      return new Response("Hello from Cloudflare Workers!", {
        headers: { "content-type": "text/plain" },
      });
    }

    if (url.pathname === "/api/time") {
      return Response.json({
        timestamp: Date.now(),
        iso: new Date().toISOString(),
        region: request.cf?.colo || "unknown",
      });
    }

    if (url.pathname === "/api/echo" && request.method === "POST") {
      const body = await request.json();
      return Response.json({
        received: body,
        method: request.method,
        headers: Object.fromEntries(request.headers),
      });
    }

    return new Response("Not Found", { status: 404 });
  },
};

Đoạn code trên tạo 3 endpoint:

  • GET / — Trả về text đơn giản.
  • GET /api/time — Trả về timestamp và region edge (colo).
  • POST /api/echo — Echo lại JSON body nhận được.

Bước 4: Chạy local với Wrangler dev

Trong thư mục project, chạy:

npx wrangler dev

Lần đầu chạy, Wrangler sẽ yêu cầu đăng nhập. Mở browser, đăng nhập Cloudflare, và chọn Allow. Sau đó, Wrangler sẽ cung cấp URL local (thường là http://localhost:8787).

Test trong terminal khác:

curl http://localhost:8787/
curl http://localhost:8787/api/time
curl -X POST http://localhost:8787/api/echo \
  -H "Content-Type: application/json" \
  -d '{"name":"Cloudflare","type":"Workers"}'

Nếu output đúng, bạn đã sẵn sàng deploy.

Bước 5: Deploy lên production

Chạy lệnh:

npx wrangler deploy

Nếu lần đầu deploy, Wrangler sẽ hỏi bạn có muốn tạo subdomain workers.dev không. Chọn Yes và nhập tên subdomain (ví dụ yourname). Worker của bạn sẽ có URL:

https://my-first-worker.yourname.workers.dev

Truy cập URL đó trên browser hoặc curl để kiểm tra. Nếu thấy lỗi 523 lần đầu, chờ khoảng 1 phút để DNS propagate.

Bước 6: Thêm environment variables

Trong wrangler.jsonc, thêm phần vars:

{
  "name": "my-first-worker",
  "compatibility_date": "2026-07-01",
  "main": "src/index.js",
  "vars": {
    "ENVIRONMENT": "production",
    "API_VERSION": "v1"
  }
}

Trong code, truy cập qua env.VAR_NAME:

export default {
  async fetch(request, env, ctx) {
    return Response.json({
      environment: env.ENVIRONMENT,
      version: env.API_VERSION,
    });
  },
};

Lưu ý bảo mật: Vars trong wrangler.jsonc không mã hóa và hiển thị trong dashboard. Đối với API key, token bí mật, dùng Wrangler Secrets:

npx wrangler secret put API_KEY

Nhập giá trị khi được hỏi. Secret sẽ được mã hóa và chỉ truy cập được qua env.API_KEY trong runtime.

Bước 7: Kết nối với Workers KV

Workers KV là key-value store toàn cầu, phù hợp cho config, cache, session data.

Tạo namespace KV:

npx wrangler kv namespace create "MY_KV"

Copy output id và thêm vào wrangler.jsonc:

{
  "name": "my-first-worker",
  "compatibility_date": "2026-07-01",
  "main": "src/index.js",
  "kv_namespaces": [
    {
      "binding": "MY_KV",
      "id": "your-kv-namespace-id-here"
    }
  ]
}

Code sử dụng KV:

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);

    if (url.pathname === "/kv/set" && request.method === "POST") {
      const { key, value } = await request.json();
      await env.MY_KV.put(key, value);
      return Response.json({ status: "saved", key });
    }

    if (url.pathname.startsWith("/kv/get/")) {
      const key = url.pathname.split("/")[3];
      const value = await env.MY_KV.get(key);
      return value
        ? Response.json({ key, value })
        : new Response("Not found", { status: 404 });
    }

    return new Response("Not Found", { status: 404 });
  },
};

Deploy lại:

npx wrangler deploy

Test:

curl -X POST https://my-first-worker.yourname.workers.dev/kv/set \
  -H "Content-Type: application/json" \
  -d '{"key":"user:123","value":"{\"name\":\"Alice\"}"}'

curl https://my-first-worker.yourname.workers.dev/kv/get/user:123

Bước 8: Tích hợp với framework phổ biến

Hono (khuyến nghị cho API và microservice):

npm create hono@latest my-hono-app
# Chọn template: cloudflare-workers
cd my-hono-app
npm install
npx wrangler deploy

Hono không cần adapter, chạy native trên Workers runtime.

Next.js (qua OpenNext adapter):

npx create-next-app@latest my-next-app
cd my-next-app
npm install @opennextjs/cloudflare

Thêm script trong package.json:

"scripts": {
  "build:worker": "opennextjs-cloudflare"
}

Chạy npm run build:worker rồi wrangler deploy.

Astro (SSR mode):

npx astro add cloudflare

Adapter @astrojs/cloudflare sẽ tự động cấu hình. Build và deploy bằng wrangler pages deploy dist.

Những điều cần nhớ khi dùng Workers

  • Free tier tính theo ngày, không phải tháng. 100K requests/ngày nghĩa là bạn có thể dùng tới 3 triệu requests/tháng miễn phí nếu phân bổ đều. Nhưng nếu một ngày nào đó spike lên 150K, 50K request dư sẽ bị từ chối (hoặc cần nâng lên paid).
  • CPU time 10 ms trên free rất hạn chế. Parse JSON lớn, regex phức tạp, hoặc vòng lặp nặng dễ dàng vượt ngưỡng. Nếu thấy lỗi 1101 (Worker exceeded CPU time), đó là dấu hiệu cần paid plan.
  • Không có egress fee. Data transfer ra ngoài từ Workers hoàn toàn miễn phí. Đây là lợi thế lớn so với AWS Lambda.
  • Workers KV eventual consistency. Dữ liệu ghi vào KV có thể mất vài giây để propagate toàn cầu. Không dùng KV cho dữ liệu cần strong consistency ngay lập tức. Trong trường hợp đó, dùng D1 hoặc Durable Objects.
  • Subrequests giới hạn 50/request trên free. Nếu Worker của bạn gọi nhiều API bên ngoài, hãy tối ưu batch request hoặc dùng Service Binding (gọi Worker khác trong cùng account không tính phí request).
  • Workers Logs miễn phí nhưng giữ 3 ngày. Nếu cần log lâu hơn, dùng Workers Logpush (chỉ có trên paid) hoặc tự gửi log ra service bên ngoài.

Kết luận

Cloudflare Workers là một trong những nền tảng serverless dễ tiếp cận nhất cho developer hiện nay. Free tier 100K requests/ngày + 10 ms CPU time đủ để chạy API nhỏ, middleware, webhook handler, hoặc thậm chí một static site generator. Paid plan chỉ từ $5/tháng với 10M requests included và không giới hạn egress khiến nó rất cạnh tranh so với AWS Lambda hay Google Cloud Functions.

Điểm mạnh thực sự của Workers không chỉ là giá rẻ, mà là 0ms cold start trên hạ tầng edge toàn cầu. Code của bạn chạy ngay tại điểm gần người dùng nhất mà không cần cấu hình region, load balancer, hay auto-scaling.

Hãy bắt đầu bằng cách chạy npm create cloudflare@latest, viết một endpoint đơn giản, test trên localhost với wrangler dev, rồi deploy lên workers.dev trong vòng 5 phút. Từ đó, bạn có thể mở rộng thêm KV, D1, R2, Queues, và Durable Objects để xây dựng ứng dụng full-stack hoàn chỉnh mà không cần quản lý server nào.

Bình luận


  • Không có bình luận.

Công cụ trực tuyến

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...