使用Azure Function玩转Serverless
Serverless&Azure Functions
通过无服务器计算,开发者无需管理基础结构,从而可以更快构建应用程序。通过无服务器应用程序,将由云服务提供商自动预配、缩放和管理运行代码所需的基础结构。
要理解无服务器计算的定义,注意到服务器仍在运行代码很重要。服务器名称来源于这样一个事实:与基础结构预配和管理相关联的任务对开发者不可见。这种方式让开发者能够更多地专注于业务逻辑,向业务核心交付更多价值。无服务器计算可帮助团队提高生产力、更快将产品推向市场,并让组织可以更好地优化资源、保持专注于创新。
引用自Azure文档
以上文字引用自Azure,说的有点官方。说说我个人对Serverless的简单理解。所谓Serverless是相对于传统有应用的部署方案来说的。传统应用不管你是直接部署在主机或者容器化来部署,你的程序总是跑在一个完整的应用进程下。比如你只是想提供一个简单的A+C=C的Web Api,你往往需要启动一个完整的asp.net mvc项目或者sprintmvc项目来承载简单的代码。那么Serverless通过云服务把目标更加细化,通过它你可以只使用相关代码实现某个方法或函数,上传到云端后这个函数就可以跑了。这样子的话资源占用更加少,相对的资源付费也会更加有针对性,因为你无需为没用的资源所付费。Serverless可以说是对微服务的更加细化,使在云端运行的代码从application级别降低到了Function/method级别。
上面简单介绍了Serverless。而Azure的Serverless方案就是Azure Functions。
创建函数应用
Azure Function是个免费服务,在免费服务列表里找到它并点击创建。

给函数取个名称,发布选择“代码”。如果打算用.net来开发则运行时堆栈选择.NET Core版本选择3.1。跟其他资源一样区域选择东亚,因为它离你近。

因为Azure Function虽然是Serverless但是也些储存空间,所以需要配置存储账户。选择上次我们使用AzureBlob时候创建的存储账号。没有的话可以新建一个。
操作系统任意选择Linux或者Windows。
计划类型选择:消耗(无服务器)
Azure 函数提供1000000请求/月的免费额度
使用VSCode进行本地开发
在函数列表界面点击“本地开发”。会弹出本地开发指导。选择VSCode环境会出现VSCode的开发环境配置说明。

首先本地需要安装node跟npm。使用下面的命令自动安装Core Tools包:
npm install -g azure-functions-core-tools@3 --unsafe-perm true
注意:这个包还是很大的,由于网络的原因有可能拉不下来。如果长时间下不下来也可以直接搜索azure-functions-core-tools直接下载独立安装包。
使用npm安装完core tools后还有安装Azure Functions的VSCode插件。

打开VSCode插件菜单,搜索Azure Functions,找到Azure Functions插件后点击Install开始安装。这个插件一会就安装完了。
新建Function
我们按照完VSCode的插件后,切换到Azure Function菜单。

点击新建按钮会弹出Azure Function支持的触发器。触发器有很多有HttpTrigger,BlobTrigger,CosmosDbTrigger等等。这里选择最简单的HttpTriger触发器。接着会提示输入项目名称,输入名称后回车就可以生成本地项目了。
Function代码
我们简单演示下Azure Function,使用这个函数实现一个简单的两个数相加返回相加结果。
namespace Company.Function
{
    public static class AzFnTest
    {
        [FunctionName("AzFnTest")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            int a = data.A;
            int b = data.B;
            int c = a + b;
            return new OkObjectResult(c);
        }
    }
}
以C#为语言的Azure Function入口就是一个run方法。run方法的入参有2个,一个是HttpRequest,一个Ilogger。其中HttpRequest包含了http请求的信息,QueryString、body、headers等。这个类就是来自Microsoft.AspNetCore.Mvc命名空间。返回值是Task。那么本质上一个Function其实可以看做是标准MVC方案里的一个Action。只是缺乏了参数自动绑定。我们需要的参数都要从HttpRequest对象上提取。
上面的代码很简单,就是获取body内容反序列化成一个动态对象,获取参数A、B,然后相加得到C,通过OkObjectResult直接返回出去。
本地测试
在VSCode界面按F5启动调试。VSCode会启动一个本地实例,可以接受http请求。我们使用postman往这个地址post一个json数据过去。
{
    "A" : 1 ,
    "B" : 2
}

可以看到返回了结果3。
上传到Azure

在VSCode上点击上传按钮,会提示登录Azure。登录成功后会列出上面我们新建的Azure Function的资源。

选择azure-fn0,选中之后会开始上传,最后output窗口会提示成功。

回到portal网站刷新下,会看到我们的项目已经上传成功了。
运行函数
点击函数名称弹出明细界面。点击“获取函数URL”获取调用这个函数的真实URL。

有了这个地址我们就可以在全球范围内使用这个函数啦。让我们使用Postman再测试一下。

