零基礎玩轉(zhuǎn)Serverless

上篇文章首先指出了Serverless=No Server這一常見誤區(qū)魁淳,然后明確定義了函數(shù)這個Serverless中的核心概念,接著介紹了Serverless的4個關(guān)鍵特性:運行成本更低蜒程、自動擴縮容、事件驅(qū)動捌蚊、無狀態(tài)性囤踩,最后分析了Serverless和微服務、DevOps之間的關(guān)聯(lián)關(guān)系醇坝。為了幫助大家更直觀的理解Serverless邑跪,本文將介紹三種在AWS Lambda上創(chuàng)建函數(shù)的方式。

1 Hello, AWS Lambda!

1.1 注冊AWS賬戶

首先呼猪,打開Amazon AWS官網(wǎng),點擊右上角注冊按鈕開始注冊流程砸琅。

注冊AWS除了郵箱宋距、地址、手機號(用于接受語音驗證碼)等基本信息之外症脂,還需要綁定一張信用卡(銀聯(lián)谚赎、MasterCard淫僻、VISA),綁卡過程中會發(fā)生一筆1美元的信用卡預授權(quán)扣費壶唤。

注冊成功之后雳灵,即可獲贈AWS免費套餐大禮包,包括12個月免費的基礎IaaS & PaaS服務(比如EC2, S3, RDS等)闸盔,以及永久免費的AWS Lambda免費套餐(包括每月100萬個免費請求以及每月400000GB-秒的計算時間悯辙,對于個人使用而言完全是足夠了)。

1.2 創(chuàng)建函數(shù)

接下來迎吵,就來創(chuàng)建第一個AWS Lambda函數(shù)吧躲撰。

  1. 登錄AWS,點擊最上方的菜單欄服務->計算:Lambda击费,進入Lambda控制臺拢蛋。
  2. 在頁面上找到并點擊創(chuàng)建函數(shù)按鈕。
  3. 作為第一個函數(shù)蔫巩,選擇從頭開始創(chuàng)作谆棱,輸入函數(shù)名稱hello-lambda,運行語言選擇Node.js 6.10圆仔,角色選擇系統(tǒng)默認創(chuàng)建的service-role/admin础锐,點擊創(chuàng)建函數(shù)完成創(chuàng)建。

1.3 簡單測試

新函數(shù)創(chuàng)建好之后荧缘,就可以開始測試了皆警。在函數(shù)詳情頁的右上角找到并點擊測試按鈕,第一次會提示你先創(chuàng)建一個測試事件截粗,輸入名稱信姓,使用默認模板完成創(chuàng)建〕衤蓿回到詳情頁意推,再次點擊測試按鈕,就會觸發(fā)測試珊蟀。測試完成之后菊值,展開詳細信息,就可以看到具體的響應結(jié)果育灸,以及本次測試產(chǎn)生的計費時間腻窒。

1.4 公網(wǎng)測試

函數(shù)詳情頁的測試按鈕是最簡單的一種測試Lambda函數(shù)的方式,但這種方式僅限于AWS內(nèi)網(wǎng)磅崭,如果想在公網(wǎng)環(huán)境下進行測試儿子,該如何操作呢?最自然的方式是綁定API Gateway砸喻,將函數(shù)轉(zhuǎn)化為可公開調(diào)用的API柔逼。

1.4.1 綁定API Gateway

  1. 同樣是函數(shù)詳情頁蒋譬,在左側(cè)找到添加觸發(fā)器,點擊API Gateway愉适,保持默認設置完成添加犯助。
  2. 修改函數(shù)代碼,返回符合API Gateway格式要求的響應結(jié)果维咸,參考這里剂买。
  3. 保存上述改動。
exports.handler = (event, context, callback) => {
    var responseBody = {
        "key3": "value3",
        "key2": "value2",
        "key1": "value1"
    };

    var response = {
        "statusCode": 200,
        "headers": {
            "my_header": "my_value"
        },
        "body": JSON.stringify(responseBody),
        "isBase64Encoded": false
    };
    callback(null, response);
};

示例函數(shù)代碼

點擊最上方的菜單欄服務->網(wǎng)絡和內(nèi)容分發(fā):API Gateway腰湾,進入API Gateway控制臺雷恃,在左側(cè)導航欄應該能夠看到API->LambdaMicroservice,說明函數(shù)已經(jīng)成功綁定费坊。依次點擊API->LambdaMicroservice->階段->prod->/->hello-lambda->GET倒槐,記下調(diào)用URL。

1.4.2 創(chuàng)建用戶

API Gateway默認使用的鑒權(quán)方式是AWS_IAM附井,即調(diào)用方必須擁有特定的IAM Permssions才能調(diào)用API讨越,參考這里。具體來說永毅,需要一個擁有execute-api:Invoke權(quán)限的用戶把跨。

  1. 點擊最上方的菜單欄服務->安全、身份與合規(guī):IAM沼死,進入IAM控制臺着逐。
  2. 點擊左側(cè)導航欄用戶,進入用戶面板意蛀。
  3. 點擊添加用戶按鈕耸别,輸入用戶名,訪問類型選擇編程訪問县钥,點擊下一步:權(quán)限秀姐。
  4. 選擇直接附加現(xiàn)有策略,搜索并選中AmazonAPIGatewayInvokeFullAccess若贮,完成創(chuàng)建省有。
  5. 返回用戶列表頁,點擊剛剛創(chuàng)建的用戶進入用戶詳情頁谴麦,點擊安全證書->創(chuàng)建訪問密鑰蠢沿,記下訪問密鑰 ID私有訪問密鑰

1.4.3 使用Postman測試API

