表格儲存觸發函式計算示例之Nodejs/Php/JavaRuntime

rsong發表於2018-11-21

前言

函式計算(Function Compute)是一個事件驅動的服務,通過函式計算,使用者無需管理伺服器等執行情況,只需編寫程式碼並上傳。函式計算準備計算資源,並以彈性伸縮的方式執行使用者程式碼,而使用者只需根據實際程式碼執行所消耗的資源進行付費。Table Store Stream是用於獲取Table Store表中增量資料的一個資料通道,通過建立Table Store觸發器,能夠實現Table Store Stream和函式計算的自動對接,從而實現OTS資料發生變更時候定製化的自動處理。具體可以檢視表格儲存觸發函式計算官方教程,但是該官方教程只有python版的程式碼示例,本教程作為補充,通過程式碼示例說明在其他runtime下怎麼玩轉Table Store觸發器。

其他 Runtime 使用的第三庫

打包第三方庫, 請分別參考:

本文附件中有 nodejs 和 php 完整的程式碼示例下載, 而 java 有單獨一篇文章表格儲存觸發 java runtime 的函式計算處理示例教程說明具體操作過程

程式碼示例

nodejs

  • 目錄結構

    -rw-r--r--  1 songluo  staff   350 Nov 21 16:22 index.js
    drwxr-xr-x  9 songluo  staff   288 Nov 21 15:54 node_modules
    -rw-r--r--  1 songluo  staff  1639 Nov 21 15:54 package-lock.json
    -rw-r--r--  1 songluo  staff    49 Nov 21 15:54 package.json
  • 入口函式

    `use strict`;
    var cbor = require(`cbor`);
    
    module.exports.handler = function(event, context, callback) {
        cbor.decodeFirst(event, function(error, obj){
            // error != null if there was an error
            // obj is the unpacked objec
            console.info(JSON.stringify(obj));
            // use obj do anything
        });
        callback(null, `ok`);
    };

php

  • 目錄結構

    -rw-r--r--  1 songluo  staff   218 Nov 21 16:43 composer.json
    -rw-r--r--  1 songluo  staff  1979 Nov 21 16:43 composer.lock
    -rw-r--r--  1 songluo  staff  1197 Nov 21 17:01 index.php
    drwxr-xr-x  5 songluo  staff   160 Nov 21 16:43 vendor
  • 入口函式

    <?php
    require_once __DIR__ . "/vendor/autoload.php";
    
    function myErrorHandler($errno, $errstr, $errfile, $errline) {
        if (!(error_reporting() & $errno)) {
            return false;
        }
    
        switch ($errno) {
        case E_USER_ERROR:
            $errInfo = array(
                "errorMessage" => $errstr,
                "errorType"    => ServerlessFCfriendly_error_type($errno),
                "stackTrace"   => array(
                    "file" => $errfile,
                    "line" => $errline,
                ),
            );
            throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
            break;
    
        default: // E_USER_WARNING | E_USER_NOTICE
            break;
        }
    
        /* Don`t execute PHP internal error handler */
        return true;
    }
    
    // set to the user defined error handler
    // solve `Non-static method CBOR\CBOREncoder::bigint_unpack() should not be called statically`
    // https://stackoverflow.com/questions/10768576/how-can-i-solve-non-static-method-xxxxxx-should-not-be-called-statically-in
    set_error_handler("myErrorHandler");
    
    function handler($event, $context){
        //decode
        $decoded_evt = CBORCBOREncoder::decode($event);
        //output
        var_export(json_encode($decoded_evt));
    }

java

請參考表格儲存觸發 java runtime 的函式計算處理示例教程


相關文章