Cài đặt và cấu hình CLI Wrangler cho Cloudflare Workers
Bước đầu tiên là chuẩn bị môi trường phát triển trên Linux bằng cách cài đặt Wrangler, công cụ dòng lệnh chính thức của Cloudflare để quản lý Workers.
Chúng ta sử dụng npm (Node Package Manager) để cài đặt toàn cầu, đảm bảo lệnh wrangler có thể chạy từ bất kỳ thư mục nào trong terminal.
npm install -g wrangler
Kết quả mong đợi: Không có lỗi, và lệnh wrangler --version trả về phiên bản mới nhất hiện có.
Tiếp theo, đăng nhập vào tài khoản Cloudflare của bạn để tạo token xác thực (API Token) cần thiết cho việc deploy.
wrangler login
Kết quả mong đợi: Trình duyệt mặc định mở ra, yêu cầu bạn đăng nhập và cấp quyền cho Wrangler. Sau khi đồng ý, terminal hiển thị "Logged in as [your-email]".
Để quản lý project, ta cần khởi tạo một dự án mới trong thư mục làm việc. Lệnh này tạo cấu trúc thư mục cơ bản và file cấu hình wrangler.toml.
wrangler init my-edge-worker --type vanilla
Kết quả mong đợi: Thư mục my-edge-worker được tạo với file wrangler.toml và src/index.ts bên trong.
Viết logic function đầu tiên bằng TypeScript
Đi vào thư mục dự án vừa tạo để bắt đầu viết code logic xử lý request.
cd my-edge-worker
File src/index.ts chứa logic chính của Worker. Chúng ta sẽ viết một hàm xử lý HTTP request trả về JSON, bao gồm thông tin về Edge location và thời gian thực.
File: src/index.ts (Nội dung hoàn chỉnh)
export interface Env {
// Định nghĩa biến môi trường tại đây nếu có
}
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise {
const url = new URL(request.url);
// Lấy địa chỉ IP của người dùng từ Cloudflare header
const clientIP = request.headers.get('CF-Connecting-IP');
// Lấy mã quốc gia từ metadata của Cloudflare
const countryCode = request.cf?.country;
const responseText = {
status: "success",
message: "Hello from Cloudflare Edge!",
timestamp: new Date().toISOString(),
clientIP: clientIP,
location: countryCode,
path: url.pathname,
};
return new Response(
JSON.stringify(responseText, null, 2),
{
status: 200,
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache, no-store, must-revalidate',
},
}
);
},
};
Kết quả mong đợi: File được lưu, không có lỗi cú pháp khi kiểm tra bằng TypeScript compiler.
Để đảm bảo code chạy đúng trước khi deploy lên Edge, ta sử dụng chế độ local emulation.
wrangler dev
Kết quả mong đợi: Terminal hiển thị "Local server started: http://localhost:8787". Truy cập địa chỉ này trên trình duyệt sẽ thấy JSON response tương tự logic đã viết.
Ngừng server local bằng cách nhấn Ctrl+C.
Cấu hình Rules Engine để định tuyến traffic
Trước khi deploy, cần cấu hình file wrangler.toml để định nghĩa tên Worker và các thiết lập cơ bản.
File: wrangler.toml (Nội dung hoàn chỉnh)
name = "my-edge-worker"
main = "src/index.ts"
compatibility_date = "2023-09-01"
# Cấu hình zone nếu muốn bind vào domain cụ thể
# zone_id = "your-zone-id-here"
# route = "example.com/api/*"
# Cấu hình routes để định tuyến traffic cụ thể
routes = [
"example.com/*"
]
# Cấu hình cache nếu cần
[placement]
mode = "smart"
Kết quả mong đợi: File wrangler.toml được cập nhật. Lưu ý thay thế "example.com" bằng domain thực tế của bạn đã trỏ về Cloudflare DNS.
Để định tuyến traffic chính xác hơn, ta sử dụng Cloudflare Dashboard Rules Engine. Truy cập vào Dashboard Cloudflare -> chọn Zone -> Workers & Pages -> Rules Engine.
Tạo một Rule mới với tên "Route to Worker". Thiết lập điều kiện (Condition) như sau:
- Field: URI Path
- Operator: Matches regex
- Value: ^/api/.*
Trong phần "Action", chọn "Run Worker" và chọn Worker "my-edge-worker" vừa tạo. Lưu Rule này.
Kết quả mong đợi: Mọi request đi vào đường dẫn /api/* sẽ được chuyển hướng xử lý bởi Worker, thay vì đi qua Origin server hoặc Cache mặc định.
Triển khai Workers lên mạng lưới Edge toàn cầu
Sau khi code và cấu hình hoàn tất, thực hiện lệnh deploy để đưa Worker lên mạng lưới Edge toàn cầu của Cloudflare.
wrangler deploy
Kết quả mong đợi: Terminal hiển thị quá trình build (compiling TypeScript), upload code, và cuối cùng là "Published my-edge-worker". Nó sẽ hiển thị URL deployment (ví dụ: my-edge-worker.your-subdomain.workers.dev).
Để xác minh Worker đã chạy trên Edge, truy cập URL deployment đó hoặc domain đã cấu hình trong wrangler.toml.
curl -v https://my-edge-worker.your-subdomain.workers.dev
Kết quả mong đợi: Trả về JSON với timestamp hiện tại, mã quốc gia (country code) của nơi bạn đang đứng, và địa chỉ IP công cộng của bạn. Điều này chứng tỏ request đã được xử lý tại Edge node gần nhất.
Thử truy cập lại từ một địa điểm khác (hoặc dùng proxy) để thấy country code thay đổi, xác nhận tính năng Edge global routing.
Tối ưu hóa cache và CDN trong Cloudflare Dashboard
Để giảm tải cho Worker và tăng tốc độ phản hồi cho các request không cần xử lý logic (như static assets), ta cần cấu hình Cache Rules.
Trên Dashboard Cloudflare -> Zone -> Caching -> Configuration. Thiết lập "Cache level" thành "Standard" hoặc "Aggressive" tùy vào nhu cầu.
Để tối ưu hơn, tạo Cache Rule để bypass cache cho các endpoint động (API) mà Worker xử lý.
Vào Dashboard -> Zone -> Rules -> Cache Rules. Tạo rule mới:
- Condition: URI Path matches regex: ^/api/.*
- Action: Bypass cache
- Behavior: Bypass cache (không lưu vào cache Cloudflare, luôn gọi Worker)
Ngược lại, tạo rule để cache các tài nguyên tĩnh (hình ảnh, css, js) để Worker không phải xử lý.
- Condition: File extension equals: jpg, png, css, js
- Action: Cache at edge
- TTL: 7 days (hoặc tùy chỉnh)
Kết quả mong đợi: Khi truy cập /api/*, Worker luôn chạy để trả dữ liệu mới nhất. Khi truy cập ảnh hoặc file tĩnh, Cloudflare trả về bản cached từ Edge node, giảm latency xuống mức thấp nhất và không tốn tài nguyên Worker.
Để kiểm tra cache hit/miss, thêm header cf-cache-status vào response của Worker hoặc xem trong tab "Caching" của Cloudflare Dashboard (Analytics).
curl -I https://my-edge-worker.your-subdomain.workers.dev/image.png
Kết quả mong đợi: Header response chứa cf-cache-status: HIT cho lần truy cập thứ hai trở đi đối với file tĩnh, và cf-cache-status: DYNAMIC (hoặc MISS) cho các request API.
Điều hướng series:
Mục lục: Series: Series: Xây dựng nền tảng Serverless và Edge Computing an toàn với OpenFaaS, Cloudflare Workers và Wasm trên hạ tầng Kubernetes
« Phần 3: Đưa OpenFaaS vào Kubernetes và cấu hình Gateway
Phần 5: Tích hợp WebAssembly (Wasm) vào OpenFaaS và Cloudflare »