一般项目开发会有三套环境,测试环境(test
),预发环境(pre
)和线上环境(prod
)。函数计算FC通过Service 进行隔离。同时三套环境有某些配置不太一样,比如测试环境的实例规格小些为512M
,线上实例规格为2G
。
本质上为了解决配置代码冗余,进行不同环境的划分。 可以通过 Yaml继承extend 可以实现环境划分效果。
s-base.yaml
vars:
baseService: # 服务名称
component: fc # 组件名称
props: # 组件的属性值
region: cn-hangzhou
service:
name: realworld-app
description: 欢迎使用ServerlessDevs
function:
name: hello-world
handler: index.handler
runtime: nodejs12
services:
frontend: ${vars.baseService}
backend: ${vars.baseService}
这里我们将公共的配置抽离成一个变量vars
来维护,同时声明两个应用frontend
(前端服务)以及backend
(后端服务)来应用它。
ServerlessDevs内置一些变量,可以很方便的解决一些特殊的问题。详情可以参考文档
s-pre.yaml
extend: ./s-base.yaml
vars:
serviceName: realworld-app-pre
services:
frontend:
props:
service:
name: ${vars.serviceName}
function:
name: frontend # 函数名
codeUri: ./frontend # 具体的代码文件夹
backend:
props:
service:
name: ${vars.serviceName}
function:
name: backend # 函数名
codeUri: ./backend # 具体的代码文件夹
s-prod.yaml
配置和预发环境s-pre.yaml
类似,不再赘述。
我们通过指定部署文件s deploy -t s-prod.yaml
部署到预发环境。详情查看文档
项目开发中有些隐私信息(数据库连接串,阿里云Ak/SK),不能上传到Git版本管理中,否则会造成严重中的安全事故。
这时候有几种推荐方式。
extend: ./s-base.yaml
vars:
serviceName: realworld-app-pre
services:
backend:
props:
service:
name: ${vars.serviceName}
function:
name: backend # 函数名,会体现
codeUri: ./backend # 具体的代
码文件夹
environmentvariables: # 环境变量
DB_CONNECTION: ${env(DB_CONNECTION)}
参考:
environmentvariables :https://www.serverless-devs.com/fc/yaml/function#environmentvariables
${env(环境变量)}: https://www.serverless-devs.com/fc/tips#%E5%85%B3%E4%BA%8Eenv%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95
process.env.DB_CONNECTION
在CICD场景下通过export DB_CONNECTION=xxx
设置到临时环境变量中生效。
jobs:
serverless-devs-cd:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 12
registry-url: https://registry.npmjs.org/
- run: npm install
- run: npm install -g @serverless-devs/s
- run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default
- run: export DB_CONNECTION=${{secrets.DB_CONNECTION}}
- run: s deploy
加下来的使用方式方法1一样,在s.yaml配置environmentvariables
,然后代码中通过process.env
获取当前环境变量值。
声明:serverless-Devs
ignore
遵循.npmignore
规范。基于minimatch 库构建。
.fcignore
作用于当前codeUri
目录中,用户在上传代码到函数计算平台时候,可以忽略某些文件。典型场景:比如我的node_module
依赖上传到layer。这时候每次执行s deploy
时候就需要忽略上传node_module
。
详细使用说明参考文档。
s version publish
s alias publish --alias-name pre
s alias publish --alias-name prod
triggers:
- name: http-trigger
type: http
config:
authType: anonymous
methods:
- GET
- POST
- name: pre-trigger
type: http
qualifier: pre
config:
authType: anonymous
methods:
- GET
- POST
- name: prod-trigger
type: http
qualifier: prod
config:
authType: anonymous
methods:
- GET
- POST
qualifier
生效customDomains:
- domainName: auto
protocol: HTTP
routeConfigs:
- path: /*
qualifier: pro
通过s sync
命令是将线上的资源(包括配置以及代码)同步到本地。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。