Ronald Aug . 23 Aug 2022

Serverless Functions ဆိုတာဘာလဲ

28 minutes read

ကိုယ် run ချင်တဲ့ node js functions တွေကို အလွယ်တကူ run လို့ရတာမျိုးဖြစ်ပါတယ်။

ဘာလို့ serverless function မျိုးလိုအပ်တာလဲ ? 

ဥပမာ ကျနော်က hello world ဆိုတဲ့ express app လေးတစ်ခုပဲ run ချင်တယ်ဆိုပါစို့ အဲဒါကို

  • dedicated server တစ်ခုဝယ်ရတယ်

  • dns တွေချိတ်ရတယ်

  • server configuration တွေအများကြီးလုပ်ရတယ်

  • cpanel / cyberpanel တွေကိုထည့်ရတယ်

  • server အတွက် လစဥ်ကြေးပေးရတယ်

  • maintain လုပ်တာ update လုပ်တာစတာတွေကိုုုလည်းလုုုုုုုုုုပ်ရတယ်။

တကယ်လိုများ hello world ဆိုတဲ့ js function တစ်ခုတည်းကိုပဲ deploy လုပ်ရမယ် အပေါ်က server ဝယ်တာ config လုပ်တာ စတဲ့အဆင့်တွေဘာမှလုပ်စရာမလို၊ ပိုက်ဆံလည်းတစ်ပြားမှ မကုန်၊ hello world app ချင်းအတူတူရမယ်ဆို ရှယ်မိုက်တယ်မလား? 😁

ဟုတ်ကဲ့ ... အဲဒါ serverless functions နဲ့ရနိုင်ပါတယ်

ဘာကြောင့် ပိုက်ဆံမပေးရတာလဲ?

Netlify functions က Amazon ရဲ့ AWS Lamdba ကိုသုံးထားတာဖြစ်တဲ့အတွက် compute time တစ်ခုရှိပါတယ် အဲဒီ compute time ကပုံမှန်အားဖြင့် free ကိုအများကြီးပေးထားပါတယ် ကိုယ်တကယ်သုံးတဲ့အချိန်မှကိုယ့်ရဲ့ app ကို run ပေးတာဖြစ်တဲ့အတွက် server charge မကုန်တော့တာဖြစ်ပါတယ် free ဆိုပေမယ့် pay as you go plan လည်းရှိပါတယ် အများကြီးသုံးမှသာပေးရတာမျိုးဖြစ်ပါတယ်။ 

Serverless functions ဘယ်လိုရေးရတာလဲ?

အရင်ဆုံးကတော့ ကိုယ့် project ထဲမှာ functions ဆိုတဲ့ folder လေးဆောက်ပေးရပါတယ် ပြီးတော့ ကိုယ့် js file တစ်ခုချင်းစီကိုအဲဒီထဲထည့်လိုက်တာနဲ့ auto route တစ်ခုအဖြစ်ပြောင်းပေးပါတယ် ဥပမာ cars.js လို့ပေးမယ်ဆို api/cars ဆိုတဲ့ route ကိုပစ်လိုက်ရင် အဲဒီ cars.js file ထဲက function ထဲဖြတ်လာမှာပဲဖြစ်ပါတယ်။ 

အထဲမှာကတော့ ပုံမှန်ကျနော်တို့ express.js တွေရေးရင် route ကြေငြာသလိုမျိုးပဲရေးရပါတယ်။ 

Serverless Functions အဓိကလုပ်ဆောင်တဲ့အဆင့်တွေကတော့ 

  • request

  • process my function

  • response

ဒီအဆင့်လေး ၃ ဆင့်လောက်ပါပဲ။ 

Serverless functions တွေကိုဘယ်မှာစမ်းလို့ရသလဲ

Serverless Functions တွေကို Vercel, Digital Occean, Firebase, Netlify, Glitch တို့တွေမှာစမ်းသပ်လို့ရပါတယ်။ 

ဒီ post မှာတော့ကျနော် Netlify serverless function တစ်ခုတည်းကိုပြောပြပေးသွားမှာပဲဖြစ်ပါတယ်။

______________________________________________

