1. 程式人生 > >函式計算搭建 Serverless Web 應用(一)- HTTP 觸發器

函式計算搭建 Serverless Web 應用(一)- HTTP 觸發器

摘要: Web 應用(Serverless web backend) 是函式計算很重要的一個使用場景。相比於傳統的在伺服器上搭建 web 應用,函式計算無需您管理伺服器等基礎設施,只需編寫程式碼並上傳,函式計算會為您準備好計算資源,以 彈性、可靠 的方式執行您的程式碼,實現毫秒級別彈性伸縮,輕鬆應對峰值壓力。

函式計算簡介

阿里雲 函式計算(Function Compute) 是事件驅動的全託管計算服務,是阿里雲的 Serverless 計算平臺。基於函式計算構建應用,您無需管理伺服器等基礎設施,而是專注於應用邏輯的開發,大幅提高開發效率。

藉助函式計算,您幾乎可以構建任何型別的應用程式或後端服務,包括 Web 應用後端服務,大規模檔案處理,資料實時流式處理等等。函式計算能實時彈性伸縮計算資源來匹配您的應用負載,使得您的系統能始終如一的、可靠的支撐業務的高速增長。此外您只需為實際使用的資源付費,函式未執行則不付費,財務成本顯著減低。

函式計算遇見 Web 應用

Web 應用(Serverless web backend) 是函式計算很重要的一個使用場景。相比於傳統的在伺服器上搭建 web 應用,函式計算無需您管理伺服器等基礎設施,只需編寫程式碼並上傳,函式計算會為您準備好計算資源,以 彈性可靠 的方式執行您的程式碼,實現毫秒級別彈性伸縮,輕鬆應對峰值壓力。

為了更好地支援 Serverless web backend 的使用場景,提升使用者體驗,函式計算推出 HTTP 觸發器,即可以通過 HTTP 請求觸發函式執行,您只需將業務程式碼寫在函式中就可以搭建 Web 應用,同時,HTTP 觸發器各個程式語言對流行的 Web 框架做了不同程度的相容,方便您將原有服務遷移到函式計算上來,真正實現 一行程式碼,一觸即發

HTTP Trigger.png

HTTP 觸發器

HTTP 觸發器,顧名思義,即 HTTP 請求可以觸發函式執行。配置 HTTP 觸發器的函式可以通過 HTTP 請求觸發執行。此時函式可以看做一個 Web 應用,對 HTTP 請求進行處理,並將處理結果返回給呼叫端。

目前函式計算的 HTTP 觸發器支援 nodejs、python、php 等程式語言,並不同程度支援對應的 Web 框架,具體內容請參看 參考文件

使用示例

下面對使用 HTTP 觸發器搭建 Web 應用的示例進行介紹。

搭建基於 HTTP 觸發器的 Web 應用分為三個步驟:

  • 配置 HTTP 觸發器

    • 只有配置了 HTTP 觸發器的函式才可以對 HTTP 請求進行處理;
    • 值得注意的是配置了 HTTP 觸發器的函式介面與普通函式介面不同。
  • 編寫處理函式

    • 編寫處理函式的時候一定注意配置了 HTTP 觸發器的函式介面與普通函式介面不同。
  • 測試函式執行

    • 通過向函式 HTTP 傳送請求觸發函式執行,並檢驗是否符合預期。

配置 HTTP 觸發器

  1. 新建服務,本示例的服務名稱為 web-server,所屬區域為華東2,開啟【高階配置】,配置日誌專案和日誌倉庫,角色建立方式為新建角色,系統授權模板選擇 AliyunLogFullAccess,點選 【授權】,點選【確定】。
  2. 在左側導航欄選擇服務,進入到新建的服務中。
  3. 單擊 【建立函式】,在建立函式頁面:

    1. 單擊 【選擇全部的語言】,在下拉選單中選擇開發語言。
    2. 選擇 【空白函式】。
    3. 按如下圖示配置 HTTP 觸發器,單擊 【下一步】。

      • 認證方式選擇 anonymous,不需要身份驗證,支援匿名訪問。
      • 請求方式為此函式可以處理的 HTTP Method。HTTP 觸發器配置示例
    4. 建立函式並填寫所在服務、函式名稱、描述資訊和執行環境資訊。
    5. 單擊【下一步】。
    6. 核對資訊無誤後,單擊【建立】。

編寫函式程式碼

以 Python 為例,一個簡單的示例程式碼如下:

# -*- coding: utf-8 -*-
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.aliyuncs.com/2016-08-15/proxy/web-server/testHttp/
{"uri": "/2016-08-15/proxy/web-server/testHttp/", "method": "GET"}%

通過控制檯及瀏覽器傳送 HTTP 請求請參考文章 測試函式執行

總結

使用 HTTP 觸發器可以快速搭建基於函式計算的 Web 服務,按量付費,免運維,毫秒級彈性擴容,完美解決使用者痛點。 Serverless 時代已來,一行程式碼,一觸即發。

參考文件