函數計算支持應用型負載均衡ALB(Application Load Balancer)作為事件源,即支持將函數計算設置為ALB的后端服務。ALB會將請求轉發到函數計算中的函數,并且同步返回函數調用結果。本文介紹如何配置ALB觸發函數執行。

前提條件

使用限制

  • ALB實例和函數計算服務屬于同一個地域。
  • 函數計算作為ALB后端服務器的使用限制:
    • 僅支持創建通過HTTP請求觸發的函數。
    • 函數計算要求客戶端在訪問函數時,HTTP請求頭中包含Date頭域。Date頭域表示消息發送的時間。
  • ALB使用函數計算的使用限制:
    • ALB中服務器組類型選擇函數計算類型,且后端服務器組和監聽僅支持HTTP協議。
    • ALB僅支持添加一個函數計算作為后端服務器。

步驟一:編寫函數代碼并測試

  1. 登錄函數計算控制臺,在左側導航欄,單擊服務及函數
  2. 在頂部菜單欄,選擇地域,然后在服務列表頁面,單擊目標服務。
  3. 函數管理頁面,單擊目標函數名稱。
  4. 在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中編寫代碼,然后單擊部署代碼
    代碼修改示例如下。
    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));
        });
        */
    }
  5. 單擊函數代碼頁簽的測試函數
    執行完成后,您可以在函數代碼頁簽的上方查看執行結果。

步驟二:創建函數計算類型的服務器組

  1. 登錄應用型負載均衡ALB控制臺
  2. 在頂部菜單欄選擇所屬地域。本文選擇華東1(杭州)
  3. 在左側導航欄,選擇應用型負載均衡ALB > 服務器組
  4. 服務器組頁面,單擊創建服務器組,完成以下配置,然后單擊創建
    函數計算類型服務器組
    配置項說明
    服務器組類型選擇服務器組類型。本文選擇函數計算類型
    服務器組名稱自定義。
    選擇后端協議選擇一種后端協議。本文選擇HTTP
    選擇資源組選擇歸屬的資源組。
    配置健康檢查
    開啟健康檢查開啟或關閉健康檢查。本文保持默認配置,即關閉健康檢查。
    高級配置如果需要開啟健康檢查,請按需修改高級配置中的信息。更多信息,請參見創建和管理服務器組
  5. 服務器組頁面,找到目標服務器組,然后在操作列單擊編輯后端服務器
  6. 后端服務器頁簽,單擊設置函數計算
  7. 添加后端服務器面板,選擇以下任意一種方式完成配置,然后單擊確定
    • 通過選擇資源
      配置項說明
      配置方式選擇通過選擇資源
      服務選擇目標函數所屬的服務。
      版本選擇LATEST。新創建的服務,默認只有一個LATEST版本。
      函數選擇目標函數。
      備注自定義。
    • 通過ARN配置
      配置項說明
      配置方式選擇通過ARN配置
      ARN輸入目標函數的ARN。關于如何獲取函數ARN,請參見獲取函數ARN
      備注自定義。
    添加后端服務器面板會顯示添加成功!,單擊關閉,您可以在后端服務器頁簽,查看已配置的后端服務器。

步驟三:創建ALB實例并配置監聽

  1. 登錄應用型負載均衡ALB控制臺
  2. 在頂部菜單欄選擇所屬地域。本文選擇華東1(杭州)
  3. 實例頁面,單擊創建應用型負載均衡
  4. 應用型負載均衡(按量付費)購買頁面,完成參數配置。
    此處僅列出和本文強相關的配置項。關于其余參數的配置,請參見創建應用型負載均衡
    • 地域:本文選擇華東1(杭州)
    • 實例網絡類型:本文選擇公網
  5. 實例頁面,找到已創建的ALB實例,在目標實例操作列下單擊創建監聽,然后打開監聽配置向導。
  6. 配置監聽配置向導,完成以下配置,然后單擊下一步
    配置項說明
    選擇負載均衡協議選擇監聽的協議類型。 本文選擇HTTP
    監聽端口輸入用來接收請求并向后端服務器進行請求轉發的監聽端口,端口范圍為[1,65535]。本文輸入80
    監聽名稱自定義。
    高級配置本文使用默認配置。
  7. 選擇服務器組配置向導的選擇服務器組下拉列表,選擇函數計算類型,并選擇步驟二:創建函數計算類型的服務器組創建的后端服務器組,然后單擊下一步
  8. 配置審核配置向導,確認配置信息,單擊提交

步驟四:連通性測試

完成上述操作后,函數計算和ALB已經建立了連接。您可以通過以下操作,測試函數計算和ALB的連通性。

  1. 打開命令行窗口,執行curl - v命令獲取Date頭域。
    函數計算要求HTTP訪問請求頭中包含Date頭域。
    curl -v <ALB實例域名>
    獲取時間
  2. 執行curl - H命令,嘗試訪問ALB實例的域名。
    curl -H "Date頭域" <ALB實例域名>
    如下圖所示,收到如下所示的回復報文,則表示ALB可以將請求轉發至函數計算并調用函數。ALB支持函數計算驗證結果

更多信息

除了函數計算控制臺,您還可通過以下方式配置觸發器:
  • 通過Serverless Devs工具配置觸發器。更多操作,請參見Serverless Devs
  • 通過SDK配置觸發器。更多操作,請參見SDK列表

如需對創建的觸發器進行修改或刪除,請參見觸發器管理