場景介紹
場景介紹如何使用函數計算服務開發HelloWorld應用。您可以通過控制台或Funcraft工具實作。
背景知識
什麼是Serverless
自2006年8月9日,Google首席執行官埃裡克·施密特(Eric Schmidt)在搜尋引擎大會(SESSanJose2006)首次提出“雲計算”(Cloud Computing)的概念之後,雲計算的發展可以用日新月異這個詞來形容。那麼究竟什麼才是Serverless呢?
簡單來說,Serverless可以說是一種架構,一種雲計算發展的産物,至于具體說什麼是Serverless,可能沒有誰能給他一個明确的概念,如果非要說一個可以稍微容易了解一些的概念,那或許可以參考Martin Fowler在《Serverless Architectures》中對Serverless這樣定義:Serverless=BaaS + FaaS
Serverless架構和傳統的項目的差別
首先,我們以一個常見的Web服務為例:
在這個圖中,伺服器中可能涉及路由規則、鑒權邏輯以及其他各類複雜的業務代碼。同時,開發團隊要付出很大的精力在這個伺服器的運維上面,例如要時刻關注以下問題:
客戶量突然增多時是否需要擴容伺服器。
伺服器上的腳本和業務代碼等是否還在健康運作。
是否有黑客在不斷地對伺服器發起攻擊。
當我們把這個思路切換到Serverless的邏輯之後,變成了這樣:
可以認為,當用戶端和資料庫未發生變化的前提下,伺服器變化巨大。
之前需要開發團隊維護的路由子產品以及鑒權子產品都将接入服務商提供的API網關系統以及鑒權系統,開發團隊無須再維護這兩部分的業務代碼,隻需要持續維護相關規則即可。
在這個結構下,業務代碼也被拆分成了函數粒度,不同函數表示不同的功能。
我們已經看不到伺服器的存在,是因為Serverless的目的是讓使用者隻關注自己的業務邏輯即可,是以一部分安全問題、資源排程問題(例如使用者量暴增、如何實作自動擴容等)全都交給雲廠商負責。
相對于傳統項目而言,傳統項目無論是否有使用者通路,服務都在運作中,都是有成本支出,而Serverless而言,隻有在用去發起請求時,函數才會被激活并且執行,并且會按量收費,相對來說可以在有流量的時候才有支援,沒有流量的時候就沒有支出,相對來說,成本會進一步降低。
通過以上分析和描述,不難看出Serverless架構相對于傳統的開發模式的差別,也逐漸的發現了它的優勢。但是問題來了,很多工作都交給了雲廠商來做,那我們做什麼呢?
步驟一:連接配接ECS伺服器
阿裡雲雲産品資源體驗位址:
https://developer.aliyun.com/adc/scenario/20c4bead7e0b4758a6ab857bce793187場景将提供一台配置了CentOS 7.7的ECS執行個體(雲伺服器)。通過本教程的操作
步驟二:開通函數計算服務
在使用函數計算前,需要開通函數計算服務。
說明: 本場景中提供的阿裡雲子賬号無函數計算服務操作權限,請使用您自己的阿裡雲賬号操作。您無需擔心扣費問題,因為函數計算服務有一定的免費額度,請參見計費方式。
1.使用您自己的阿裡雲賬号登入阿裡雲控制台,然後進入
函數計算産品詳情頁。2.單擊【免費開通】。
- 閱讀《函數計算服務協定》勾選同意服務協定,最後單擊 【立即開通】 。
4.單擊【管理控制台】進入函數計算控制台。
步驟三:在控制台開發函數計算HelloWorld應用
1.在函數計算控制台首頁,單擊【建立函數】。
2.選擇【HTTP函數】,然後單擊【下一步】。
3.參考以下說明填寫函數和觸發器配置,然後單擊【完成】。
- 所在服務:例如hello_world_service。
- 綁定日志:填寫所在服務名稱後預設勾選綁定日志,日志服務會收取少量費用,您可以選擇取消勾選。
- 函數名稱:例如hello_world。
- 運作環境:選擇nodejs10。
- 觸發器名稱:例如hello_world_trigger。
- 認證方式:選擇anonymous。
- 請求方式:選擇GET。
4.在 代碼執行管理 頁面,将index.js檔案中的内容替換為如下所示:
var getRawBody = require('raw-body')
module.exports.handler = function (request, response, context) {
getRawBody(request, function (err, data) {
var respBody = new Buffer.from("你好,世界!");
response.setStatusCode(200)
response.setHeader('content-type', 'text/html')
response.send(respBody)
})
};
替換後如下所示:
- 單擊編輯器右上角【Save Invoke】儲存并運作示例代碼。
可以看到函數運作成功,并傳回: 你好,世界!
步驟四:使用Funcraft開發函數計算HelloWorld應用
Funcraft 是一個用于支援Serverless應用部署的工具,能幫助您便捷地管理函數計算、API 網關和日志服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、建構和部署操作。
本步驟操作将在ECS伺服器上使用Funcraft工具開發函數計算HelloWorld應用。
1.按照以下步驟建立資源。
a. 在頁面左側,單擊 雲産品資源 下拉菜單,檢視本次實驗資源。
b. 單擊 免費開通 建立所需資源。
說明: 資源建立過程需要1~3分鐘。完成實驗資源的建立後,您可以在 雲産品資源 清單檢視已建立的資源資訊,例如:IP位址、使用者名和密碼等。
-
參考以下步驟連接配接ECS伺服器。
a. 打開終端工具。
Windows:打開指令視窗。
MAC:打開指令行終端Terminal。
Windows使用者請檢查系統中是否安裝有SSH工具。檢查方法:
在終端中輸入指令 ssh -V 。
ssh -V
如果顯示SSH版本則表示已安裝,如下圖所示。
如果未安裝,請下載下傳安裝OpenSSH工具。
b. 在終端中輸入連接配接指令ssh [username]@[ipaddress]。您需要将其中的username和ipaddress替換為步驟一中建立的ECS伺服器的彈性公網IP。
例如:
ssh [email protected]
指令顯示結果如下:
c. 輸入 yes。
d. 同意繼續後将會提示輸入登入密碼。 密碼為已建立的雲服務的ECS的登入密碼。
登入成功後會顯示如下資訊。
3.在連接配接到ECS伺服器的終端中執行以下指令安裝NodeJS。
curl -sL https://rpm.nodesource.com/setup_10.x | bash - && yum install -y nodejs
4.執行以下指令安裝Funcraft。
npm install request @alicloud/fun -g
5.執行 fun config 指令進行本地配置。
fun config
請參考以下資訊輸入您的阿裡雲賬号ID、AccessKeyID和AccessKey密鑰等資訊。
Aliyun Account ID:請在賬号安全設定頁面檢視您的賬号ID。
Aliyun Access Key ID和Aliyun Access Key Secret:請在 安全資訊管理 頁面檢視您賬号的AK ID和AK Secret。
如果您使用的是阿裡雲主賬号,請在安全資訊管理頁面的安全提示彈框中單擊繼續使用AccessKey。
如果您使用的是阿裡雲RAM子使用者,需要確定您的子使用者擁有函數計算管理權限 AliyunFCFullAccess ,請參見為RAM使用者授權。
如下圖所示為您的AccessKey ID和AccessKey Secret。如果您的賬号未使用過AccessKey,請單擊右上角建立AccessKey。
Default region name:請選擇開通的函數計算服務所在地域。
正确設定如下所示:
6.執行以下指令建立工作空間。
mkdir demo && cd demo
7.執行 fun init 指令建立一個HTTP函數觸發器。
fun init http-trigger-nodejs10
指令執行結果如下所示:
其中 index.js 檔案為生成的HelloWorld函數模闆,template.yml 檔案中包含了HelloWorld函數和HTTP觸發器的預設配置資訊。
8.參考以下步驟修改 index.js 檔案内容。
a. 将 index.js 檔案内容清空。
cat /dev/null > index.js
b. 使用vim打開 index.js 檔案。
vim index.js
c. 按下 i 鍵進入vim的編輯模式,在檔案中新增以下内容。
var getRawBody = require('raw-body')
module.exports.handler = function (request, response, context) {
getRawBody(request, function (err, data) {
var respBody = new Buffer.from("你好,世界!");
response.setStatusCode(200)
response.setHeader('content-type', 'text/html')
response.send(respBody)
})
};
d. 按下 esc 鍵進入指令模式,輸入 :wq 儲存并退出vim。
9.執行 fun deploy -y 指令部署應用到函數計算服務。
fun deploy -y
至此,我們完成了一個HTTP觸發器的函數部署。此時,我們可以打開HTTP觸發器的預設URL,浏覽器會以檔案形式将函數響應内容下載下傳到本地,您可以參考步驟四使用控制台線上調試。或者您可以綁定一個自定義域名以避免該問題,請參見綁定自定義域名。