可以看到返回了正确的结果。
总结
以上我们使用C#代码实现了一个简单的Azure Functions并调用了它。Azure Functions还支持Java、Nodejs、Python等常用的编程语言。Azure Functions跟Azure生态紧密结合,除了支持HttpTrigger,还支持CosmosDb,Azure Blob,甚至是Iot边缘计算等场景。Azure Functions是Azure的Serverless解决方案,它具有无需基础结构管理、动态可伸缩性、加快上市、更高效地使用资源等优点,大家如果想体验Serverless可以尝试一下。
使用Azure Function玩转Serverless的更多相关文章
- 使用ML.NET和Azure Function进行机器学习 - 第1部分
		介绍 一提到机器学习,总是让人望而生畏.幸运的是,Azure正在想方设法让开发人员更容易进入机器学习.ML.NET是Microsoft Research专为.NET开发人员开发的机器学习框架,因此您可 ... 
- 使用ML.NET和Azure Function进行机器学习 - 第2部分
		本文是<使用ML.NET和AzureFunction进行机器学习 - 第1部分>的续篇. 像机器一样识别鸢尾花 回顾第1部分,您将使用Visual Studio创建一个新的Azure Fu ... 
- 创建Azure Function
		azure function的用途在于运行一些逻辑简单的执行逻辑,比如batch job,定时任务,webhook等等.1. 创建azure function创建完毕后,进入app service,选 ... 
- 【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中
		问题描述 基于.NET Core的Function App如果配置了Application Insights之后,每有一个函数被执行,则在Application Insights中的Logs中的tra ... 
- 【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
		问题描述 当需要在应用中有大量的出站连接时候,就会涉及到SNAT(源地址网络转换)耗尽的问题.而通过Azure App Service/Function的默认监控指标图表中,却没有可以直接查看到SNA ... 
- 【Azure 应用服务】Azure Function集成虚拟网络,设置被同在虚拟网络中的Storage Account触发,遇见Function无法触发的问题
		一切为了安全,所有的云上资源如支持内网资源访问,则都可以加入虚拟网络 问题描述 使用Azure Function处理Storage Account中Blob 新增,更新,删除等情况.Storage A ... 
- 【Azure 应用服务】Azure Function App 执行PowerShell指令[Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt]错误
		问题描述 使用PowerShell脚本执行获取Azure订阅列表的指令(Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt).在本地 ... 
- 【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码逐步最终源端
		问题描述 在使用Azure Function App的SendGrid Binging功能,调用SendGrid服务器发送邮件功能时,有时候遇见间歇性,偶发性异常.在重新触发SendGrid部分的Fu ... 
- 【Azure 应用服务】Azure Function HTTP 触发后, 230秒就超时。而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间?
		问题描述 Azure Function HTTP 触发后, 230秒就超时,而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间? 问题分析 查阅官方文档,对函数应用超时持续时间有 ... 
随机推荐
- python自动化测试中的数据驱动unittest+ddt
			ddt是一个unittest的插件,用来实现uniitest的数据驱动 本文以python自动化测试中的数据驱动为原则,记录学习ddt的过程 一.数据的传递规则 
- Golang | 简介channel常见用法,完成goroutin通信
			今天是golang专题的第14篇文章,大家可以点击上方的专辑回顾之前的内容. 今天我们来看看golang当中另一个很重要的概念--信道.我们之前介绍goroutine的时候曾经提过一个问题,当我们启动 ... 
- Spring实战第4版PDF下载含源码
			下载链接 扫描右侧公告中二维码,回复[spring实战]即可获取所有链接. 读者评价 看了一半后在做评论,物流速度挺快,正版行货,只是运输过程有点印记,但是想必大家和你关注内容,spring 4必之3 ... 
- 神奇的BUG系列-01
			有时候遇见一个bug,感觉就是他了 其实他也不过是你职业生涯中写的千千万万个bug中的一员 你所要做的,是放下 日子还长,bug很多,不差这一个 就此别过,分手快乐 一辈子那么长,一天没放下键盘 你就 ... 
- Android开发之将图片文件转化为字节数组字符串,并对其进行Base64编码处理
			作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, 转载请说明出处. /** * @将图片文件转化为字节数组字符串,并对其进行Base64编码处理 * ... 
- Oracle错误 ora-12514 解决方法-九五小庞
			成功连到数据库上之后,查看listener状态:lsnrctl status status READY 状态,需要由非归档转为归档模式,故操作如下: 1.关闭数据库shutdown immediate ... 
- 不支持原子性的 Redis 事务也叫事务吗?
			文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 假设现在有这样一个业务,用户获取的某些数据来自第三方接口信息,为避免频繁请求第三方接口,我们往往会加一层缓存,缓存肯定要 ... 
- 07_Python语法示例(基础语法,文件操作,异常处理)
			1.写程序在终端输出图形 ######## # # # # ######## print("#" * 8) print("#" + " " ... 
- Ubuntu 18.04 LTS 配置静态IPv6地址
			学校的IPv4地址限制了校内IP访问,在家连校内机器只能先连接学校的VPN,十分不方便.好在学校没有对IPv6地址做限制,因此我们可以给自己的机器配置一个静态IPv6地址来绕过这个限制. 本机系统使用 ... 
- 通俗理解线性回归(Linear Regression)
			线性回归, 最简单的机器学习算法, 当你看完这篇文章, 你就会发现, 线性回归是多么的简单. 首先, 什么是线性回归. 简单的说, 就是在坐标系中有很多点, 线性回归的目的就是找到一条线使得这些点都在 ... 
