Category: guide
Cloudflare Workers — Serverless บน Edge Network
คู่มือ Cloudflare Workers — เขียน serverless function ที่รันบน 300+ edge locations พร้อม KV, D1, R2 storage
สารบัญ
Cloudflare Workers คืออะไร
Workers รัน JavaScript/TypeScript ใกล้ผู้ใช้ที่สุด (edge) — latency ต่ำกว่า serverless ทั่วไป เพราะไม่มี cold start และ network ใกล้ user
Worker พื้นฐาน
// src/index.ts
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === '/api/hello') {
return Response.json({ message: 'สวัสดีจาก Edge!' });
}
return new Response('Not Found', { status: 404 });
},
};
// type สำหรับ bindings
interface Env {
KV_STORE: KVNamespace;
DB: D1Database;
BUCKET: R2Bucket;
}
Wrangler CLI
npm install -g wrangler
wrangler login
wrangler init my-worker
wrangler dev # local dev
wrangler deploy # deploy
KV Store — key-value storage
// wrangler.toml
// [[kv_namespaces]]
// binding = "KV_STORE"
// id = "..."
// อ่าน
const value = await env.KV_STORE.get('key');
const json = await env.KV_STORE.get('data', { type: 'json' });
// เขียน
await env.KV_STORE.put('key', 'value', { expirationTtl: 3600 });
// ลบ
await env.KV_STORE.delete('key');
D1 — SQLite บน Edge
const result = await env.DB.prepare(
'SELECT * FROM products WHERE category = ?'
).bind('exhaust').all();
console.log(result.results); // typed rows
R2 — Object Storage (ไม่มี egress fee)
// อัพโหลด
await env.BUCKET.put('images/photo.jpg', imageData, {
httpMetadata: { contentType: 'image/jpeg' },
});
// ดึง
const object = await env.BUCKET.get('images/photo.jpg');
if (!object) return new Response('Not Found', { status: 404 });
return new Response(object.body, {
headers: { 'Content-Type': 'image/jpeg' },
});
Cron Triggers
// wrangler.toml
// [[triggers.crons]]
// crons = ["0 9 * * *"] # ทุกวัน 09:00 UTC
export default {
async scheduled(event: ScheduledEvent, env: Env) {
await sendDailyReport(env);
},
};
เมื่อไหร่ใช้ Workers
- API ที่ต้องการ latency ต่ำ globally
- Edge middleware (auth check, redirect, A/B test)
- Background jobs ด้วย Queue
- Image transformation ด้วย Workers Images
ข้อจำกัด: Workers รัน V8 isolate ไม่ใช่ Node.js — บาง npm package ที่ใช้ Node-only API อาจไม่ทำงาน