有奖:语音产品征文挑战赛火热进行中> HOT

前提条件

开发流程

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

环境隔离

在开发项目的每个阶段,我们都需要一个独立运行的环境来对开发的操作进行隔离。
在 serverless.yml 文件中定义 stage,并把 stage 作为参数写入到组件的资源名称中,部署时以 实例名 -{stage}- 应用名 的方式生成资源。这样我们在不同阶段只要定义不同的 stage 就可以生成不同的资源,达到环境隔离的目的。
以 SCF 组件的 serverless.yml 为例:
# 应用信息
app: myApp
stage: dev # app环境名称,默认为dev
?
?
# 组件信息
component: scf
name: scfdemo
?
# 组件参数
inputs:
name: ${name}-${stage}-${app} #函数名称,以变量 ${stage} 作为资源名称的一部分
src: ./
handler: index.main_handler
runtime: Nodejs10.15
region: ap-guangzhou
events:
- apigw:
parameters:
endpoints:
- path: /
method: GET
云函数 name 定义为 ${name}-${stage}-${app}
开发测试阶段定义 stage 为 dev,部署后云函数为 scfdemo-dev-myApp。
上线发布阶段定义 stage 为 pro,部署后云函数为 scfdemo-pro-myApp。
不同阶段操作不同的云函数资源,从而达到开发与发布隔离的目的。
说明
stage 可以直接在 serverless.yml 文件中定义,也可以通过 scf deploy --stage dev 直接传参。

权限管理

在开发项目中,需要对不同的人员进行权限分配和管理。例如对于开发人员,只允许其访问某个项目某个环境下的权限,可以参考 账号和权限配置,授予子账号 Serverless Cloud Framework 特定资源的操作权限。
以 myApp 项目 dev 环境为例,配置如下:
{
"version": "2.0",
"statement": [
{
"action": [
"scf:*"
],
"resource": "qcs::scf:ap-guangzhou::appname/myApp/stagename/dev", #app 为 myApp,stage 为 dev
"effect": "allow"
}
]
}

灰度发布

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式 。为保证线上业务的稳定性,开发上线项目推荐使用灰度发布。
Serverless 应用的灰度发布支持两种方式:默认别名自定义别名。更多详情参考 Serverless 灰度发布
对比项
配置
流量规则设置
适用组件
默认别名
配置简单
只能在最后一次发布的函数版本和 $latest 版本间进行。
云函数组件
涉及云函数的相关组件
自定义别名
配置灵活
可以在两个任意函数版本间进行。
云函数组件

Serverless Cloud Framework 命令

开发项目到上线过程中,需要用到一些 serverless-cloud-framework 的相关命令。更多命令请查看 Serverless Cloud Framework 支持命令列表
说明:
serverless-cloud-framework 命令的简写为 scf

初始化项目:

scf

下载模板项目 scf-starter,模板支持可通过 scf registry 查询:

scf init scf-starter

下载模板项目 scf-starter,并初始化该项目为 myapp:

scf init scf-starter --name my-app

部署应用:

scf deploy

部署应用,指定 stage 为 dev:

scf deploy --stage dev

部署应用,并打印部署信息:

scf deploy --debug

部署并发布函数版本:

scf deploy --inputs publish=trues

部署并切换20%流量到 $latest 版本:

scf deploy --inputs traffic=0.2

项目实践


http://www.vxiaotou.com