背景
Serverless作为一种新的开发模式,吸引我们众多开发者想一探究竟,然而现在Serverless开发缺乏相关的文档指引,而不能很好的完成开发、调试和部署,接下来我们就尝试一起探讨下如何开发,部署一个Serverless实践之路。
Serverless的基本概念
一个 Serverless 应用是由单个或者多个组件实例构成的,每一个组件都会有一个yaml文件,该文件定义了组件的一些参数,这些参数在部署的时候用于生成实例的一些信息。例如 region 参数,定义了资源的所在区。
组织是在Servless应用上层的概念,主要是为了管理。例如,一个公司会有不同部门的开发者进行Servless应用开发,设置不同的组织名称,方便做后期的权限管理。
示例:开发一个 express 应用,最基本的是引入 express 组件,业务中间可能会涉及到其他一些云产品(如对象存储 COS),所以整个应用目录如下:
Serverless.yaml 文件
serverless.yml 文件中定义了应用组织描述及组件 inputs 参数,每次部署时会根据 serverless.yml 文件中的配置信息进行资源的创建、更新和编排。
一份简单的 serverless.yml 文件如下:
# serverless.yml
org: xxx-department # 用于记录组织信息,默认为您的腾讯云 APPID
app: expressDemoApp # 应用名称,默认为与组件实例名称
stage: ${env:STAGE} # 用于开发环境的隔离,默认为 devcomponent: 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 文件中的配置信息如下图所示:
操作场景
本文将以 Tencent-Express 组件部署一个 Express 网站为例,模拟 Serverless Framework 开发项目、管理项目和部署发布上线全流程。
流程说明
一个项目开发流程大致如下:
- 初始化项目:将项目进行初始化。例如选择一些开发框架和模板完成基本的搭建工作。
- 开发阶段:对产品功能进行研发。可能涉及到多个开发者协作,开发者拉取不同的 feature 分支,开发并测试自己负责的功能模块;最后合并到 dev 分支,联调各个功能模块。
- 测试阶段:测试人员对产品功能进行测试。
- 发布上线:对于已完成测试的产品功能发布上线。由于新上线的版本可能有不稳定的风险,所以一般会进行灰度发布,通过配置一些规则监控新版本的稳定性,等到版本稳定后,流量全部切换到新版本。
操作步骤
初始化项目
1、创建一个express 项目
,修改 yml 文件为以下内容:
#serverless.yml
org: xxx-department # 用于记录组织信息,默认为您的腾讯云appid
app: expressDemoApp # 应用名称,默认为与组件实例名称
stage: ${env:STAGE} # 用于开发环境的隔离,默认为devcomponent: 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环境初始化、开发及部署一个完整的过程,如果大家也遇到类似的问题,可以一起探讨下。