@serverless-devs/s 2.0.96 → 2.0.97-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/clean/index.js +1 -1
- package/lib/cli/index.js +1 -1
- package/lib/component/index.js +1 -1
- package/lib/config/add/index.js +1 -1
- package/lib/config/delete/index.js +1 -1
- package/lib/config/get/index.js +1 -1
- package/lib/config/index.js +1 -1
- package/lib/index.js +1 -1
- package/lib/init/index.js +1 -1
- package/lib/set/analysis/index.js +1 -1
- package/lib/set/index.js +1 -1
- package/lib/set/locale/index.js +1 -1
- package/lib/set/registry/index.js +1 -1
- package/lib/set/workspace/index.js +1 -1
- package/lib/update-notifier/index.js +1 -1
- package/package.json +2 -2
- package/CODE_OF_CONDUCT.md +0 -5
- package/CONTRIBUTING.md +0 -189
- package/CONTRIBUTORS.md +0 -148
- package/docs/readme.md +0 -100
- package/docs/zh/awesome.md +0 -20
- package/docs/zh/cicd.md +0 -231
- package/docs/zh/cli_design.md +0 -100
- package/docs/zh/command/clean.md +0 -63
- package/docs/zh/command/cli.md +0 -92
- package/docs/zh/command/component.md +0 -75
- package/docs/zh/command/config.md +0 -274
- package/docs/zh/command/custom.md +0 -73
- package/docs/zh/command/init.md +0 -149
- package/docs/zh/command/readme.md +0 -76
- package/docs/zh/command/set.md +0 -195
- package/docs/zh/default_provider_config/alibabacloud.md +0 -82
- package/docs/zh/default_provider_config/aws.md +0 -12
- package/docs/zh/default_provider_config/azure.md +0 -9
- package/docs/zh/default_provider_config/baiducloud.md +0 -8
- package/docs/zh/default_provider_config/gcp.md +0 -21
- package/docs/zh/default_provider_config/huaweicloud.md +0 -52
- package/docs/zh/default_provider_config/readme.md +0 -9
- package/docs/zh/default_provider_config/tencentcloud.md +0 -41
- package/docs/zh/install.md +0 -52
- package/docs/zh/package_dev.md +0 -142
- package/docs/zh/quick_start.md +0 -297
- package/docs/zh/readme.md +0 -92
- package/docs/zh/tool.md +0 -101
- package/docs/zh/yaml.md +0 -207
- package/docs/zh/yaml_and_cli.md +0 -67
- package/jest.setup.ts +0 -37
- package/spec/readme.md +0 -59
- package/spec/zh/0.0.1/readme.md +0 -47
- package/spec/zh/0.0.1/serverless_package_model/1.purpose_and_goals.md +0 -3
- package/spec/zh/0.0.1/serverless_package_model/2.overview_and_terminology.md +0 -14
- package/spec/zh/0.0.1/serverless_package_model/3.package_model.md +0 -434
- package/spec/zh/0.0.1/serverless_package_model/4.application_scopes.md +0 -3
- package/spec/zh/0.0.1/serverless_package_model/5.design_principles.md +0 -3
- package/spec/zh/0.0.1/serverless_package_model/readme.md +0 -12
- package/spec/zh/0.0.1/serverless_registry_model/1.purpose_and_goals.md +0 -18
- package/spec/zh/0.0.1/serverless_registry_model/2.overview_and_terminology.md +0 -18
- package/spec/zh/0.0.1/serverless_registry_model/3.registry_model.md +0 -61
- package/spec/zh/0.0.1/serverless_registry_model/4.application_scopes.md +0 -6
- package/spec/zh/0.0.1/serverless_registry_model/5.design_principles.md +0 -3
- package/spec/zh/0.0.1/serverless_registry_model/readme.md +0 -12
- package/spec/zh/0.0.1/serverless_user_model/1.purpose_and_goals.md +0 -3
- package/spec/zh/0.0.1/serverless_user_model/2.overview_and_terminology.md +0 -16
- package/spec/zh/0.0.1/serverless_user_model/3.user_model.md +0 -218
- package/spec/zh/0.0.1/serverless_user_model/4.application_scopes.md +0 -4
- package/spec/zh/0.0.1/serverless_user_model/5.design_principles.md +0 -3
- package/spec/zh/0.0.1/serverless_user_model/readme.md +0 -12
- package/test/ci.sh +0 -33
- package/test/cli/cli-manager.test.ts +0 -64
- package/test/config/get.test.ts +0 -12
- package/test/helloworld.test.ts +0 -7
- package/test/start-fc-http-nodejs12/code/index.js +0 -47
- package/test/start-fc-http-nodejs12/s.yaml +0 -38
- package/test/utils/index.test.ts +0 -8
- package/test/utils/storage.test.ts +0 -19
- package/tsconfig.json +0 -37
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
# Pacakge 模型
|
|
2
|
-
|
|
3
|
-
Pacakge 模型部分介绍了 Serverless Package Model (SPM) 的建设模型,包括了:
|
|
4
|
-
|
|
5
|
-
- [模型的组成](#模型的组成)
|
|
6
|
-
- [模型的规范](#模型的规范)
|
|
7
|
-
- [组件模型规范](#组件模型规范)
|
|
8
|
-
- [组件模型元数据](#组件模型元数据)
|
|
9
|
-
- [参数详解](#参数详解)
|
|
10
|
-
- [Provider](#Provider)
|
|
11
|
-
- [Category](#Category)
|
|
12
|
-
- [Service](#Service)
|
|
13
|
-
- [Properties](#Properties)
|
|
14
|
-
- [组件模型代码规范](#组件模型代码规范)
|
|
15
|
-
- [应用模型规范](#应用模型规范)
|
|
16
|
-
- [应用模型元数据](#应用模型元数据)
|
|
17
|
-
- [参数详解](#参数详解-1)
|
|
18
|
-
- [Provider](#Provider-1)
|
|
19
|
-
- [Category](#Category-1)
|
|
20
|
-
- [Service](#Service-1)
|
|
21
|
-
|
|
22
|
-
## 模型的组成
|
|
23
|
-
|
|
24
|
-
Serverless Package Model 包括两个部分:
|
|
25
|
-
|
|
26
|
-
- Component Model:组件模型,即通过Serverless Devs,可以被应用所引用,并按照用户的输入,执行预定的功能。例如某个应用中引用了FC组件,那么此时,用户可以通过传入Deploy命令进行函数的部署,而这里的FC组件,则是需要建立在组件模型基础之上,即要符合组件的开发规范;
|
|
27
|
-
- Application Model:应用模型,即通过Serverless Devs,可以被初始化的应用案例,通常一个应用案例包括了一个yaml文件,在该文件中可以包括一个或多个组件来共同完成某个业务。这里所说的应用,就是需要建立在应用模型基础之上的,或者说是需要符合应用开发规范的;
|
|
28
|
-
|
|
29
|
-
## 模型的规范
|
|
30
|
-
|
|
31
|
-
### 组件模型规范
|
|
32
|
-
|
|
33
|
-
Component Model,即组件模型是需要通过指定的文件进行模型的规范和定义的。在这里,推荐的组件模型目录结构为:
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
|- src # 目录名字可以变更
|
|
37
|
-
| └── 代码目录
|
|
38
|
-
|- package.json: 需要定义好main
|
|
39
|
-
|- publish.yaml: 项目的资源描述
|
|
40
|
-
|- readme.md: 项目简介
|
|
41
|
-
|- version.md: 版本更新内容
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
其中:
|
|
45
|
-
|
|
46
|
-
| 目录 | 必须 | 含义 |
|
|
47
|
-
| --- | --- | --- |
|
|
48
|
-
| src | 推荐存在 | 统一放置功能实现,当然也可以换成其他的名称,或者平铺到项目下,但是推荐通过src来做统一的存放 |
|
|
49
|
-
| package.json | 必须存在 | Node.js的package.json,需要描述清楚组件的入口文件位置 |
|
|
50
|
-
| publish.yaml | 必须存在 | Serverless Devs Package的开发识别文档 |
|
|
51
|
-
| readme.md | 必须存在 | 对该组件的描述,或帮助文档信息 |
|
|
52
|
-
| version.md| 推荐存在 | 版本的描述,例如当前版本的更新内容等 |
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
#### 组件模型元数据
|
|
56
|
-
|
|
57
|
-
组件模型元数据将会在`publish.yaml`中进行描述,并在Serverless Registry和Serverless Devs开发者工具侧进行识别和引用。
|
|
58
|
-
|
|
59
|
-
`publish.yaml`文件的基本格式如下所示:
|
|
60
|
-
|
|
61
|
-
```yaml
|
|
62
|
-
Type: Component
|
|
63
|
-
Name: 名称
|
|
64
|
-
Provider:
|
|
65
|
-
- 云厂商名称
|
|
66
|
-
Version: 版本,例如0.0.1
|
|
67
|
-
Description: 简短的描述/介绍
|
|
68
|
-
HomePage: 项目首页地址
|
|
69
|
-
Tags: #标签详情
|
|
70
|
-
- 部署函数
|
|
71
|
-
- 部署组件
|
|
72
|
-
Category: 分类 # 基础云服务/Web框架/Web应用/人工智能/音视频处理/图文处理/监控告警/大数据/IoT/新手入门/其他
|
|
73
|
-
Service: # 使用的服务
|
|
74
|
-
- Name: 服务名 # 函数计算/容器服务/镜像服务/消息队列/工作流/CDN/对象存储/表格存储/MNS/日志服务/API网关/数据库/解析服务/云应用/其他
|
|
75
|
-
# Runtime: Python 3.6 如果服务是函数,还需要增加Runtime
|
|
76
|
-
Authorities: #权限描述
|
|
77
|
-
- 创建函数 # 所需要的权限
|
|
78
|
-
Commands: # 指令,格式为指令:指令描述,例如:
|
|
79
|
-
deploy: 部署函数
|
|
80
|
-
invoke: 调用函数
|
|
81
|
-
Properties:
|
|
82
|
-
Region: # 参数
|
|
83
|
-
Description: 参数描述
|
|
84
|
-
Required: true # 参数必选,true/false
|
|
85
|
-
Type: # 参数类型
|
|
86
|
-
- String
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
##### 参数详解
|
|
90
|
-
|
|
91
|
-
| 目录 | 必须 | 结构 | 含义 |
|
|
92
|
-
| --- | --- | --- | --- |
|
|
93
|
-
| Type | 是 | String | 类型,包括Component和Application两个取值,此处取值Component |
|
|
94
|
-
| Name | 是 | String | 组件名称 |
|
|
95
|
-
| Provider | 是 | List<String> | 组件所支持的云厂商信息 |
|
|
96
|
-
| Version | 是 | String | 组件版本号,例如0.0.1 |
|
|
97
|
-
| Description | 是 | String | 组件描述(一句话的简短描述) |
|
|
98
|
-
| HomePage | 否 | String | 组件的主页,可以填写组件的仓库地址 |
|
|
99
|
-
| Tags | 否 | List<String> | 组件的标签 |
|
|
100
|
-
| Category | 是 | String | 组件的分类 |
|
|
101
|
-
| Service | 是 | Struct | 组件所需要的服务和相关的权限等描述,例如该组件需要函数计算,Serverless工作流等产品/服务作为支持 |
|
|
102
|
-
| Commands | 是 | Struct | 组件支持的命令 |
|
|
103
|
-
| Properties | 是 | Struct | 组件的参数描述,组件的属性定义 |
|
|
104
|
-
|
|
105
|
-
###### Provider
|
|
106
|
-
|
|
107
|
-
取值范围:`阿里云`, `百度智能云`, `华为云`, `腾讯云`, `AWS`, `Azure`, `Google Cloud`, `其它`
|
|
108
|
-
|
|
109
|
-
格式参考:
|
|
110
|
-
```yaml
|
|
111
|
-
Provider:
|
|
112
|
-
- 阿里云
|
|
113
|
-
- 百度智能云
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
###### Category
|
|
117
|
-
|
|
118
|
-
取值范围:`基础云服务`, `Web框架`, `全栈应用`, `人工智能`, `音视频处理`, `图文处理`, `监控告警`, `大数据`, `IoT`, `新手入门`, `其他`
|
|
119
|
-
|
|
120
|
-
格式参考:
|
|
121
|
-
```yaml
|
|
122
|
-
Category: 基础云服务
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
###### Service
|
|
126
|
-
|
|
127
|
-
取值范围:`函数计算`, `容器服务`, `镜像服务`, `消息队列`, `工作流`, `CDN`, `对象存储`, `表格存储`, `MNS`, `日志服务`, `API网关`, `数据库`, `解析服务`, `云应用`, `其他`
|
|
128
|
-
|
|
129
|
-
格式参考:
|
|
130
|
-
```yaml
|
|
131
|
-
Service: # 使用的服务
|
|
132
|
-
- Name: 函数计算
|
|
133
|
-
# Runtime: Python 3.6 如果服务是函数,还需要增加Runtime,取值包括:Node.JS, Python, PHP, Java, Go, 其它
|
|
134
|
-
Authorities: #权限描述
|
|
135
|
-
- 创建函数 # 所需要的权限
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
###### Properties
|
|
139
|
-
|
|
140
|
-
Properties是对组件的属性进行描述的,所以相对比较负责,主要包括:
|
|
141
|
-
|
|
142
|
-
| 目录 | 必须 | 结构 | 含义 |
|
|
143
|
-
| --- | --- | --- | --- |
|
|
144
|
-
| Description | 是 | String | 参数描述 |
|
|
145
|
-
| Required | 是 | String | 是否必须 |
|
|
146
|
-
| Type | 是 | Struct | 参数类型 |
|
|
147
|
-
| Example | 否 | String | 参数举例 |
|
|
148
|
-
| Default | 否 | String | 参数默认值 |
|
|
149
|
-
|
|
150
|
-
关于参数Type(类型)的额外定义:
|
|
151
|
-
|
|
152
|
-
基本参数类型:`String`, `Number`, `List`, `Enum`, `Struct`, `Boolean`, `Null`, `Any`
|
|
153
|
-
复杂参数类型:`List<数据类型>`
|
|
154
|
-
|
|
155
|
-
另外,当Type是List类型时,可以针对不同的元素做别名:`数据类型[别名]`
|
|
156
|
-
|
|
157
|
-
格式参考:
|
|
158
|
-
- 简单格式:
|
|
159
|
-
```yaml
|
|
160
|
-
Properties:
|
|
161
|
-
Region: # 参数
|
|
162
|
-
Description: 参数描述
|
|
163
|
-
Required: true # 参数必选,true/false
|
|
164
|
-
Type: # 参数类型
|
|
165
|
-
- String
|
|
166
|
-
```
|
|
167
|
-
用户侧表现是:
|
|
168
|
-
```yaml
|
|
169
|
-
Region: cn-hangzhou
|
|
170
|
-
```
|
|
171
|
-
- 复杂格式:
|
|
172
|
-
```yaml
|
|
173
|
-
Properties:
|
|
174
|
-
Region: # 参数
|
|
175
|
-
Description: 地区
|
|
176
|
-
Required: true # 参数必选,true/false
|
|
177
|
-
Type: # 参数类型
|
|
178
|
-
- String[简单配置]
|
|
179
|
-
- List<String>[多地域配置]
|
|
180
|
-
- Struct[分别配置]:
|
|
181
|
-
APIGW:
|
|
182
|
-
Description: API网关部署的地区
|
|
183
|
-
Required: true
|
|
184
|
-
Type:
|
|
185
|
-
- String
|
|
186
|
-
Function:
|
|
187
|
-
Description: 函数部署的地区
|
|
188
|
-
Required: true
|
|
189
|
-
Type:
|
|
190
|
-
- String
|
|
191
|
-
```
|
|
192
|
-
用户侧表现是:
|
|
193
|
-
- 当Type为String[简单配置]时:
|
|
194
|
-
```yaml
|
|
195
|
-
Region: cn-hangzhou
|
|
196
|
-
```
|
|
197
|
-
- 当Type为List<String>[多地域配置]时:
|
|
198
|
-
```yaml
|
|
199
|
-
Region:
|
|
200
|
-
- cn-hangzhou
|
|
201
|
-
- cn-beijing
|
|
202
|
-
```
|
|
203
|
-
- 当Type为Struct[分别配置]时:
|
|
204
|
-
```yaml
|
|
205
|
-
Region:
|
|
206
|
-
APIGW: cn-beijing
|
|
207
|
-
Function: cn-shanghai
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
#### 组件模型代码规范
|
|
213
|
-
|
|
214
|
-
在组件模型中,代码组成规范有两个部分:
|
|
215
|
-
- `package.json`中需要描述清楚入口文件所在地址;例如`{"main": "./dist/index.js"}`;
|
|
216
|
-
- 在代码中实现对应的用户方法。例如Package开发者希望用户可以通过deploy命令,进行项目的部署,那么就可以实现一个deploy的方法,并在方法内实现对应的部署能力;
|
|
217
|
-
|
|
218
|
-
关于代码规范部分,可以参考如下案例:
|
|
219
|
-
|
|
220
|
-
```typescript
|
|
221
|
-
import logger from './common/logger';
|
|
222
|
-
import { InputProps } from './common/entity';
|
|
223
|
-
|
|
224
|
-
export default class ComponentDemo {
|
|
225
|
-
/**
|
|
226
|
-
* demo 实例
|
|
227
|
-
* @param inputs
|
|
228
|
-
* @returns
|
|
229
|
-
*/
|
|
230
|
-
public async test(inputs: InputProps) {
|
|
231
|
-
logger.debug(`input: ${JSON.stringify(inputs.props)}`);
|
|
232
|
-
logger.info('command test');
|
|
233
|
-
return { hello: 'world' };
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
其中入参`inputs`的结构为:
|
|
239
|
-
|
|
240
|
-
```json
|
|
241
|
-
{
|
|
242
|
-
"command": "",
|
|
243
|
-
"project": {
|
|
244
|
-
"projectName": "",
|
|
245
|
-
"component": "",
|
|
246
|
-
"provider": "",
|
|
247
|
-
"access": ""
|
|
248
|
-
},
|
|
249
|
-
"credentials": {},
|
|
250
|
-
"prop": {},
|
|
251
|
-
"args": "",
|
|
252
|
-
"argsObj": []
|
|
253
|
-
}
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
| 目录 | 含义 |
|
|
257
|
-
| --- | --- |
|
|
258
|
-
| command | 用户所执行的命令 |
|
|
259
|
-
| project | 用户的项目基本信息 |
|
|
260
|
-
| credentials | 用户的密钥信息 |
|
|
261
|
-
| prop | 用户配置的属性/参数 |
|
|
262
|
-
| args| 用户传递的参数(字符串形式) |
|
|
263
|
-
| argsObj| 用户传递的参数(解析后的,以数组形式传递) |
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
在上面的案例代码中,可以看到有一个test方法,该方法就是功能实现的方法。此时当用户使用test命令时,系统就会携带参数调用该方法。以一个真实案例作为举例说明:
|
|
267
|
-
|
|
268
|
-
该组件名为`hexo`,组件核心代码如上所示,具备一个test方法,此时用户侧的Yaml为:
|
|
269
|
-
|
|
270
|
-
```yaml
|
|
271
|
-
edition: 1.0.0 # 命令行YAML规范版本,遵循语义化版本(Semantic Versioning)规范
|
|
272
|
-
name: FullStack # 项目名称
|
|
273
|
-
access: xxx-account1 # 秘钥别名
|
|
274
|
-
|
|
275
|
-
services:
|
|
276
|
-
HexoComponent:
|
|
277
|
-
component: hexo
|
|
278
|
-
props:
|
|
279
|
-
region: 'cn-hangzhou'
|
|
280
|
-
codeUri: './src'
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
当用户执行`s test mytest -a -b abc`,此时,组件代码中的`test`方法,收到的`inputs`参数实际上是:
|
|
284
|
-
|
|
285
|
-
```json
|
|
286
|
-
{
|
|
287
|
-
"command": "test",
|
|
288
|
-
"project": {
|
|
289
|
-
"projectName": "HexoComponent",
|
|
290
|
-
"component": "hexo",
|
|
291
|
-
"provider": "alibaba",
|
|
292
|
-
"access": "release"
|
|
293
|
-
},
|
|
294
|
-
"credentials": {
|
|
295
|
-
"AccountID": "********",
|
|
296
|
-
"AccessKeyID": "********",
|
|
297
|
-
"AccessKeySecret": "********"
|
|
298
|
-
},
|
|
299
|
-
"prop": {
|
|
300
|
-
"Region": "cn-hangzhou",
|
|
301
|
-
"CodeUri": "./src"
|
|
302
|
-
},
|
|
303
|
-
"args": "mytest -a -b abc",
|
|
304
|
-
"argsObj": [
|
|
305
|
-
"mytest", "-a", "-b", "abc"
|
|
306
|
-
]
|
|
307
|
-
}
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
此时test方法会打印日志信息等,并返回最终的结果给命令行工具:`{ "hello": "world" }`
|
|
311
|
-
|
|
312
|
-
### 应用模型规范
|
|
313
|
-
|
|
314
|
-
Application Model,即组件模型是需要通过指定的文件进行模型的规范和定义的。在这里,推荐的组件模型目录结构为:
|
|
315
|
-
|
|
316
|
-
```
|
|
317
|
-
|- src # 目录名字不可以变更
|
|
318
|
-
| └── 应用目录
|
|
319
|
-
| └── s.yml: 应用描述文件
|
|
320
|
-
|- publish.yaml: 项目的资源描述
|
|
321
|
-
|- readme.md: 项目简介
|
|
322
|
-
|- version.md: 版本更新内容
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
其中:
|
|
326
|
-
|
|
327
|
-
| 目录 | 必须 | 含义 |
|
|
328
|
-
| --- | --- | --- |
|
|
329
|
-
| src | 必须存在 | 应用所在目录 |
|
|
330
|
-
| s.yml | 必须存在 | 应用的资源描述Yaml,需要符合该应用对应的publish,yaml规范 |
|
|
331
|
-
| publish.yaml | 必须存在 | Serverless Devs Package的开发识别文档 |
|
|
332
|
-
| readme.md | 必须存在 | 对该组件的描述,或帮助文档信息 |
|
|
333
|
-
| version.md| 推荐存在 | 版本的描述,例如当前版本的更新内容等 |
|
|
334
|
-
|
|
335
|
-
#### 应用模型元数据
|
|
336
|
-
|
|
337
|
-
应用模型元数据将会在`publish.yaml`中进行描述,并在Serverless Registry和Serverless Devs开发者工具侧进行识别和初始化。
|
|
338
|
-
|
|
339
|
-
`publish.yaml`文件的基本格式如下所示:
|
|
340
|
-
|
|
341
|
-
```yaml
|
|
342
|
-
Type: Application
|
|
343
|
-
Name: 名称
|
|
344
|
-
Provider:
|
|
345
|
-
- 云厂商名称
|
|
346
|
-
Version: 版本,例如0.0.1
|
|
347
|
-
Description: 简短的描述/介绍
|
|
348
|
-
HomePage: 项目首页地址
|
|
349
|
-
Tags: #标签详情
|
|
350
|
-
- 部署函数
|
|
351
|
-
- 部署组件
|
|
352
|
-
Category: 分类 # 基础云服务/Web框架/Web应用/人工智能/音视频处理/图文处理/监控告警/大数据/IoT/新手入门/其他
|
|
353
|
-
Service: # 使用的服务
|
|
354
|
-
- Name: 服务名 # 函数计算/容器服务/镜像服务/消息队列/工作流/CDN/对象存储/表格存储/MNS/日志服务/API网关/数据库/解析服务/云应用/其他
|
|
355
|
-
# Runtime: Python 3.6 如果服务是函数,还需要增加Runtime
|
|
356
|
-
Authorities: #权限描述
|
|
357
|
-
- 创建函数 # 所需要的权限
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
##### 参数详解
|
|
361
|
-
|
|
362
|
-
| 目录 | 必须 | 结构 | 含义 |
|
|
363
|
-
| --- | --- | --- | --- |
|
|
364
|
-
| Type | 是 | String | 类型,包括Component和Application两个取值,此处取值Application |
|
|
365
|
-
| Name | 是 | String | 组件名称 |
|
|
366
|
-
| Provider | 是 | List<String> | 组件所支持的云厂商信息 |
|
|
367
|
-
| Version | 是 | String | 组件版本号,例如0.0.1 |
|
|
368
|
-
| Description | 是 | String | 组件描述(一句话的简短描述) |
|
|
369
|
-
| HomePage | 否 | String | 组件的主页,可以填写组件的仓库地址 |
|
|
370
|
-
| Tags | 否 | List<String> | 组件的标签 |
|
|
371
|
-
| Category | 是 | String | 组件的分类 |
|
|
372
|
-
| Service | 是 | Struct | 组件所需要的服务和相关的权限等描述,例如该组件需要函数计算,Serverless工作流等产品/服务作为支持 |
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
###### Provider
|
|
376
|
-
|
|
377
|
-
取值范围:`阿里云`, `百度智能云`, `华为云`, `腾讯云`, `AWS`, `Azure`, `Google Cloud`, `其它`
|
|
378
|
-
|
|
379
|
-
格式参考:
|
|
380
|
-
```yaml
|
|
381
|
-
Provider:
|
|
382
|
-
- 阿里云
|
|
383
|
-
- 百度智能云
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
###### Category
|
|
387
|
-
|
|
388
|
-
取值范围:`基础云服务`, `Web框架`, `全栈应用`, `人工智能`, `音视频处理`, `图文处理`, `监控告警`, `大数据`, `IoT`, `新手入门`, `其他`
|
|
389
|
-
|
|
390
|
-
格式参考:
|
|
391
|
-
```yaml
|
|
392
|
-
Category: 基础云服务
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
###### Service
|
|
396
|
-
|
|
397
|
-
取值范围:`函数计算`, `容器服务`, `镜像服务`, `消息队列`, `工作流`, `CDN`, `对象存储`, `表格存储`, `MNS`, `日志服务`, `API网关`, `数据库`, `解析服务`, `云应用`, `其他`
|
|
398
|
-
|
|
399
|
-
格式参考:
|
|
400
|
-
```yaml
|
|
401
|
-
Service: # 使用的服务
|
|
402
|
-
- Name: 函数计算
|
|
403
|
-
# Runtime: Python 3.6 如果服务是函数,还需要增加Runtime,取值包括:Node.JS, Python, PHP, Java, Go, 其它
|
|
404
|
-
Authorities: #权限描述
|
|
405
|
-
- 创建函数 # 所需要的权限
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
> 特殊格式:在应用模型中,需要存在`src/s.yaml`文件,作为Serverless Devs识别和使用的资源、行为描述文件,在该文件中,可能涉及到部分内容是需要用户进行填写的,例如用户的密钥名字,用户部署业务的地域等。此时可以参考:
|
|
409
|
-
> - `"{{ access }}"` :直接提醒用户需要输入access这样的一个参数,作为Yaml中所必须的参数;
|
|
410
|
-
> - `'{{ bucket | alibaba oss bucket }}'` : :直接提醒用户需要输入bucket这样的一个参数,作为Yaml中所必须的参数,并以`|`之后的内容"alibaba oss bucket"作为解释这个参数的含义;
|
|
411
|
-
> 例如,在某应用的`s.yaml`中表现为:
|
|
412
|
-
> ```yaml
|
|
413
|
-
> edition: 1.0.0
|
|
414
|
-
> access: "{{ access }}"
|
|
415
|
-
>
|
|
416
|
-
> services:
|
|
417
|
-
> website-starter:
|
|
418
|
-
> component: devsapp/website
|
|
419
|
-
> actions:
|
|
420
|
-
> pre-deploy:
|
|
421
|
-
> - run: npm install
|
|
422
|
-
> path: ./
|
|
423
|
-
> - run: npm run build
|
|
424
|
-
> path: ./
|
|
425
|
-
> props:
|
|
426
|
-
> bucket: '{{ bucket | alibaba oss bucket }}'
|
|
427
|
-
> src:
|
|
428
|
-
> codeUri: ./
|
|
429
|
-
> publishDir: ./build
|
|
430
|
-
> index: index.html
|
|
431
|
-
> region: cn-hangzhou
|
|
432
|
-
> hosts:
|
|
433
|
-
> - host: auto
|
|
434
|
-
> ```
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# 开发包模型
|
|
2
|
-
|
|
3
|
-
一个关于 Serverless Package 的规范。Package developer 需要遵循该规范进行组件的开发或者应用的共享,否则将无法被 Serverless Devs 开发者工具 工具所识别和加载,也无法被 Application 所引用,并实现预期的功能。
|
|
4
|
-
|
|
5
|
-
- [目的和目标](1.purpose_and_goals.md)
|
|
6
|
-
- [概述和术语](2.overview_and_terminology.md)
|
|
7
|
-
- [Package与Package Model](2.overview_and_terminology.md#package与package-model)
|
|
8
|
-
- [Package 模型](./3.package_model.md)
|
|
9
|
-
- [模型的组成](./3.registry_model.md#模型的组成)
|
|
10
|
-
- [模型的规范](./3.registry_model.md#模型的规范)
|
|
11
|
-
- [适用范围](4.application_scopes.md)
|
|
12
|
-
- [设计原则](5.design_principles.md)
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# 目的和目标
|
|
2
|
-
|
|
3
|
-
Serverless Registry Model(简称SRM,下文将使用SRM代替)的目标是定义一种 Serverless 架构下的 Registry 的规范,与 Python 中的 pypi, Nodejs 中的 npm 等类似,将以此来开放和分享 Serverless Package,建设 Serverless 生态。
|
|
4
|
-
|
|
5
|
-
为了让大家更简单的理解 Serverless Registry, 可以通过与 Python Pypi, Nodejs NPM 的对比,进行深入探索:
|
|
6
|
-
|
|
7
|
-
| | **Serverless Reigstry** | Python Pypi | Nodejs NPM |
|
|
8
|
-
| ---- | ---- | ---- | ---- |
|
|
9
|
-
| 存储内容 | **Serverless packages**<br>**(包括 Components 和 Application)** | Python packages | Nodejs packages |
|
|
10
|
-
| 是否开放标准 | **是** | 是 | 是 |
|
|
11
|
-
| 官方源 | **registry.devsapp.cn/simple** | pypi.python.org | registry.npmjs.org |
|
|
12
|
-
| 其它源举例 | **Github registry** <br> **Gitee registry** | 清华源 <br> 豆瓣源 | tnpm <br> cnpm |
|
|
13
|
-
| 是否支持私有化 | **支持** | 支持 | 支持 |
|
|
14
|
-
| 配套工具 | **Serverless Devs 开发者工具** | Python包管理工具(pip) | Node.js打包管理工具(npm) |
|
|
15
|
-
| 配套命令 | **s** | pip | npm |
|
|
16
|
-
| 如何使用 | 在`s.yaml`中直接引用 | 安装之后,在代码中引用 | 安装之后,在代码中引用 |
|
|
17
|
-
|
|
18
|
-
本规范,提供了对 Serverless 应用开发和部署的相关生态的支持,通过本规范可以快速的创建公开的/私有化的 Serverless Registry,并通过 Serverless Devs 开发者工具 进行使用,助力 Serverless 应用开发者可以更简单,更快速,更方便的使用不同平台的 Serverless 产品,可以提升功能效能。
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# 概述和术语
|
|
2
|
-
|
|
3
|
-
本节讲述了 SRM 及其术语。它首先是一个 Serverless Devs Model(SDM) 中不可或缺的概念,它代表的是 Serverless 的一种开发者生态,Serverless Devs 开发者工具 开发者工具将会通过 Serverless Registry 进行应用案例的拉取,或者组件的下载和使用,而 Serverless Registry Model(SRM) 则是 Serverless Registry 的规范和标准。
|
|
4
|
-
|
|
5
|
-
## 模型概述
|
|
6
|
-
|
|
7
|
-
该规范提出了一个模型,定义 Serverless Registry 如下:
|
|
8
|
-
|
|
9
|
-
> Serverless Registry 是承载 Serverless 生态的抽象概念,与 Python Pypi,Nodejs NPM 等类似,Serverless Registry 用于开放和共享 Serverless Package。
|
|
10
|
-
|
|
11
|
-
在当前版本中,Serverless Registry 定义了以下内容:
|
|
12
|
-
- Serverless Registry 将会同时承载应用和组件;
|
|
13
|
-
- 应用和组件在 Serverless Registry 上将会具有不同数据结构的元数据;
|
|
14
|
-
- Serverless Registry 的应用可以通过规范的 API 进行查询和获取;
|
|
15
|
-
- Serverless Registry 可以且仅可以承载符合 [Serverless Package Model 规范](./../serverless_package_model)的 Package (包括应用与组件);
|
|
16
|
-
- Serverless Registry 所承载的内容可以在之后的版本进行拓展;
|
|
17
|
-
- Serverless Registry 可以根据 Registry 建设者/组织的需求增加符合自身需要的权限鉴定策略;
|
|
18
|
-
- Serverless Registry 中的 Package (包括应用与组件)应当具备版本的划分能力,以及 Package 的增加、删除的能力;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# Registry 模型
|
|
2
|
-
|
|
3
|
-
Registry 模型部分介绍了 Serverless Registry Model (SRM) 的建设模型,包括了:
|
|
4
|
-
|
|
5
|
-
- [元数据规范](#元数据规范)
|
|
6
|
-
- [Registry 规范](#registry规范)
|
|
7
|
-
|
|
8
|
-
## 元数据规范
|
|
9
|
-
|
|
10
|
-
Serverless Reigstry 需要获得并存储 Package 以下信息:
|
|
11
|
-
|
|
12
|
-
| 数据名 | 类型 | 描述 |
|
|
13
|
-
| ---- | ---- | ---- |
|
|
14
|
-
| Name | String | Package名称 |
|
|
15
|
-
| Type | String | Component/Application |
|
|
16
|
-
| Version | String | Package版本,需要符合`主版本号.子版本号.修正版本号`格式 |
|
|
17
|
-
| PublishTime | Number | 发布时间戳(秒) |
|
|
18
|
-
| VersionBody | String | 版本对应的描述 |
|
|
19
|
-
|
|
20
|
-
> 除了以上基础规范,Serverless Registry 的提供者/组织还可以根据具体需求,存储更多的数据/信息,包括不限于用于鉴权使用的 Package 贡献者id,用户确定 Package 状态的status等;
|
|
21
|
-
|
|
22
|
-
## Registry 规范
|
|
23
|
-
|
|
24
|
-
Package 开发者和 Serverless 开发者在发布 Package 以及使用 Package 的流程可以简化为:
|
|
25
|
-
|
|
26
|
-

|
|
27
|
-
|
|
28
|
-
通过上述流程,可以看到对于 Package 开发者而言,需要按照[Serverless Package Model 规范](./../serverless_package_model)提供相对应的 Package 到 Serverless Registry,而对于 Serverless 开发者而言,则需通过 Serverless Devs 开发者工具 工具中,进行 Package 的下载和使用。在整个过程中,涉及到的核心规范如下:
|
|
29
|
-
|
|
30
|
-
- Serverless Registry 在接受 Package 开发者贡献的组件与应用时,接受且只接受标准zip格式的压缩包,且压缩包中包括的代码等内容符合且必须符合符合 [Serverless Package Model 规范](./../serverless_package_model);
|
|
31
|
-
- 对于发布在 Serverless Registry 上的应用和组件,Serverless Registry 需要按照以下规范提供对应 Package 版本查询功能以及相对应的下载功能:
|
|
32
|
-
- 全部版本查询:
|
|
33
|
-
- Method:GET
|
|
34
|
-
- URI:{package-name}/releases/latest
|
|
35
|
-
- Response:
|
|
36
|
-
```
|
|
37
|
-
{
|
|
38
|
-
"tag_name": "1.1.13",
|
|
39
|
-
"created_at": "2021-01-04T07:41:23Z",
|
|
40
|
-
"zipball_url": "https://api.github.com/repos/Serverless-Devs/Serverless-Devs/zipball/1.1.13",
|
|
41
|
-
"body": "- 中文\r\n - 修复边界条件下临时密钥获取失败的BUG\r\n- English: \r\n - Fix the bug that the temporary key acquisition fails under boundary conditions"
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
- 最新版本查询:
|
|
45
|
-
- Method:GET
|
|
46
|
-
- URI:{package-name}/releases/latest
|
|
47
|
-
- Response:
|
|
48
|
-
```
|
|
49
|
-
{
|
|
50
|
-
"tag_name": "1.1.13",
|
|
51
|
-
"created_at": "2021-01-04T07:41:23Z",
|
|
52
|
-
"zipball_url": "https://api.github.com/repos/Serverless-Devs/Serverless-Devs/zipball/1.1.13",
|
|
53
|
-
"body": "- 中文\r\n - 修复边界条件下临时密钥获取失败的BUG\r\n- English: \r\n - Fix the bug that the temporary key acquisition fails under boundary conditions"
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
- Package下载:
|
|
57
|
-
- Method:GET
|
|
58
|
-
- URI:{package-name}/zipball/{version}
|
|
59
|
-
- Response:组件压缩包
|
|
60
|
-
|
|
61
|
-
> 除了以上基础规范,Serverless Registry 的提供者/组织还可以根据具体需求,提供 Package 更新,删除以及权限变更等相关的额外能力。
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# 适用范围
|
|
2
|
-
|
|
3
|
-
以上规范适于条件仅限于 Serverless Devs 开发者工具 所支持、所识别的文件格式,以及所必须的流程接口。用户/组织可以通过上述的规范可以建立的 Serverless Registry 可以直接被 Serverless Devs 开发者工具 所识别和使用。
|
|
4
|
-
|
|
5
|
-
但是并不代表 Serverless Registry 的功能仅如此,作为 Serverless Registry 的建设者和维护者,有权在保证符合上述规范的前提下丰富相对应的接口以及能力。包括不限于所春初的元数据的丰富,所支持的接口能力的丰富等,这些额外的能力将作为 Serverless Registry 的拓展能力存在,并不作为 Serverless Registry Model的一部分。
|
|
6
|
-
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Registry模型
|
|
2
|
-
|
|
3
|
-
一个开放的 Serverless Registry Model。Package的开发者可以将自己开发的组件,或者待分享的应用发布到该平台。该平台可以使用目前 Serverless Devs 所支持的 Github Resitry, Gitee Registry, Serverless Registry,也可以按照该规范搭建私有的 Registry 以完成部分能力。
|
|
4
|
-
|
|
5
|
-
- [目的和目标](1.purpose_and_goals.md)
|
|
6
|
-
- [概述和术语](2.overview_and_terminology.md)
|
|
7
|
-
- [模型概述](2.overview_and_terminology.md#模型概述)
|
|
8
|
-
- [Registry 模型](3.registry_model.md)
|
|
9
|
-
- [元数据规范](3.registry_model.md#元数据规范)
|
|
10
|
-
- [Registry 规范](3.registry_model.md#registry-规范)
|
|
11
|
-
- [适用范围](4.application_scopes.md)
|
|
12
|
-
- [设计原则](5.design_principles.md)
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# 概述和术语
|
|
2
|
-
|
|
3
|
-
Serverless User Model(SUM) 是针对 Serverless 开发者的应用模型,也是Serverless应用开发者的开发规范,通过该规范开发的应用,可以被Serverless Devs开发者工具所识别,并使用Serverless Registry所提供的组件进行相关功能的实现。
|
|
4
|
-
|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
### 模型概述
|
|
9
|
-
|
|
10
|
-
该规范提出了一个Serverless开发者模型,定义 Serverless Application 规范如下:
|
|
11
|
-
|
|
12
|
-
> Serverless 应用指的是可以被Serverless Devs开发者工具所识别的Serverless应用,需要具备一个符合Serverless Application 的 Yaml 文件,对应用进行相对应的资源描述与行为描述。
|
|
13
|
-
|
|
14
|
-
在当前版本中,Serverless User Model 定义了以下内容:
|
|
15
|
-
- Serverless Application 规范
|
|
16
|
-
- Serverless Package Component 使用规范
|