函數計算支持應用型負載均衡ALB(Application Load Balancer)作為事件源,即支持將函數計算設置為ALB的后端服務。ALB會將請求轉發到函數計算中的函數,并且同步返回函數調用結果。本文介紹如何配置ALB觸發函數執行。
前提條件
使用限制
- ALB實例和函數計算服務屬于同一個地域。
- 函數計算作為ALB后端服務器的使用限制:
- 僅支持創建通過HTTP請求觸發的函數。
- 函數計算要求客戶端在訪問函數時,HTTP請求頭中包含Date頭域。Date頭域表示消息發送的時間。
- ALB使用函數計算的使用限制:
- ALB中服務器組類型選擇函數計算類型,且后端服務器組和監聽僅支持HTTP協議。
- ALB僅支持添加一個函數計算作為后端服務器。
步驟一:編寫函數代碼并測試
- 登錄函數計算控制臺,在左側導航欄,單擊服務及函數。
- 在頂部菜單欄,選擇地域,然后在服務列表頁面,單擊目標服務。
- 在函數管理頁面,單擊目標函數名稱。
- 在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中編寫代碼,然后單擊部署代碼。代碼修改示例如下。
var getRawBody = require('raw-body'); var getFormBody = require('body/form'); var body = require('body'); /* To enable the initializer feature please implement the initializer function as below: exports.initializer = (context, callback) => { console.log('initializing'); callback(null, ''); }; */ exports.handler = (req, resp, context) => { console.log('hello world'); var params = { path: req.path, queries: req.queries, headers: req.headers, method : req.method, requestURI : req.url, clientIP : req.clientIP, log : ("Hello World.This is FC!"), } getRawBody(req, function(err, body) { for (var key in req.queries) { var value = req.queries[key]; resp.setHeader(key, value); } resp.setHeader("Content-Type", "text/plain"); params.body = body.toString(); resp.send(JSON.stringify(params, null, ' ')); }); /* getFormBody(req, function(err, formBody) { for (var key in req.queries) { var value = req.queries[key]; resp.setHeader(key, value); } params.body = formBody; console.log(formBody); resp.send(JSON.stringify(params)); }); */ }
- 單擊函數代碼頁簽的測試函數。執行完成后,您可以在函數代碼頁簽的上方查看執行結果。
步驟二:創建函數計算類型的服務器組
- 登錄應用型負載均衡ALB控制臺。
- 在頂部菜單欄選擇所屬地域。本文選擇華東1(杭州)。
- 在左側導航欄,選擇 。
- 在服務器組頁面,單擊創建服務器組,完成以下配置,然后單擊創建。
配置項 說明 服務器組類型 選擇服務器組類型。本文選擇函數計算類型。 服務器組名稱 自定義。 選擇后端協議 選擇一種后端協議。本文選擇HTTP。 選擇資源組 選擇歸屬的資源組。 配置健康檢查 開啟健康檢查 開啟或關閉健康檢查。本文保持默認配置,即關閉健康檢查。 高級配置 如果需要開啟健康檢查,請按需修改高級配置中的信息。更多信息,請參見創建和管理服務器組。 - 在服務器組頁面,找到目標服務器組,然后在操作列單擊編輯后端服務器。
- 在后端服務器頁簽,單擊設置函數計算。
- 在添加后端服務器面板,選擇以下任意一種方式完成配置,然后單擊確定。
- 通過選擇資源
配置項 說明 配置方式 選擇通過選擇資源。 服務 選擇目標函數所屬的服務。 版本 選擇LATEST。新創建的服務,默認只有一個LATEST版本。 函數 選擇目標函數。 備注 自定義。 - 通過ARN配置
配置項 說明 配置方式 選擇通過ARN配置。 ARN 輸入目標函數的ARN。關于如何獲取函數ARN,請參見獲取函數ARN。 備注 自定義。
添加后端服務器面板會顯示添加成功!,單擊關閉,您可以在后端服務器頁簽,查看已配置的后端服務器。 - 通過選擇資源
步驟三:創建ALB實例并配置監聽
- 登錄應用型負載均衡ALB控制臺。
- 在頂部菜單欄選擇所屬地域。本文選擇華東1(杭州)。
- 在實例頁面,單擊創建應用型負載均衡。
- 在應用型負載均衡(按量付費)購買頁面,完成參數配置。此處僅列出和本文強相關的配置項。關于其余參數的配置,請參見創建應用型負載均衡。
- 地域:本文選擇華東1(杭州)。
- 實例網絡類型:本文選擇公網。
- 在實例頁面,找到已創建的ALB實例,在目標實例操作列下單擊創建監聽,然后打開監聽配置向導。
- 在配置監聽配置向導,完成以下配置,然后單擊下一步。
配置項 說明 選擇負載均衡協議 選擇監聽的協議類型。 本文選擇HTTP。 監聽端口 輸入用來接收請求并向后端服務器進行請求轉發的監聽端口,端口范圍為[1,65535]。本文輸入80。 監聽名稱 自定義。 高級配置 本文使用默認配置。 - 在選擇服務器組配置向導的選擇服務器組下拉列表,選擇函數計算類型,并選擇步驟二:創建函數計算類型的服務器組創建的后端服務器組,然后單擊下一步。
- 在配置審核配置向導,確認配置信息,單擊提交。
步驟四:連通性測試
完成上述操作后,函數計算和ALB已經建立了連接。您可以通過以下操作,測試函數計算和ALB的連通性。
- 打開命令行窗口,執行curl - v命令獲取Date頭域。函數計算要求HTTP訪問請求頭中包含Date頭域。
curl -v <ALB實例域名>
- 執行curl - H命令,嘗試訪問ALB實例的域名。
curl -H "Date頭域" <ALB實例域名>
如下圖所示,收到如下所示的回復報文,則表示ALB可以將請求轉發至函數計算并調用函數。
更多信息
除了函數計算控制臺,您還可通過以下方式配置觸發器:
- 通過Serverless Devs工具配置觸發器。更多操作,請參見Serverless Devs。
- 通過SDK配置觸發器。更多操作,請參見SDK列表。
如需對創建的觸發器進行修改或刪除,請參見觸發器管理。