本文以部署一个完善的ASP.NET Core工程Blogifier为例,为您讲解如何使用函数计算快速构建或移植基于ASP.NET Core开发的Web API或Web App。把一个现有的成熟的ASP.NET Core工程低成本无缝迁移到函数计算环境。

前提条件

  • 安装Funcraft
  • 配置Funcraft
  • 使用Funcraft工具创建NAS挂接点,并配置VPC。详细信息,请参见使用fun nas管理NAS文件
    注意 在本示例中使用SQLite3数据库,这种文件类型的数据库可以直接放置在NAS。如果使用MySQL等其他数据库,需要创建RDS数据库,并配置VPC。详细信息,请参见 通过VPC访问RDS实例
  • 可选:成功创建日志
  • 系统需求
    • Windows、macOS、Linux
    • ASP.NET Core 2.1+
    • Visual Studio 2017、VSCode或其他代码编辑器(Atom、Sublime等)。
    • SQLite默认情况下,Microsoft SQLServer测试,EF兼容的数据库需要运行。

背景信息

.NET Core是一个开源通用的开发框架,支持跨平台。函数计算推出了DotNetCore2.1 runtime,使用C#编写Serverless函数。详细信息,请参见 C#事件函数。通过C#事件函数,您可以了解到函数计算可以很好的支持ASP.NET Core的应用,例如:
  • ASP.NET Core Web API
  • ASP.NET Core Web App
  • ASP.NET Core Web App(Model-View-Controller)
函数计算具备以下优点:
  • 无需采购和管理服务器等基础设施。
  • 专注业务逻辑的开发。
  • 提供日志查询、性能监控、报警等功能快速排查故障。
  • 以事件驱动的方式触发应用响应用户请求。
  • 毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力。
  • 按需付费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景。
  • 可以做为Web终端,从传统的通过Web网站运维、监控等繁琐的事务中解放出来。

当您开发Server端服务时,常常面临开发效率低、运维成本高,机器资源弹性伸缩等痛点,而使用Serverless架构可以很好地解决上述问题。下面是传统架构和Serverless架构的对比:

Item Serverless 传统方式搭建服务
开发维护成本 开发成本低,效率高,维护成本低,无需管理服务器等基本设施,只需编写代码并上传,使程序员从底层设备维护中解放出来,只考虑实际业务逻辑即可。 维护成本高,自行维护服务器,需要处理服务器宕机、服务器扩容等一系列底层琐碎的事情。
可用性
  • 弹性伸缩,面对峰值压力。
  • 无需处理服务器等故障,函数计算实现基础设施的容错。
  • 系统架构经过大量项目的验证和长时间的打磨,相对稳定可靠。
  • 当峰值压力突增时,计算资源扩容不及时,容易导致服务过载。
  • 需要自行处理服务器宕机,进程崩溃等问题。
  • 基础设施管理比较复杂。
安全性
  • 身份认证和访问控制:除非您显示的允许匿名调用函数,函数计算将对每一个API调用进行身份验证。只有获取您的显示授权(借助于阿里云访问控制服务,RAM),您的函数才可以访问其他云服务资源或者被其他用户或云服务调用。借助API网关,您也可以使用OpenID等机制对函数调用进行身份验证。
  • 数据安全:通过访问控制授权和函数计算环境等功能,您不必再将访问凭证等敏感信息保存在代码中。所有您借助函数计算服务持久化保存数据,包括代码、环境变量等等,都被加密存储。系统在运行代码之前,将对代码进行完整性检测。
  • 运行时安全:每个函数都在独立的、隔离的环境中被执行。函数计算提供与弹性计算ECS相同的隔离强度。函数计算会周期性的重置运行时环境,并自动更新操作系统和运行时依赖软件的安全补丁。
  • 异常响应:函数计算允许您重置资源使用的上限,确保您的费用消耗可控。同时,函数计算提供函数调用次数,流控次数,错误率等指标。借助云监控,您可以为相关指标设置监控报警,快速响应异常情况。
  • 身份认证和访问控制:需自行实现。
  • 数据安全:需要自行实现。
  • 运行时安全:需自行实现。
  • 异常响应:需自行实现。
费用成本
  • 无需采购和管理服务器等基础设施。
  • 按需付费,只为实现使用的计算资源付费,代码未运行则不产生费用。
  • 需要采购服务器等基础设施,成本高,利用率低。
  • 需要支付服务器的费用,代码运行与否都要收费。
图 1. Serverless架构详解

以下架构图清晰展示了使用函数计算替代Web服务器带来的优点,即:免运维、弹性扩容等。

Serverless架构详解
图 2. ASP.NET Core App运行在服务器上
Asp.net Core App 运行在服务器上
图 3. ASP.NET Core App运行在函数计算上
Asp.net Core App 运行在函数计算上

请求通过函数HTTP触发器,最后到达ASP.NET Core。

注意 基于函数计算环境运行新建ASP.NET Core app。详细信息,请参见 通过VPC访问RDS实例

客户案例

该案例是把一个ASP.NET Core工程 Blogifier部署到函数计算,旨在展示函数计算做网站后台的能力,具有以下优点:
  • 成本低:完善的ASP.NET Core Web系统迁移到函数计算的成本较低。
  • 方便:函数计算集成了专有网络VPC功能,您的函数可以通过配置访问专有网络的云资源,例如本案例中的NAS

案例体验入口,请参见http://dotnet.mofangdegisn.cn/

案例开发配置步骤

  1. 下载ASP.NET Core工程的Blogifier。
    • 如果您已成功安装Git软件,您需要执行以下命令:
      git clone https://github.com/rsonghuster/Blogifier.git
    • 如果您没有安装Git,您可以直接下载Blogifier
    说明 本地需安装DotNetCore2.1。建议您使用VS打开,Debug本地可以正常运行。
  2. 在项目目录中创建template.yml文件并编辑文件内容。
    注意template.yml文件中通过 NasConfig: Auto配置NAS和其依赖的VPC资源。
    ROSTemplateFormatVersion: '2015-09-01'
    Transform: 'Aliyun::Serverless-2018-04-03'
    Resources:
      nasDemo:
        Type: 'Aliyun::Serverless::Service'
        Properties:
          NasConfig: Auto
  3. 在目标目录中的template.yml文件中设置相关参数。
    • 设置入口函数,使得该工程可在函数计算执行环境中运行。关于入口函数的参数设置,请参见diff
    • 设置HTTP触发器,类型为anonymous,选择所有类型。
  4. 执行以下命令将相关的静态资源、可写和共享目录移动到3配置的NAS的www目录中。
    fun nas sync
  5. 给函数入口配置自定义域名。详细信息,请参见自定义域名简介
    修改自定义域名
    注意 绑定自定义域名之后,不用使用控制台来进行调试,可以最直接使用浏览器来触发函数,日志服务来进行调试。