表格存储触发C# runtime的函数计算处理示例教程

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
函数计算FC,每月15万CU 3个月
简介:

前言

函数计算(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
                }
            ]
        }
    ]
}
  1. 参考函数计算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中创建的函数,最后效果如下图所示:

20191216113731

3.使用表格存储客户端或者表格存储操作表代码往对应的表中进行数据操作;
本人最后显示效果如下:
注意:需要配置函数的service日志能写入logstore,具体参考函数计算访问日志服务

20191216114227

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
19天前
|
Linux C#
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
|
22天前
|
Kubernetes Serverless API
Serverless阿里云函数计算问题之使用示例如何解决
本文探讨了Serverless场景下实例Exec功能的关键特性及其与K8S和Docker的主要区别:实例Exec仅适用于存活实例,且请求不占用并发度,被视为InvokeFunction调用并据此计费。此外,还介绍了阿里云函数计算中实例Exec功能的使用方法,包括通过控制台、API及CLI工具的操作流程,并详细解释了WebSocket连接对计费的影响以及如何在控制台上登录函数实例进行问题排查的具体步骤。
35 0
|
1月前
|
机器学习/深度学习 数据挖掘 C#
ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别
ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别
49 0
|
2月前
|
Serverless API 数据处理
函数计算产品使用问题之是否可以不开通表格存储
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
JSON Serverless 开发工具
函数计算产品使用问题之要使用Python写入时序数据到阿里云表格存储时序表,该怎么办
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
前端开发 Serverless Shell
Serverless 应用引擎操作报错合集之在阿里云函数计算中,laravel zip包使用示例的start.sh脚本启动时出现错误代码如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
存储 SQL 开发框架
阿里云物联网平台数据转发到表格存储(Table Store)示例参考
本文主要结合物模型的结构体类型属性数据,演示payLoad的设置及规则引擎的配置。
阿里云物联网平台数据转发到表格存储(Table Store)示例参考
|
机器学习/深度学习 传感器 SQL
阿里云物联网平台数据转发到函数计算示例
本文主要演示通过规则引擎将设备上行消息流转到函数计算,并通过函数计算发送消息到钉钉机器人。
阿里云物联网平台数据转发到函数计算示例
|
11月前
|
存储 索引
表格存储根据多元索引查询条件直接更新数据
表格存储是否可以根据多元索引查询条件直接更新数据?
93 3
|
2月前
|
DataWorks NoSQL 关系型数据库
DataWorks产品使用合集之如何从Tablestore同步数据到MySQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。

热门文章

最新文章

相关产品

  • 函数计算