Cloud Tunneling เปิดเครื่อง Dev สู่โลกภายนอก

สมมติเราอยากรัน Web Server ที่เครื่องของเรา เช่น เพื่อทดสอบ API ที่ต้องใช้ Webhook เช่น Facebook Messaging Platform แต่ติดเงื่อนไขต่าง ๆ เช่น

  1. ไม่มีเครื่องบน Cloud ที่มี Public IP
  2. เครื่องที่ใช้ทำงานอยู่หลัง Firewall หรือ NAT
ทางออกคือ tunnel ออกไป แต่ใครจะเป็นฝั่งปลายทางที่จะรับ HTTP/HTTPS request แล้วส่งต่อมาให้เราหล่ะ? ngrok เป็นทางเลือกที่ดีครับ โดยเจ้า ngrok จะทำการ เชื่อมระหว่าง ngrok server กับเครื่องที่เราทำงานโดยตรง เช่นถ้าเราต้องการ run NodeJS app port 5000 ด้วย HTTPS เท่านั้น ก็สั่ง
ngrok http -bind-tls=true localhost:5000
แล้วเราจะได้ Tunnel URL มาเช่น https://b1234as.ngrok.io เราก็สามารถเอาเจ้า URL ไปลงทะเบียนกับ webhook ได้ เมื่อมี HTTP/HTTPS request ที่ยิงมาจาก webhook เราก็จะได้รับเหมือน web request ทั่วไป



Downsides

วิธีนี้ก็มีข้อเสียเหมือนกัน คือ
  1. ข้อมูลของคุณวิ่งผ่าน ngrok ทั้งหมด ต้องไม่ลืมว่านี่ไม่ใช่แค่ redirect แต่เป็น tunnel เลยแต่การนี้คือเพื่อ dev พอจะขึ้น production ก็ต้องเปิด public IP ในที่สุด
  2. URL เปลี่ยนทุกครั้งที่ run ngrok ทำให้ต้องไล่ update ทะเบียน webhook แน่นอนว่า คุณจ่าย $5 ต่อเดือนเพื่อจอง domain ได้

Comments