(RustLearn) Hello, World Rust in Cloudflare Worker

Auttawut Wiriyakreng
Factsblend
Published in
3 min readOct 24, 2022
http://blog.cloudflare.com/content/images/2019/03/wrangler-copy@2x.png

เนื่องจากช่วงนี้ได้มีเวลาขึ้นมาบ้าง จึงคิดว่าจะแบ่งเวลาส่วนนี้ไปเรียนภาษาใหม่ คือ Rust Language ส่วนทำไมถึงต้องเป็น Rust นั้น ขออธิบายเป็นตอนหน้าแบบยาวๆเลยละกัน แต่ตอนนี้เราจะมาลองทดสอบ Deploy Rust program ของเราขึ้นไปอยู่บนสิ่งงที่เรียกว่า Edge Serverless Function ที่มีชื่อว่า Cloudflare worker โดยเราจะใช้ตัว Free Plan ซึ่งก็ให้ limit เรามาค่อนข้างเยอะเลยทีเดียว ตามรูปด้านล่าง

ที่เลือก Cloudflare worker เพราะตัว Cloudflare Worker เป็น Engine ที่เป็น Google V8 ซึ่งสามารถ run WebAssembly ได้จึงทำให้เราสามารถเขียน Rust แล้วนำไป Deploy ขึ้นบน Edge ได้ และคิดว่าในการศึกษาครั้งนี้อาจจะหา Project เล็กๆมาลองทำกันเป็นระบบสั่งกาแฟผ่าน Line Group ก็จะได้เอาขึ้นมา Deploy ที่นี่เลย

Setting-up Rust Wrangler

เราจะมา install ตัว cli ของ cloudflare ที่ชื่อว่า Wrangler กัน โดยใช้ Cargo (ถ้าใครเคยลงอยู่แล้วโดยการใช้ NPM ให้ข้ามขั้นตอนนี้ไปได้เลย)

cargo install wrangler

ซึ่งตัว Wrangler จะไปลงอยู๋ใน ~/.cargo/bin/wrangler หลังจากนั้นลองใช้คำสั่งเช็ค version เพื่อทดสอบว่าวสามารถใช้งาน Cli ได้ปกติ

wrangler --version

Create Project

โดยหลังจากที่เรา install เสร็จแล้วตัว cli จะมีตัว create project boiler plate ที่เป็นภาษา Rust ให้เราโดยใช้คำสั่ง

cargo init rust-cf-workerwrangler generate --type=rust rust-cf-worker

หลังจาก เราจะได้ไฟล์ wrangler.toml ให้ set ค่าตามนี้

name = "rust-cf-worker"main = "build/worker/shim.mjs"compatibility_date = "2022-01-20"[vars]WORKERS_RS_VERSION="0.0.9"[build]command = "cargo install -q worker-build --version 0.0.7 && worker-build --release"

กับตัว Cargo.toml

[package]name = "rust-cf-worker"version = "0.1.0"edition = "2021"[lib]crate-type = ["cdylib", "rlib"][dependencies]cfg-if = "0.1.2"worker = "0.0.9"serde_json = "1.0.67"

Step ต่อไปให้ใช้คำสั่งเพื่อ login กับ account Cloudflare เรา

wrangler login

แล้วก็ลองสร้างไฟล์ lib.rs ขึ้นมาใน src เพื่อรอรับ Fetch event จาก Client

Build & Deploy Project

ทดลอง Build Project

wrangler build

ตัว works-rs จะทำการ compile file rust ของเราให้เป็น wasm32-unknown-unknown เพื่อเอา wasm ไป run ใน file js รายละเอียดตาม link ด้านล่าง

จากนั้นเราก็ทำการลอง run ใน local โดยใช้

wrangler dev --local

จากนั้นลอง Curl กันดู

curl http://127.0.0.1:8787/

เรียบร้อยแล้วเราก็ลอง publish

wrangler publish

แล้วเราก็จะได้ Url ของ worker เรามาให้ลองยิงเล่นกัน

https://[project-name].[custom-name].workers.dev

Limitation

  • File bundle ของเราต้องมีขนาดไม่ใหญ่เกิน 10Mb ไม่งั้น deploy ไม่ได้
  • -
https://www.secondstate.io/articles/run-javascript-in-webassembly-02.png

Ref:

https://blog.cloudflare.com/introducing-cloudflare-workers

--

--