在腾讯云云函数计算上部署.NET Core 3.1
云厂商(腾讯云、Azure等)提供了Serverless服务,借助于Serverless,开发人员可以更加专注于代码的开发,减少运维的成本。腾讯云的函数计算提供了很多运行库,对.NET的支持需要通过custom runtime 来支持,可以支持任何版本的.NET Core,也就是需要自定义runtime,需要使用到函数计算的custom runtime功能,具体参见https://cloud.tencent.com/document/product/583/47274。本文主要介绍一下使用ASP.NET CORE 3.1部署在腾讯云Serverless(函数计算)的内容。
C#语言由于需要编译后才可以在 CoreCLR 虚拟机中运行。因此在 SCF 中的使用方式,和 Python、Node.js 这类脚本型语言不同,和Java一样有如下限制:
不支持上传代码:使用 C# 语言,仅支持上传已经开发完成,编译打包后的 zip 包。SCF 环境不提供 C# 的编译能力。
不支持在线编辑:不能上传代码,所以不支持在线编辑代码。CoreCLR 运行时的函数,在代码页面仅能看到再次通过页面上传或 COS 提交代码的方法。
自定义.NET Custom runtime
Custom Runtime的封装工作就是要把各种trigger 的事件封装一个.NET Standard库,开发云函数。自 .NET Core 2.0 开始, 提供了名为 IHostedService 的新接口,有助于轻松实现托管服务,文章《ASP.NET Core 3.x控制IHostedService启动顺序浅探》有深入的实现分析,基于IHostedService 实现一个SCFHostService:
这里我们把SCF的Custom Runtime 抽象到ISCFHost 中
在SCFHost 类中完成Custom Runtime的业务处理,接收来自SCF 的事件,转发给函数进行处理,函数处理的接口 IFunctionInvoker:
默认实现了FunctionInvoker 把请求信息 返回给 SCF:
responseBody 代表了SCF函数的不同Trigger事件信息,我们可以根据不同的Trigger 定义不同的处理函数,例如我们处理HttpTrigger的函数为HttpFunctionInvoker:
上面我们已经完成了最小的MVP封装,利用.NET Core的依赖注入容器封装起来,我们定义了一个ISCFBuilder 来组装函数的配置和服务:
SCF 云函数开发
我们使用.NET Core的控制台程序来开发云函数,创建一个控制台程序, 引用Yhd.TencentCloud.SCF 包,把Program.cs 替换成类似代码:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
using Yhd.FindJob;
using Yhd.TencentCloud.SCF.Executors;
public class Index
{
static async Task Main(string[] args)
{
var builder = new HostBuilder()
.ConfigureSCF((context, scfbuilder) =>
{
var configuration = scfbuilder.Configuration;
scfbuilder.Services.AddFindJob(configuration);
scfbuilder.Services.AddEasyCaching(options =>
{
options.UseInMemory();
//use redis cache that named redis
options.UseRedis(configuration)
.WithJson()
;
});
scfbuilder.Services.AddTransient<IFunctionInvoker, JobsHttpFunctionInvoker>();
})
.UseConsoleLifetime();
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
}
通过ConfigureSCF 可以添加函数的依赖服务,例如上面例子中的EasyCaching 以及函数的服务, 关键的一句是 scfbuilder.Services.AddTransient<IFunctionInvoker, JobsHttpFunctionInvoker>(); 把函数的处理逻辑使用JobsHttpFunctionInvoker 进行注入。把函数的配置放到appsettings.json。
现在SCF 云函数有个问题是本地Windows开发问题,本地的函数逻辑的测试可以通过单元测试进行。还有函数打包必须在Linux环境下进行。
云函数部署
创建 bootstrap 文件
bootstrap 是运行时入口引导程序文件,Custom Runtime 加载函数时固定检索 bootstrap 同名文件,并执行该程序来启动 Custom Runtime 运行时。Custom Runtime 支持任意语言及版本开发运行函数,主要基于 bootstrap 引导程序由开发者自定义实现。其中,bootstrap 需具备以下条件:
需具有可执行权限。
能够在 SCF 系统环境(CentOS 7.6)中运行。
下面这个是 .NET Core 3.1的云函数 bootstrap 文件
#!/bin/sh
echo "Start dotnet bootstrap ~~~"
export DOTNET_ROOT=/opt/rt
export PATH=$(pwd):/opt/rt:${PATH}
dotnet ./index/bin/Release/netcoreapp3.1/index.dll
index.dll 就是我们开发的函数文件。
成功创建 bootstrap 和 函数文件 后,目录结构如下所示:
├ bootstrap
└ index
需要在Linux 下执行以下命令,设置文件可执行权限,并将其添加至 ZIP 包
部署包准备好后,可以通过 云函数控制台 来创建和发布函数
基于腾讯云 CustomRuntime的.NET 封装的开发SDK 后续会开源,欢迎你的持续关注。
在腾讯云云函数计算上部署.NET Core 3.1相关推荐
- 在阿里云函数计算上部署.NET Core 3.1
使用阿里云ECS或者其他常见的VPS服务部署应用的时候,需要手动配置环境,并且监测ECS的行为,做补丁之类的,搞得有点复杂.好在很多云厂商(阿里云.Azure等)提供了Serverless服务,借助于 ...
- 在CentOS7上部署.net core 控制台应用程序部署为后台服务
在CentOS7上部署.net core 控制台app为后台服务 转载于:https://www.cnblogs.com/wangwust/p/9821547.html
- IIS上部署Net.Core
部署: 1.安装vc_redist.x64vc_redist.x64 2.安装DotNetCore.1.0.0.RC2-WindowsHosting 3.安装DotNetCore.1.0.0-SDK. ...
- 在IIS上部署.net core的webapi项目 以及502.5错误的两种解决方法
在IIS上部署.net core的webapi项目 以及502.5错误的两种解决方法 参考文章: (1)在IIS上部署.net core的webapi项目 以及502.5错误的两种解决方法 (2)ht ...
- Linux系统上部署dotnet core
Linux系统上部署dotnet core 主要步骤如下: 安装linux Linux下安装dotnet core环境 Linux下部署dotnet core系统 主要步骤如下: 因我公司需要,做一个 ...
- 从零开始在 Windows 上部署 .NET Core 到 Kubernetes
本章节所有代码已上传至:https://github.com/Seanwong933/.NET-Core-on-Kubernetes 文末附有本人遇到过的 Docker 和 k8s 的故障排除. 本文 ...
- 【腾讯轻量应用服务器上部署kafka并通过flink读取kafka数据】
环境准备 经过1个月的摸索,最终选择在腾讯云上搭建一个学习环境.当时选择原因还是新用户有优惠(150左右3年),但现在看1核2g的配置勉强够用,建议后续小伙伴选择时最好是2核4g配置. 由于是单节点安 ...
- 阿里云服务器web项目启动连接mysql_在腾讯云阿里云上部署JavaWeb项目(Tomcat+MySQL)...
云服务器安装Tomcat 安装Tomcat有好多种方式,可以在本地去Tomcat官网下载再用WinSCP上传到云服务器上,也可以直接在云服务器上命令行下载,本地下载再上传比较简单,就不多说了,说说用命 ...
- 第二章 在Linux上部署.net core
项目目标部署环境:CentOS 7+ 项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx 开源地址:https ...
最新文章
- tomcat8 启动项目pom.xml配置
- mysql 查询执行过的sql_查看mysql已经执行过的sql语句
- hyper-v 安装centos7 后,虚拟机无法访问网络。
- Unable to find the requested .Net Framework Data Provider
- 使用Docker实现vsftpd配置——用户验证访问上传
- Ubuntu桌面远程工具
- DVR硬盘录像机技术
- 到底要不要去外包公司?这篇带你全面了解外包那些坑!
- python学习之——假人配对
- iOS图片加载策略的简单实现
- 基于android的校园新闻app,移动端校园新闻APP的设计探析
- iOS视频通话问题总结及心路历程。。。
- Matlab实现曲线拟合的最小二乘法
- 2022淘宝天猫年货节超级红包攻略
- 模拟卷Leetcode【普通】377. 组合总和 Ⅳ
- 【驱动代码移植高通平台之二十三】高通平台i2c设备驱动
- 猿人学第四题-CSS加密【雪碧图、样式干扰】
- 手把手教你如何设置H5页面动画效果
- Eclipse中新建项目前打红色差号“X”处理方法
- 宝安区2021年高考成绩查询入口,宝安区2021年学位申请房屋锁定网上查询说明(附入口)...