腾讯云 Severless 项目开发和灰度发布实践之路

时间:2022-07-28
本文章向大家介绍腾讯云 Severless 项目开发和灰度发布实践之路,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

背景

Serverless作为一种新的开发模式,吸引我们众多开发者想一探究竟,然而现在Serverless开发缺乏相关的文档指引,而不能很好的完成开发、调试和部署,接下来我们就尝试一起探讨下如何开发,部署一个Serverless实践之路。

Serverless的基本概念

一个 Serverless 应用是由单个或者多个组件实例构成的,每一个组件都会有一个yaml文件,该文件定义了组件的一些参数,这些参数在部署的时候用于生成实例的一些信息。例如 region 参数,定义了资源的所在区。

组织是在Servless应用上层的概念,主要是为了管理。例如,一个公司会有不同部门的开发者进行Servless应用开发,设置不同的组织名称,方便做后期的权限管理。

示例:开发一个 express 应用,最基本的是引入 express 组件,业务中间可能会涉及到其他一些云产品(如对象存储 COS),所以整个应用目录如下:

一个Servless组织层级关系图

Serverless.yaml 文件

serverless.yml 文件中定义了应用组织描述及组件 inputs 参数,每次部署时会根据 serverless.yml 文件中的配置信息进行资源的创建、更新和编排。

一份简单的 serverless.yml 文件如下:

# serverless.yml

org: xxx-department #  用于记录组织信息,默认为您的腾讯云 APPID
app: expressDemoApp #  应用名称,默认为与组件实例名称
stage: ${env:STAGE} #  用于开发环境的隔离,默认为 dev


component: express # (必填) 引用 component 的名称,当前用到的是 express-tencent 组件
name: expressDemo # (必填) 组件创建的实例名称


inputs:
  src:
    src: ./ 
    exclude:
      - .env
  region: ap-guangzhou 
  runtime: Nodejs10.15
  functionName: ${name}-${stage}-${app}-${org} #云函数名称
  apigatewayConf:
    protocols:
      - http
      - https
    environment: release

yml 文件中的配置信息如下图所示:

yaml文件配置信息修改

操作场景

本文将以 Tencent-Express 组件部署一个 Express 网站为例,模拟 Serverless Framework 开发项目、管理项目和部署发布上线全流程。

流程说明

一个项目开发流程大致如下:

Serverless项目开发流程
  1. 初始化项目:将项目进行初始化。例如选择一些开发框架和模板完成基本的搭建工作。
  2. 开发阶段:对产品功能进行研发。可能涉及到多个开发者协作,开发者拉取不同的 feature 分支,开发并测试自己负责的功能模块;最后合并到 dev 分支,联调各个功能模块。
  3. 测试阶段:测试人员对产品功能进行测试。
  4. 发布上线:对于已完成测试的产品功能发布上线。由于新上线的版本可能有不稳定的风险,所以一般会进行灰度发布,通过配置一些规则监控新版本的稳定性,等到版本稳定后,流量全部切换到新版本。

操作步骤

初始化项目

1、创建一个express 项目,修改 yml 文件为以下内容:

#serverless.yml
org: xxx-department #  用于记录组织信息,默认为您的腾讯云appid
app: expressDemoApp #  应用名称,默认为与组件实例名称
stage: ${env:STAGE} #  用于开发环境的隔离,默认为dev


component: express # (必填) 引用 component 的名称,当前用到的是 express-tencent 组件
name: expressDemo # (必填) 组件创建的实例名称

inputs:
  src:
    src: ./ 
    exclude:
      - .env
  region: ap-guangzhou
  runtime: Nodejs10.15
  funcitonName: ${name}-${stage}-${app}-${org} #云函数名称
  apigatewayConf:
    protocols:
      - http
      - https
    environment: release

2、在项目根目录下的.env 文件中配置:

TENCENT_SECRET_ID=xxxxxxxxxx #您账号的 SecretId
TENCENT_SECRET_KEY=xxxxxxxx #您账号的 SecretKey
STAGE=prod #STAGE为prod环境,也可以sls deploy --stage=prod 参数传递的方式设置

3、执行sls deploy部署成功后,访问生成的 url 链接,效果如下:

创建远程仓库(示例链接),将项目代码提交到远程 master 分支。同时创建 testing、dev。此时三个分支的代码在同一个版本上(假设为版本0)。

以上就是一个完整的Serverless环境初始化、开发及部署一个完整的过程,如果大家也遇到类似的问题,可以一起探讨下。