做完前兩步的準備工作细移,就可以使用Postman進行測試了搏予。

  1. 下載并啟動Postman
  2. 創(chuàng)建一個新的請求弧轧,Authorization選擇AWS Signature雪侥,輸入之前記下的URL、AccessKey(訪問密鑰 ID)和SecretKey(私有訪問密鑰)精绎,AWS Region填入URL中緊鄰amazonaws.com的一個子域名速缨,Service Name填入execute-api
  3. 點擊Send代乃,稍等一會旬牲,應該就能看到正常的響應結(jié)果。

進一步信息可參考這里搁吓。

2 加餐一:Spring Cloud Function

除了Node.js原茅,AWS Lambda還支持Java 8、C#尽楔、Go铃彰、Python等多種運行語言趁耗。接下來,就以一個Spring Cloud Function(簡稱SCF)應用為例通贞,展示如何創(chuàng)建一個Java 8的函數(shù)。

SCF是Spring社區(qū)提供的一個以函數(shù)為核心的開發(fā)框架恼五。除了本地運行昌罩,SCF應用還可以部署到AWS、Azure灾馒、OpenWhisk等多種Serverless平臺茎用。最新的發(fā)布版本是1.0.0.M3。

打包應用:

  1. git cloneSCF官方倉庫睬罗。
  2. 進入spring-cloud-function-samples/function-sample-aws目錄轨功,運行mvn clean package
  3. 運行成功后在target目錄下可以找到名為function-sample-aws-1.0.0.BUILD-SNAPSHOT-aws.jar的應用包傅物。

創(chuàng)建函數(shù):

  1. 和之前一樣夯辖,進入Lambda控制臺,點擊創(chuàng)建函數(shù)按鈕董饰,運行語言選擇Java 8蒿褂,完成創(chuàng)建。
  2. 進入函數(shù)詳情頁卒暂,點擊函數(shù)代碼->上傳按鈕啄栓,選擇之前打好的應用包,處理程序改為org.springframework.cloud.function.adapter.aws.SpringBootStreamHandler也祠。
  3. 保存修改昙楚。

測試函數(shù):

  1. 進入函數(shù)詳情頁,點擊右上角的測試按鈕诈嘿,填入{"value": "hello, lambda!"}創(chuàng)建新的測試事件堪旧。
  2. 再次點擊測試按鈕削葱,觸發(fā)第一次測試。不出意外淳梦,第一次測試會提示失敗析砸,錯誤消息類似于errorMessage": "2018-02-04T13:09:59.745Z b1c9b0a1-09ac-11e8-9fdf-858e20f0ff70 Task timed out after 3.00 seconds"。出錯的直接原因是函數(shù)設置的超時時間太短(默認3秒)爆袍,根本原因是函數(shù)的無狀態(tài)性首繁,每次函數(shù)調(diào)用都要經(jīng)歷一次冷啟動,這對于Node應用沒有太大問題陨囊,但對于Java 8應用弦疮,即便是一個最簡單的Hello World應用,完成一次冷啟動至少需要5到10秒蜘醋。
  3. 修改基本設置->內(nèi)存512MB胁塞,基本設置->超時5分鐘,保存然后重新測試堂湖。這一次測試應該可以成功闲先,返回結(jié)果為{"value": "HELLO, LAMBDA!"}

3 加餐二:serverless toolkit

除了直接在AWS后臺創(chuàng)建函數(shù)无蜂,還有一種更為簡便的方式伺糠,使用serverless.com平臺提供的serverless toolkit。

操作非常簡單斥季,這里就不展開了训桶,不過有兩點需要注意:

  • 在將應用部署到AWS之前,先要創(chuàng)建一個擁有AdministratorAccess權(quán)限的用戶酣倾,參考這里舵揭。
  • 默認創(chuàng)建的應用鑒權(quán)為空,即可以在公網(wǎng)直接訪問躁锡。

4 小結(jié)

以上簡單介紹了三種在AWS Lambda上創(chuàng)建函數(shù)的方式午绳,希望對你理解Serverless有所幫助。有關(guān)Serverless其他特性的研究映之,以后有機會我再跟你分享拦焚。歡迎你到我的留言板留言交流,和大家一起過過招杠输。

5 參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赎败,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蠢甲,更是在濱河造成了極大的恐慌僵刮,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搞糕,居然都是意外死亡勇吊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門寞宫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萧福,“玉大人拉鹃,你說我怎么就攤上這事辈赋。” “怎么了膏燕?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵钥屈,是天一觀的道長。 經(jīng)常有香客問我坝辫,道長篷就,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任近忙,我火速辦了婚禮竭业,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘及舍。我一直安慰自己未辆,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布锯玛。 她就那樣靜靜地躺著咐柜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攘残。 梳的紋絲不亂的頭發(fā)上拙友,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音歼郭,去河邊找鬼遗契。 笑死,一個胖子當著我的面吹牛病曾,可吹牛的內(nèi)容都是我干的牍蜂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼知态,長吁一口氣:“原來是場噩夢啊……” “哼捷兰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起负敏,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贡茅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顶考,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡赁还,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驹沿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艘策。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖渊季,靈堂內(nèi)的尸體忽然破棺而出朋蔫,到底是詐尸還是另有隱情,我是刑警寧澤却汉,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布驯妄,位于F島的核電站,受9級特大地震影響合砂,放射性物質(zhì)發(fā)生泄漏青扔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一翩伪、第九天 我趴在偏房一處隱蔽的房頂上張望微猖。 院中可真熱鬧,春花似錦缘屹、人聲如沸凛剥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽当悔。三九已至,卻和暖如春踢代,著一層夾襖步出監(jiān)牢的瞬間盲憎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工胳挎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饼疙,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓慕爬,卻偏偏與公主長得像窑眯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子医窿,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354