全部產品
Search
文件中心

Function Compute:ALB觸發器

更新時間:Jul 06, 2024

Function Compute支援應用型負載平衡ALB(Application Load Balancer)作為事件來源,即支援將Function Compute設定為ALB的後端服務。ALB會將請求轉寄到Function Compute中的函數,並且同步返回函數調用結果。本文介紹如何配置ALB觸發函數執行。

前提條件

使用限制

  • ALB執行個體和函數屬於同一個地區。

  • Function Compute作為ALB後端伺服器時的使用限制:

    • 僅支援建立處理HTTP請求的函數。

    • Function Compute要求用戶端在訪問函數時,HTTP要求標頭中包含Date頭域。Date頭域表示訊息發送的時間。

  • ALB使用Function Compute時的使用限制:一個ALBFunction Compute類型伺服器組僅支援添加一個函數作為後端伺服器。

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

  1. 登入Function Compute控制台,在左側導覽列,單擊服務及函數
  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. 單擊函數代碼頁簽的測試函數
    執行完成後,您可以在函數代碼頁簽的上方查看執行結果。

步驟二:建立Function Compute類型的伺服器組

  1. 登入應用型負載平衡ALB控制台
  2. 在頂部功能表列選擇所屬地區。本文選擇華東1(杭州)

  3. 在左側導覽列,選擇應用型負載平衡 ALB > 伺服器組

  4. 伺服器組頁面,單擊建立伺服器組,完成以下配置,然後單擊建立
    Function Compute類型伺服器組
    配置項說明
    伺服器群組類型選擇伺服器群組類型。本文選擇Function Compute類型
    伺服器組名稱自訂。
    選擇後端協議選擇一種後端協議。本文選擇HTTP
    選擇資源群組選擇歸屬的資源群組。
    配置健全狀態檢查
    開啟健全狀態檢查開啟或關閉健全狀態檢查。本文保持預設配置,即關閉健全狀態檢查。
    進階配置如果需要開啟健全狀態檢查,請按需修改進階配置中的資訊。更多資訊,請參見建立和管理伺服器組
  5. 伺服器組頁面,找到目標伺服器組,然後在操作列單擊編輯後端伺服器

  6. 後端伺服器頁簽,單擊設定Function Compute

  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. 選擇伺服器組設定精靈的選擇伺服器組下拉式清單,選擇Function Compute類型,並選擇步驟二:建立Function Compute類型的伺服器組建立的後端伺服器組,然後單擊下一步
  8. 組態稽核設定精靈,確認配置資訊,單擊提交

步驟四:連通性測試

完成上述操作後,Function Compute和ALB已經建立了串連。您可以通過以下操作,測試Function Compute和ALB的連通性。

  1. 開啟命令列視窗,執行curl -v <ALB執行個體網域名稱>命令擷取Date頭域。

    Function Compute要求HTTP訪問要求標頭中包含Date頭域。

    image.png

  2. 執行curl -H "Date頭域" <ALB執行個體網域名稱>命令,嘗試訪問ALB執行個體的網域名稱。

    如下圖所示,收到如下所示的回複報文,則表示ALB可以將請求轉寄至Function Compute並調用函數。ALB支援Function Compute驗證結果

更多資訊

除了Function Compute控制台,您還可通過以下方式配置觸發器:

  • 通過Serverless Devs工具配置觸發器。更多操作,請參見Serverless Devs

  • 通過SDK配置觸發器。更多操作,請參見SDK列表

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