前言
函數計算(Function Compute)是一個事件驅動的服務,通過函數計算,使用者無需管理伺服器等運作情況,隻需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運作使用者代碼,而使用者隻需根據實際代碼運作所消耗的資源進行付費。Table Store Stream是用于擷取Table Store表中增量資料的一個資料通道,通過建立Table Store觸發器,能夠實作Table Store Stream和函數計算的自動對接,進而實作表格存儲中的表資料發生變更時候定制化的自動處理。具體可以檢視
表格存儲觸發函數計算官方教程,但是該官方教程隻有python版的代碼示例,本教程展示C#版的代碼示例。
具體過程
表格存儲傳給函數event參數是cbor格式,格式如下:
{
"Version": "string",
"Records": [
{
"Type": "string",
"Info": {
"Timestamp": int64
},
"PrimaryKey": [
{
"ColumnName": "string",
"Value": formated_value
}
],
"Columns": [
{
"Type": "string",
"ColumnName": "string",
"Value": formated_value,
"Timestamp": int64
}
]
}
]
}
- 參考函數計算C# runtime教程, 建立一個dotnetcore2.1的函數, 本教程使用的是Dahomey.Cbor庫, 其中有關cbor處理;
下面展示是相關配置和代碼:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dahomey.Cbor" Version="1.5.0" />
<PackageReference Include="Dahomey.Cbor.AspNetCore" Version="1.4.9" />
<PackageReference Include="Aliyun.Serverless.Core" Version="1.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
</Project>
using System;
using System.IO;
using Dahomey.Cbor;
using Dahomey.Cbor.ObjectModel;
using Aliyun.Serverless.Core;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace Dotnet
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
public class fcFileHandler
{
public async Task<Stream> Echo(Stream input, IFcContext context)
{
ILogger logger = context.Logger;
try{
CborObject cborObject = await Cbor.DeserializeAsync<CborObject>(input);
logger.LogInformation("Handle input: {0}", cborObject.ToString());
var result = JsonConvert.DeserializeObject<CBORRootInfo>(cborObject.ToString());
logger.LogInformation("Version: {0}", result.Version);
logger.LogInformation("Records: {0}", JsonConvert.SerializeObject(result.Records));
}catch (Exception e){
Console.WriteLine("{0} Second exception.", e.Message);
}
MemoryStream copy = new MemoryStream();
await input.CopyToAsync(copy);
copy.Seek(0, SeekOrigin.Begin);
return copy;
}
}
}
using System.Collections.Generic;
namespace Dotnet
{
public class ColumnsItem
{
/// <summary>
///
/// </summary>
public string ColumnName { get; set; }
/// <summary>
///
/// </summary>
public string Timestamp { get; set; }
/// <summary>
///
/// </summary>
public string Type { get; set; }
/// <summary>
///
/// </summary>
public string Value { get; set; }
}
public class Info
{
/// <summary>
///
/// </summary>
public string Timestamp { get; set; }
}
public class PrimaryKeyItem
{
/// <summary>
///
/// </summary>
public string ColumnName { get; set; }
/// <summary>
///
/// </summary>
public string Value { get; set; }
}
public class RecordsItem
{
/// <summary>
///
/// </summary>
public List<ColumnsItem> Columns { get; set; }
/// <summary>
///
/// </summary>
public Info Info { get; set; }
/// <summary>
///
/// </summary>
public List<PrimaryKeyItem> PrimaryKey { get; set; }
/// <summary>
///
/// </summary>
public string Type { get; set; }
}
public class CBORRootInfo
{
/// <summary>
///
/// </summary>
public string Version { get; set; }
/// <summary>
///
/// </summary>
public List<RecordsItem> Records { get; set; }
}
}
2.
參考表格存儲觸發函數計算官方教程建立對應的ots執行個體和表,并且配置該表的觸發器是一個1中建立的函數,最後效果如下圖所示:

3.使用
表格存儲用戶端或者
表格存儲操作表代碼往對應的表中進行資料操作;
本人最後顯示效果如下:
注意:需要配置函數的service日志能寫入logstore,具體參考
函數計算通路日志服務