管理环境
本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
项目创建成功后,您可以查看项目对应的环境信息。本文介绍如何通过Serverless 开发平台控制台管理项目环境,包括创建环境、查看环境、删除环境以及使用环境隔离服务。
背景信息
环境提供基础设施的管理能力。通过环境,您可以:
将服务部署在完全隔离的基础设施中(例如不同地域、不同VPC间服务隔离),实现生产服务的高可用或者低延迟。
为环境关联不同的流水线触发规则(例如,开发分支提交动作触发测试环境的CI,主干分支合并触发生产环境的发布),实现科学的安全生产流程。
使用说明
环境不会自动分配域名,但环境可以托管一些云资源,例如SLS、VPC或NAS等,这些资源在不同环境中互相隔离。如果需要不同环境使用不同的域名,需要在仓库的
s.yaml
中指定域名。以函数计算为例,需要指定customDomains字段。环境托管资源时需要访问云服务的权限。您可以为环境指定服务角色,并为角色授予相关云服务的权限策略。
查看环境
登录Serverless 开发平台,在左侧导航栏,选择 ,然后在项目页面,单击目标项目,您可以查看某个环境的详细信息,包括基本信息、代码源配置以及部署历史、对应的资源等。另外,还可以对环境关联的代码进行云端开发以及流水线配置。
回滚部署版本
环境回滚存在一定风险。当用户误操作导致环境问题时,通过环境回滚功能可以回滚到正确的时间节点,但是此处提供的回滚,仅为当前应用的业务代码回滚。对于上下游的业务等,无法进行回滚,例如,当前应用使用了数据库,如果数据库因为其他错误操作导致无法连接,此时回滚应用的业务代码,可能无法解决数据库的故障。
您可以在项目详情页面的环境详情页签,在部署历史区域,单击回滚进行环境回滚。
部署版本回滚是指按照对应的部署历史快照,进行业务逻辑与对应配置的重新部署。业务逻辑与对应配置是指对应代码仓库中,指定commit
中的代码与资源配置,例如s.yaml。
资源管理
可以通过资源关联信息,进入到对应资源的管理页面进行资源管理等操作。Serverless 开发平台不推荐此操作,推荐所有的资源管理通过代码仓库中的资源描述文件s.yaml
进行管理。在资源管理页面直接对资源进行操作,而未同步更改代码仓库的资源描述文件,可能会导致资源被覆盖。例如,某环境对应分支下代码仓库中的资源描述文件中,描述了某函数对应的内存大小为1024 MB,此时开发者直接修改该函数配置,将其内存修改为2048 MB,而没有更新代码仓库中的资源描述文件,此时触发环境流水线部署,会导致该函数的内存由2048 MB变回1024 MB。
云端开发
Serverless 开发平台提供了云端开发能力。您可以在项目详情页面的云端开发页签,单击初始化仓库初始化代码。
初始化之后,可以在WebIDE中查看代码,并进行基础的开发和调试等操作。完成之后可以通过Terminal或者Git插件将代码推送到代码仓库,也可以点击左上角的保存代码到仓库快速进行代码的Add、Commit和Push操作。
流水线管理
具体信息,请参见管理流水线。
创建环境
Serverless 开发平台为开发者提供多环境管理能力。开发者可以在项目详情页面单击新建环境,然后根据界面提示即可快速完成环境创建。
创建环境需要绑定代码仓库,涉及的配置项说明如下。
配置项 | 说明 |
环境名称 | 环境的命名,用于对环境进行区分。一个环境类型可以对应多个环境名称。 |
环境类型 | 用于对环境进行分类和筛选。目前提供测试环境、预发环境以及生产环境。 |
分支绑定 | 指定环境所在的代码分支,默认流水线会使用该分支的代码进行部署。 |
环境的基础信息 | 包括环境的描述、资源描述文件、角色名称等。 |
资源配置管理 | 资源描述文件在指定环境中的差异化配置。 |
流水线配置 | 默认每个环境对应一条流水线,您可以针对不同环境对流水线进行配置。 |
Serverless 开发平台提供的多环境能力更多是与代码仓库的代码分支进行关联。推荐的最佳实践为一个环境对应一条流水线,一条流水线对应一个分支。例如,可以在代码仓库创建dev
分支对应开发环境,test
分支对应测试环境,以及main/master
分支对应生产环境。通过向不同的分支提交代码,触发流水线,确保环境的正常更新。从开发分支到测试分支,再到主干分支,可以通过代码仓库提供的PR/MR功能,实现代码的流转与环境的流转。
实际使用过程中,会存在使用一份代码部署多个应用,给不同用户使用的情况,此时可以通过一个代码分支触发多条流水线,以实现代码更新后,多个环境同步生效。
删除环境
登录Serverless 开发平台,在左侧导航栏,选择 ,单击目标项目,然后在环境信息列表页面单击目标环境右侧操作列的删除,根据界面提示,可以删除不再使用的环境。
删除环境可能涉及资源的删除。因此,在删除环境时,需要确定要删除的资源名称与资源类型。如果不需要删除资源,需要取消勾选资源左侧的复选框。
使用环境隔离服务
Serverless 开发平台采用GitOps方式进行DevOps的最佳实践,即通过Git仓库来管理应用基础设施以及CI/CD流程。Git仓库是应用状态的唯一真实来源,具体方式是使用符合规范的YAML文件,通过在YAML文件中设置相关配置实现使用环境隔离服务。以阿里云函数计算FC组件为例,FC组件的YAML规范,请参见YAML规范。
在很多场景下,企业内部会区分开发和运维角色。两者有着明确的职责划分,基础设施一般由运维角色管理并且授权给研发使用。如果所有基础设施都维护到Git仓库中,需要运维人员通过提交代码的方式来变更基础设施,在一些场景下不太符合运维人员的使用习惯。因此,Serverless开发平台当前提供3种部署方式。
方式一
所有环境使用同一份资源描述YAML文件,资源描述文件(s.yaml)作为项目的基线配置,将环境级差异化配置维护到环境描述文件(env.yaml)中。
使用方式:
创建环境时,在资源配置管理中点击开启环境描述YAML,保存后仓库中会完成环境描述文件YAML的初始化。
编辑环境描述YAML文件(env.yaml),进行环境差异化配置。一个具体的示例如下
environments:
- name: testing #环境名
access: access_testing # 环境使用不同的账号
# 可选:环境公共以及差异化配置,覆盖s.yaml中resources.xxx.props 的属性
overlays:
component: # 组件级别替换
fc3: #不同环境使用的隔离的资源
functionName: ${source.functionName}-${this.name} # s.yaml中的functionName加上project以及环境名作为后缀
role: test-role
vpcConfig:
vpcId: vpc-test
securityGroupId: sg-test
vswitchIds: vsw-test
slsConfig:
project: test-project
logstore: test-logstore
nasConfig: # 使用环境创建的nas
userId: 10003
groupId: 10003
mountPoints:
- serverAddr: xxxx
nasDir: /remoteDir
fcDir: /mnt/localDir
fc3-domain: #不同环境使用不同的域名
domainName: ${source.domainName}-${this.name}
- name: prod
access: prod #环境使用不同的账号
overlays:
resource: # 资源级别替换
api_1:
functionName: ${source.functionName}-${this.name} # s.yaml中的functionName加上project以及环境名作为后缀
timeout: 600
memorySize: 1024
instanceConcurrency: 10
api_2:
functionName: ${source.functionName}-${this.name} # s.yaml中的functionName加上project以及环境名作为后缀
timeout: 600
memorySize: 1024
instanceConcurrency: 10
domain:
domainName: ${source.domainName}-${this.name}
方式二
不同环境维护不同的资源描述YAML文件(s.yaml),在环境中配置流水线,使用指定的YAML文件来部署。您需要在不同YAML中维护不同环境配置,实现环境的资源隔离。
Serverless Devs支持YAML的继承能力来减少YAML重复配置成本。具体操作,请参见YAML继承。
方式三
不同环境使用同一个资源描述YAML文件(s.yaml),环境的差异化配置在流水线环境变量中,通过在YAML文件中引用环境变量来进行隔离。示例如下。
edition: 3.0.0
name: env-demo
access: 'fc_cn'
vars: # 全局变量
region: cn-hangzhou
resources:
api1:
component: fc3
props:
region: ${env(region)}
runtime: custom.debian10
functionName: ${env(functionName)}
code: ./code