腾讯云 Severless 项目开发和灰度发布实践之路
背景
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} # 用于开发环境的隔离,默认为 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 文件中的配置信息如下图所示:
操作场景
本文将以 Tencent-Express 组件部署一个 Express 网站为例,模拟 Serverless Framework 开发项目、管理项目和部署发布上线全流程。
流程说明
一个项目开发流程大致如下:
- 初始化项目:将项目进行初始化。例如选择一些开发框架和模板完成基本的搭建工作。
- 开发阶段:对产品功能进行研发。可能涉及到多个开发者协作,开发者拉取不同的 feature 分支,开发并测试自己负责的功能模块;最后合并到 dev 分支,联调各个功能模块。
- 测试阶段:测试人员对产品功能进行测试。
- 发布上线:对于已完成测试的产品功能发布上线。由于新上线的版本可能有不稳定的风险,所以一般会进行灰度发布,通过配置一些规则监控新版本的稳定性,等到版本稳定后,流量全部切换到新版本。
操作步骤
初始化项目
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环境初始化、开发及部署一个完整的过程,如果大家也遇到类似的问题,可以一起探讨下。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SpringFramework之ViewResolver优化
- 搭建maven私服上传并使用Jar包
- Prometheus监控Minio集群
- Spring Boot 相关漏洞学习资料
- 口令爆破之突破前端JS加密
- 渗透测试之API测试技巧
- PC(C/S架构)客户端测试笔记
- 手把手教你使用Python开发飞机大战小游戏,4万字超详细讲解!
- Android通过URL文件下载及文件名提取
- PyTorch4:模块总览&torch.utils.data
- express处理文件上传
- 《机器学习》-- 第七章 朴素贝叶斯
- 【DIY数字仪表】RT-Thread移植touchgfx使用sd卡升级固件和图片资源(4)
- Transformers中的Beam Search高效实现
- 多边形裁剪图片升级啦!Cocos Creator !