Netlify serverless functions

Function တစ်ခုမှာ event နဲ့ context တွေပါပါတယ် အသေးစိတ်ကို netlify functions docs မှလည်းဖတ်နိုင်ပါတယ်

ဥပမာ function

exports.handler = async function(event,context){

  // do some api logic here

}

request ကနေ api parameter ဘယ်လိုဖမ်းမလဲ

event ထဲက queryStringParameters နဲ့ ဖမ်းလို့ရပါတယ်

ဥပမာ GET parameter

exports.handler = async function(event,context){

     const user_id = event.queryStringParameters.user_id;

}

ဒီဥပမာမှာ user_id ဆိုတဲ့ parameter ဖမ်းပြထားပါတယ်။

ဥပမာ POST parameter

exports.handler = async function(event,context){

     const {user_id} = JSON.parse(event.body);

}

response ဘယ်လိုပြန်မလဲ

e.g

return {

        statusCode:code,

        body:JSON.stringify(data)

    }

Cors ဖွင့်ထားချင်တယ်ဆို ဒီလိုလေးဖွင့်လို့ရပါတယ်

const headers = {

  'Access-Control-Allow-Origin': '*',

  'Access-Control-Allow-Headers': 'Content-Type',

  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE'

};

 

// Check condition

if (event.httpMethod !== 'POST') {

    // To enable CORS

    return {

      statusCode: 200, // <-- Important!

      headers,

      body: 'This was not a POST request!'

    };

 }

client side က ပစ်ရမယ့် URL

/.netlify/functions/my-func

 

Pretty API URL

API URL ကိုကြည့်လှအောင်ပြောင်းချင်တယ်ဆို အောက်က config ကို netlify.toml ထဲထည့်လိုက်ပါ

အဲဒါဆို /.netlify/functions/my-func လိုမဟုတ်တော့ပဲ /api/my-func ကိုပြောင်းပစ်လို့ရပါပြီ

[[redirects]]

  from = "/api/*"

  to = "/.netlify/functions/:splat"

  status = 200

 


function ကိုဘယ်မှာရေးရသလဲ

functions တွေကို folder တစ်ခုထဲမှာ စုရေးလို့ရပါတယ် ဒါပေမယ့် folder ကိုတော့ netlify.toml ဆိုတဲ့ config ထဲမှာပြန် point လုပ်ပေးရပါမယ်


netlify.toml ဆိုတာဘာလဲ

netlify.toml ဆိုတာ netlify configuration နဲ့ဆိုင်တဲ့ file ပါ root folder ထဲမှာရေးပေးရပါတယ်

ဥပမာ netlify.toml

[build]

functions = 'my-func'

publish = 'src'

 

ဒီနေရာမှာ [build] ဆိုတာ project data တွေကို netlify ပေါ်တင်ရင် build လုပ်ပေးတဲ့အချိန်ပါ

functions

build လုပ်တုန်းမှာ netlify ကို functions တွေဟာ my-func ဆိုတဲ့ folder ထဲမှာရှိတယ်လို့ညွန်းပေးတဲ့သဘောပါ

publish

အောက်က publish ကတော့ build လုပ်တုန်းမှာ netlify ကို publish လွင့်တင်မယ့် code တွေဟာ src ဆိုတဲ့ folder ထဲမှာရှိတယ်လို့ညွန်းပေးတဲ့သဘောပါ

 

ဝင်ဖတ်သွားတဲ့အတွက် ကျေးဇူးပါ တစ်ခုခုရသွားမယ်လို့တော့မျော်လင့်ပါတယ်။ ✌🏻

Hello!


လာရောက်လည်ပတ်တဲ့အတွက် ကျေးဇူးပါ။
ကျနော်တို့ dev team ကလူတွေရဲ့ အတွေ့အကြုံတွေထဲက ကောင်းရာ ဆိုးရာများကို
ရေးသားထားသော articles များသာဖြစ်ပါတယ်။ ✌🏻
___

August Host သင်တန်းကိစ္စများစုံစမ်းလိုပါက
http://augusthost.com/register
မှာ form ဖြည့်သွင်းထားလို့ရပါတယ်။