f.yml 定义
概述
经过阿里集团标准化小组的讨论,结合社区 serverless.yml
的已有设计,通过一个描述文件 (f.yml) 来描述整个仓库中的函数信息,现有的发布构建工具,运行时都会基于此文件进行各种处理。
描述文件结构基于 serverless.yml,目标是在现有社区化复用能力之上,希望各个平台的代码能尽可能统一,一套代码可以多处部署,并向上扩展。
在 midway serverless v2 之后, functions
段落逐步被装饰器所替代,但是 yml 中的内容依旧保留,作为底层能力。
装饰器将最终生成为下面的 yml 结构,可以对照排错。
大体结构
由于不同平台的触发器不同,配置信息也不同,配置略微有些差别,但是整体基本一致。
目前第一层字段包括:
- service 当前的服务(函数分组),对标应用
- provider 当前的服务提供商,比如 aliyun,tencent 等。
- functions 函数的具体信息
- layers 具体的 layer 层 配置
- resources 引用的资源
- plugins 引用的插件,serverless 预留
- aggregation 聚合部署字段
- package 构建的配置信息
大体如下:
service: serverless-hello-world
provider:
name: aliyun
runtime: nodejs10
role: acs:ram::1647796581073291:role/aoneserverlesstestrole
functions:
hello1:
handler: entry.handler
events:
- http:
path: /foo
method:
- GET
- POST
hello2:
handler: entry.handler2
events:
- http:
path: /foo
method:
- GET
- POST
hello3:
handler: test.handler2
events:
- http:
path: /foo
method:
- GET
- POST
layers:
test:
path: npm:@midwayjs/egg-layer@latest
custom:
customDomain:
domainName: midway-fc.xxxx.com
平台字段支持
由于字段非常多,下面的表格统计了所有当前支持的字段,具体的字段描述可以在下面更详细的表格 中查找。
√ 代表工具链已经支持,○ 代表部分支持平台支持,但是工具链尚未支持。
字段 | aliyun | tencent | aws | |
---|---|---|---|---|
service.name | √ | √ | ||
service.description | √ | √ | ||
provider.name | √ | √ | ||
provider.runtime | √ | √ | ||
provider.stage | √ | |||
provider.region | √ | |||
provider.credentials | √ | |||
provider.timeout | √ | √ | ||
provider.initTimeout | √ | |||
provider.memorySize | √ | √ | ||
provider.description | √ | |||
provider.role | √ | √ | ||
provider.environment | √ | √ | ||
provider.serviceId | √ | |||
provider.vpcConfig | √ | |||
provider.vpcConfig.vpcId | √ | |||
provider.vpcConfig.vSwitchIds | √ | |||
provider.vpcConfig.securityGroupId | √ | |||
provider.internetAccess | √ | |||
provider.policies | √ | |||
provider.logConfig.project | √ | |||
provider.logConfig.logstore | √ | |||
provider.nasConfig | √ | |||
provider.nasConfig.userId | √ | |||
provider.nasConfig.groupId | √ | |||
provider.nasConfig.mountPoints | √ | |||
functions.[fnName] | √ | √ | ||
functions.[fnName].handler | √ | √ | ||
functions.[fnName].stage | √ | |||
functions.[fnName].name | ||||
functions.[fnName].description | √ | √ | ||
functions.[fnName].memorySize | √ | √ | ||
functions.[fnName].timeout | √ | |||
functions.[fnName].runtime | √ | |||
functions.[fnName].initTimeout | √ | |||
functions.[fnName].environment | √ | √ | ||
functions.[fnName].concurrency | √ | |||
functions.[fnName].events | √ | √ | ||
functions.[fnName].events.[http] | √ | √ | ||
functions.[fnName].events.[http].name | √ | |||
functions.[fnName].events.[http].method | √ | √ | ||
functions.[fnName].events.[http].path | √ | √ | ||
functions.[fnName].events.[http].serviceId | √ | |||
functions.[fnName].events.[http].timeout | √ | |||
functions.[fnName].events.[http].integratedResponse | √ | |||
functions.[fnName].events.[http].cors | √ | |||
functions.[fnName].events.[http].role | √ | |||
functions.[fnName].events.[http].vesion | √ | |||
functions.[fnName].events.[apigw] | √ | √ | ||
functions.[fnName].events.[apigw].method | ○ 附 1 | √ | ||
functions.[fnName].events.[apigw].path | ○ | √ | ||
functions.[fnName].events.[apigw].serviceId | √ | |||
functions.[fnName].events.[apigw].timeout | √ | |||
functions.[fnName].events.[apigw].integratedResponse | √ | |||
functions.[fnName].events.[apigw].cors | √ | |||
functions.[fnName].events.[timer] | √ | √ | ||
functions.[fnName].events.[timer].name | √ | |||
functions.[fnName].events.[timer].type | √ | |||
functions.[fnName].events.[timer].value | √ | √ | ||
functions.[fnName].events.[timer].enable | √ | √ | ||
functions.[fnName].events.[timer].payload | √ | |||
functions.[fnName].events.[timer].version | √ | |||
functions.[fnName].events.[mq] | √ | √ | ||
functions.[fnName].events.[mq].name | √ | |||
functions.[fnName].events.[mq].topic | √ | √ | ||
functions.[fnName].events.[mq].strategy | √ | |||
functions.[fnName].events.[mq].tags | √ | |||
functions.[fnName].events.[mq].region | √ | |||
functions.[fnName].events.[mq].role | √ | |||
functions.[fnName].events.[mq].version | √ | |||
functions.[fnName].events.[mq].enable | √ | |||
functions.[fnName].events.[os] | √ | √ | ||
functions.[fnName].events.[os].name | √ | √ | ||
functions.[fnName].events.[os].bucket | √ | √ | ||
functions.[fnName].events.[os],events | √ | √ | ||
functions.[fnName].events.[os].filter.prefix | √ | √ | ||
functions.[fnName].events.[os].filter.suffix | √ | √ | ||
functions.[fnName].events.[os].role | √ | |||
functions.[fnName].events.[os].version | √ | |||
functions.[fnName].events.[os].enable | √ | |||
layers | √ | √ | ||
layers.[layerName].name | √ | √ | ||
layers.[layerName].path | √ | √ | ||
package.include | √ | √ | ||
package.exclude | √ | √ | ||
package.artifact | √ | √ | ||
plugins[pluginsName] | √ | √ | ||
aggregation.[fnName].deployOrigin | √ | √ | ||
aggregation.[fnName].functions | √ | √ | ||
aggregation.[fnName].functionsPattern | √ | √ | ||
deployType | √ | √ | ||
deployType.type | √ | √ | ||
deployType.config | √ | √ | ||
- 附 1:CLI 工具链在本地开发时支持此参数,但是发布时不会读取,需要去网关配置;阿里云云开发平台已经支持此参数进行发布
service
主要是服务名信息,一个服务可以包含多个函数。
结构
export type ServiceStructure =
| string
| {
name: string;
description?: string;
};
字段描述
ServiceStructure | ||
---|---|---|
name | string | 必选,服务名 |
description | string | 描述 |
示例
service: serverless-hello-world // 简写
service:
name: serverless-hello-world
description: 'some description'