Serverless Functions ဆိုတာဘာလဲ
ကိုယ် 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 ထဲမှာရှိတယ်လို့ညွန်းပေးတဲ့သဘောပါ
ဝင်ဖတ်သွားတဲ့အတွက် ကျေးဇူးပါ တစ်ခုခုရသွားမယ်လို့တော့မျော်လင့်ပါတယ်။ ✌🏻