摘要: Web 應用(Serverless web backend) 是函數計算很重要的一個使用場景。相比於傳統的在服務器上搭建 web 應用,函數計算無需您管理服務器等基礎設施,只需編寫代碼並上傳,函數計算會爲您準備好計算資源,以 彈性、可靠 的方式運行您的代碼,實現毫秒級別彈性伸縮,輕鬆應對峯值壓力。php
函數計算簡介
阿里雲 函數計算(Function Compute) 是事件驅動的全託管計算服務,是阿里雲的 Serverless 計算平臺。基於函數計算構建應用,您無需管理服務器等基礎設施,而是專一於應用邏輯的開發,大幅提升開發效率。node
藉助函數計算,您幾乎能夠構建任何類型的應用程序或後端服務,包括 Web 應用後端服務,大規模文件處理,數據實時流式處理等等。函數計算能實時彈性伸縮計算資源來匹配您的應用負載,使得您的系統能始終如一的、可靠的支撐業務的高速增加。此外您只需爲實際使用的資源付費,函數未執行則不付費,財務成本顯著減低。python
函數計算碰見 Web 應用
Web 應用(Serverless web backend) 是函數計算很重要的一個使用場景。相比於傳統的在服務器上搭建 web 應用,函數計算無需您管理服務器等基礎設施,只需編寫代碼並上傳,函數計算會爲您準備好計算資源,以 彈性、可靠 的方式運行您的代碼,實現毫秒級別彈性伸縮,輕鬆應對峯值壓力。web
爲了更好地支持 Serverless web backend 的使用場景,提高用戶體驗,函數計算推出 HTTP 觸發器,便可以經過 HTTP 請求觸發函數執行,您只需將業務代碼寫在函數中就能夠搭建 Web 應用,同時,HTTP 觸發器各個編程語言對流行的 Web 框架作了不一樣程度的兼容,方便您將原有服務遷移到函數計算上來,真正實現 一行代碼,一觸即發。編程
HTTP 觸發器
HTTP 觸發器,顧名思義,即 HTTP 請求能夠觸發函數執行。配置 HTTP 觸發器的函數能夠經過 HTTP 請求觸發執行。此時函數能夠看作一個 Web 應用,對 HTTP 請求進行處理,並將處理結果返回給調用端。json
目前函數計算的 HTTP 觸發器支持 nodejs、python、php 等編程語言,並不一樣程度支持對應的 Web 框架,具體內容請參看 參考文檔。後端
使用示例
下面對使用 HTTP 觸發器搭建 Web 應用的示例進行介紹。瀏覽器
搭建基於 HTTP 觸發器的 Web 應用分爲三個步驟:服務器
配置 HTTP 觸發器框架
只有配置了 HTTP 觸發器的函數才能夠對 HTTP 請求進行處理;
值得注意的是配置了 HTTP 觸發器的函數接口與普通函數接口不一樣。
編寫處理函數
編寫處理函數的時候必定注意配置了 HTTP 觸發器的函數接口與普通函數接口不一樣。
測試函數執行
經過向函數 HTTP 發送請求觸發函數執行,並檢驗是否符合預期。
配置 HTTP 觸發器
登陸 函數計算管理控制檯。
新建服務,本示例的服務名稱爲 web-server,所屬區域爲華東2,開啓【高級配置】,配置日誌項目和日誌倉庫,角色建立方式爲新建角色,系統受權模板選擇 AliyunLogFullAccess,點擊 【受權】,點擊【肯定】。
在左側導航欄選擇服務,進入到新建的服務中。
單擊 【建立函數】,在建立函數頁面:
單擊 【選擇所有的語言】,在下拉菜單中選擇開發語言。
選擇 【空白函數】。
按以下圖示配置 HTTP 觸發器,單擊 【下一步】。
認證方式選擇 anonymous,不須要身份驗證,支持匿名訪問。
請求方式爲此函數能夠處理的 HTTP Method。
建立函數並填寫所在服務、函數名稱、描述信息和運行環境信息。
單擊【下一步】。
覈對信息無誤後,單擊【建立】。
配置 HTTP 觸發器更多內容請參考 配置 HTTP 觸發器官方文檔。
編寫函數代碼
以 Python 爲例,一個簡單的示例代碼以下:
import json
HELLO_WORLD = b"Hello world!n"
def handler(environ, start_response):
request_uri = environ['fc.request_uri'] response_body = { 'uri':environ['fc.request_uri'], 'method':environ['REQUEST_METHOD'] } # do something here status = '200 OK' response_headers = [('Content-type', 'text/json')] start_response(status, response_headers) # Python2 return [json.dumps(response_body)] # Python3 tips: When using Python3, the str and bytes types cannot be mixed. # Use str.encode() to go from str to bytes # return [json.dumps(response_body).encode()]
更多編程語言的代碼示例及詳細信息請參考 編寫函數代碼。
短短兩步,基於 HTTP 觸發器的 Web 應用就搭建完成了,下面咱們對函數進行測試,看是否符合咱們的預期。
測試函數執行
您須要向函數發送 HTTP 請求測試函數執行是否符合預期。能夠經過瀏覽器發送 HTTP 請求、curl 發送 HTTP 請求進行測試,控制檯也能夠發送 HTTP 請求方便您的調試。
例如,經過 curl 發送 HTTP 請求觸發函數執行,結果以下:
~ curl https://123456.cn-shanghai.fc...
{"uri": "/2016-08-15/proxy/web-server/testHttp/", "method": "GET"}%
經過控制檯及瀏覽器發送 HTTP 請求請參考文章 測試函數執行。
總結使用 HTTP 觸發器能夠快速搭建基於函數計算的 Web 服務,按量付費,免運維,毫秒級彈性擴容,完美解決用戶痛點。Serverless 時代已來,一行代碼,一觸即發。