函數計算支持DataHub作為觸發源。當有請求到達Connector設置為函數計算的阿里云流式數據服務DataHub時,DataHub會觸發函數的執行。函數計算會將執行結果返回給DataHub。本文介紹如何配置DataHub觸發函數執行,包括配置函數的入口參數、編寫函數代碼并測試等。

前提條件

使用限制

DataHub為單向觸發器,只支持在事件源端配置觸發器。操作路徑如下。

登錄DataHub服務控制臺,在項目列表頁面,單擊目標項目名稱進入詳情頁面。在新建Topic面板,成功配置相關信息后,在Topic列表頁簽,單擊已創建的Topic名稱進入詳情頁面。sc_create_topic_for_datahub_trigger

然后在Topic詳情頁面,單擊右上角的同步,通過創建函數計算Connector的方式配置數據同步功能,便可以在函數計算中使用DataHub數據。

sc_datahub_trigger

步驟一:配置函數入口測試參數

DataHub觸發函數執行時,同步的信息以event的形式作為輸入參數,通過同步調用的方式傳給函數。您可以將DataHub傳入的event信息作為參數,調試函數代碼編寫是否正確。

  1. 登錄函數計算控制臺,在左側導航欄,單擊服務及函數
  2. 在頂部菜單欄,選擇地域,然后在服務列表頁面,單擊目標服務。
  3. 函數管理頁面,單擊目標函數名稱。
  4. 在函數詳情頁面,單擊函數代碼頁簽,然后單擊xialatubiao圖標,從下拉列表中,選擇配置測試參數
  5. 配置測試參數面板,選擇創建新測試事件編輯已有測試事件頁簽,填寫事件名稱和事件內容。然后單擊確定
    event格式示例如下所示。參數的詳細信息,請參見event結構定義
    {
      "eventSource": "acs:datahub",
      "eventName": "acs:datahub:putRecord",
      "eventSourceARN": "/projects/test_project_name/topics/test_topic_name",
      "region": "cn-hangzhou",
      "records": [
        {
          "eventId": "0:12345",
          "systemTime": 1463000123000,
          "data": "[\"col1's value\",\"col2's value\"]"
        },
        {
          "eventId": "0:12346",
          "systemTime": 1463000156000,
          "data": "[\"col1's value\",\"col2's value\"]"
        }
      ]
    }

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

  1. 登錄函數計算控制臺,在左側導航欄,單擊服務及函數
  2. 在頂部菜單欄,選擇地域,然后在服務列表頁面,單擊目標服務。
  3. 函數管理頁面,單擊目標函數名稱。
  4. 在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中編寫代碼,然后單擊部署代碼
    本文以Python 3.6為例。
    # -*- coding: utf-8 -*-
    import logging
    import json
    
    # To enable the initializer feature
    # please implement the initializer function as below:
    # def initializer(context):
    #   logger = logging.getLogger()
    #   logger.info('initializing')
    
    def handler(event, context):
      logger = logging.getLogger()
      logger.info('hello world')
      # parse and handle event here
      # evt = json.loads(event) 
      logger.info(event)
      return 'hello world'
  5. 單擊函數代碼頁簽的測試函數
    執行完成后,您可以在函數代碼頁簽的上方查看執行結果。