1.寫一般的nodejs code
這個範例包含四個檔案,分別是node_module、index.js、package.json、package-lock.json
實際操作流程為
- 新建一個新資料夾
- 在該資料夾中建立一個index.js
- npm init (會建立出一個package.json)
- 安裝所需要的套件
index.js
test();function test(){ console.log("Hello World");}// 這時候在cmd 輸入 node index.js 就會跳出Hello World
但我希望這個API功能不只是Hello World,還可以操作Parse Server,所以我的index.js改成
const Parse = require('parse/node');Parse.initialize(appId);
Parse.serverURL = url;var express = require('express');
var app = express();app.get('/updateTrialSample', function (req, res) {
const query = new Parse.Query(Parse.Object.extend('TrialSample')); query.get(req.query.id).then(trialSample => {
trialSample.set('userName', + 'Ray';
trialSample.save().then(() => res.send('success'));
}).catch(err => {
return res.send('fail:' + err);
});});app.listen(3000);
在cmd輸入 node index.js 後就會啟動這個小server。這隻API只需要傳入 屬於 TrialSample Class中其中一筆資料的 ObjectId ,就會把該筆資料的userName欄位更改為Ray。
2.將一般的nodejs code改成lambda格式
先來看一般的lambda格式
let AWS = require('aws-sdk');
let sns = new AWS.SNS();exports.handler = (event, context, callback) => {function response(statusCode, message) {
return callback(null, {
statusCode: statusCode,
body: JSON.stringify(message),
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
}
}response(200, "Hello world")
};
接著要把剛剛的Code改成這種格式,改完如下
const Parse = require('parse/node');
let AWS = require('aws-sdk');
let sns = new AWS.SNS();exports.handler = (event, context, callback) => {
const { path, queryStringParameters, headers, body } = event;
function response(statusCode, message) {
return callback(null, {
statusCode: statusCode,
body: JSON.stringify(message),
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
}
})
}Parse.initialize(appId);
Parse.serverURL = url;
const query = new Parse.Query(Parse.Object.extend('TrialSample'));
query.get(queryStringParameters.id).then(trialSample => {
trialSample.set('userName', 'ray');
trialSample.save().then(() => response(200, "success"));
}).catch(err => {
response(400, 'fail:' + err);
});
};
這邊要注意的點
1.不需要express,lambda會幫你搞定
2.拿到傳入參數的方式不一樣
req.query.參數名稱 // node.js 拿 params 參數時寫法
而lambda 寫法是
const { path, queryStringParameters, headers, body } = event;
將參數寫在URL上
queryStringParameters.參數名稱
// get的方式(參數寫在url上)
// ex. https://...amazonaws.com/updateTrialSample?id=Ev6sHJaWW
將參數放在Body
body.id
// post的方式(參數寫在Body的raw中,postman格式要選擇JSON)
3.到AWS Lambda上操作將檔案上傳
將剛剛的檔案封裝成.zip後上傳(node_module、index.js、package.json、package-lock.json)
補充:
1.設定測試用參數
2.每次程式有更動記得要先Deploy才會更新
3.如果名稱不是index.js而是app.js的話,要記得更改處理常式名稱,否則系統會不知道要往app.js找
4.如果Server很慢的話,要記得調組態的逾時時間,意思是多久沒反應的話會回報錯誤(預設3秒)。但也要注意執行時間太久的話,收費也會比較高
4.到AWS API Gateway建立一個API指向Lambda
(2023/03/05更新: "到AWS API Gateway建立一個API指向Lambda" 此步驟已不需要,在建function時將Enable function URL勾起來即可)
下為"到AWS API Gateway建立一個API指向Lambda" 原文:
點擊新增整合,將剛剛用的Lambda關聯起來
接著順順的按到最後一步後案建立就可以
完成後會產生出一個URL,這就是API的Base
以這隻範例來說,PostMan要打的位置就是
https://… amazonaws.com/updateTrialSample
5.Debug方式
建立起Lambda後,會自動建一個**CloudWatch。**
可以在這邊找到剛剛新增lambda的日誌,點進去可以看到該lambda的log,也就是說第三步那邊寫的code中的console.log都可以在這邊看到