|
| 1 | +# 用户手册 |
| 2 | + |
| 3 | +本文档概述了ServerlessInsight的规范,详细介绍了IaC(基础设施即代码)的YAML定义。 |
| 4 | + |
| 5 | +## serverlessinsight Yaml配置规范 |
| 6 | + |
| 7 | +ServerlessInsight的YAML配置文件是一个描述Serverless应用的资源的文件,它包含了Serverless应用的所有资源定义,如函数、API网关、事件等。以下是一个ServerlessInsight的YAML配置文件的示例: |
| 8 | + |
| 9 | +> stack.yml |
| 10 | +
|
| 11 | +```yaml |
| 12 | +version: 0.1 |
| 13 | +provider: aliyun |
| 14 | + |
| 15 | +vars: |
| 16 | + region: cn-hangzhou |
| 17 | + account_id: 1234567890 |
| 18 | + |
| 19 | +stages: |
| 20 | + dev: |
| 21 | + region: ${vars:region} |
| 22 | + account_id: ${vars:account_id} |
| 23 | + |
| 24 | +service: insight-poc |
| 25 | + |
| 26 | +tags: |
| 27 | + owner: geek-fun |
| 28 | + |
| 29 | +functions: |
| 30 | + insight_poc_fn: |
| 31 | + name: insight-poc-fn |
| 32 | + runtime: nodejs18 |
| 33 | + handler: ${vars.handler} |
| 34 | + code: artifacts/artifact.zip |
| 35 | + memory: 512 |
| 36 | + timeout: 10 |
| 37 | + environment: |
| 38 | + NODE_ENV: production |
| 39 | + TEST_VAR: ${vars.testv} |
| 40 | + TEST_VAR_EXTRA: abcds-${vars.testv}-andyou |
| 41 | + |
| 42 | +events: |
| 43 | + gateway_event: |
| 44 | + type: API_GATEWAY |
| 45 | + name: insight-poc-gateway |
| 46 | + triggers: |
| 47 | + - method: GET |
| 48 | + path: /api/hello |
| 49 | + backend: insight-poc-fn |
| 50 | + |
| 51 | +``` |
| 52 | + |
| 53 | +如上,一个典型的ServerlessInsight定义包含了`version`、`provider`、`vars`、`stages`、`service`、`tags`、`functions`和`events` |
| 54 | +字段。我们来逐个解释一下这个YAML文件的各个部分: |
| 55 | + |
| 56 | +## version |
| 57 | + |
| 58 | +`version`字段指定了ServerlessInsight的YAML配置文件的版本,目前只支持`0.1`版本。 |
| 59 | +注意主版本之间可能会有不兼容的变化,所以请确保您的配置文件与ServerlessInsight的版本兼容。 |
| 60 | + |
| 61 | +```yaml |
| 62 | +version: 0.1 |
| 63 | +``` |
| 64 | +
|
| 65 | +## provider |
| 66 | +
|
| 67 | +`provider`字段指定了ServerlessInsight的提供商,包括`aliyun`、`huawei`、`tencent`等,目前只支持`aliyun`,其他提供商的支持正在开发中。 |
| 68 | + |
| 69 | +```yaml |
| 70 | +provider: aliyun |
| 71 | +``` |
| 72 | + |
| 73 | +## vars |
| 74 | + |
| 75 | +`vars`字段是一个对象,用于定义一些变量,这些变量可以在其他地方引用。在部署时,可以通过`--parameter key=var`或`-p key=var` |
| 76 | +传递变量值并覆盖默认值。 |
| 77 | +变量可以通过`${vars.var_name}`的方式在模版中进行引用。 |
| 78 | + |
| 79 | +```yaml |
| 80 | +vars: |
| 81 | + bucket_name: my-bucket |
| 82 | + domain_name: my-domain |
| 83 | +``` |
| 84 | + |
| 85 | +## stages |
| 86 | + |
| 87 | +`stages`字段是一个对象,用于定义不同stage下的的配置项的值。最佳实践是将部署环境相关的配置项放在`stages` |
| 88 | +字段下,使得不同环境下相同的配置项可以被赋予不同的值,如: |
| 89 | + |
| 90 | +```yaml |
| 91 | +stages: |
| 92 | + default: |
| 93 | + domain_name: my-domain-dev.com |
| 94 | + database_name: my-database-dev |
| 95 | + local: |
| 96 | + domain_name: localhost |
| 97 | + database_name: localhost |
| 98 | + dev: |
| 99 | + domain_name: my-domain-dev.com |
| 100 | + database_name: my-database-dev |
| 101 | + prod: |
| 102 | + domain_name: my-domain-prod.com |
| 103 | + database_name: my-database-prod |
| 104 | +``` |
| 105 | + |
| 106 | +在stages中的变量可以通过`${stages.domain_name}`的方式在模版中进行引用,无需指定stage, 在部署/启动服务时,通过`--stage`或 |
| 107 | +`-s`参数指定部署的环境,如`si deploy --stage prod`,模版便会引用对于stage的变量值。如果不指定stage,默认使用`default`。 |
| 108 | + |
| 109 | +## service |
| 110 | + |
| 111 | +`service`字段指定了Serverless应用的名称。`service` |
| 112 | +字段是一个全局唯一的标识符,用于区分不同的Serverless应用。不同于命令行中传递的 \<stackName\> |
| 113 | +参数,service的值将作为隐形创建资源的ID以及资源名称前缀,且service需要区分部署的stage,所以最佳实践是将service命名为 |
| 114 | +`<service>-<stage>`。 |
| 115 | + |
| 116 | +```yaml |
| 117 | +service: insight-poc-${stage} |
| 118 | +``` |
| 119 | + |
| 120 | +> 注意,${stage}是ServerlessInsight提供的全局预定义变量,表示当前部署的stage,值为命令行中指定的stage或默认值`default`。 |
| 121 | + |
| 122 | +## tags |
| 123 | + |
| 124 | +`tags`字段是一个对象,用于定义一些标签。在这个例子中,我们定义了`owner`标签。 |
| 125 | + |
| 126 | +## functions |
| 127 | + |
| 128 | +`functions`字段是一个对象,用于定义serverless方法。functions下的每一个子项都是一个方法的定义。function支持的字段有: |
| 129 | + |
| 130 | +- **name**: serverless方法的名称 |
| 131 | + > 支持的字符集为`a-zA-Z0-9-_`,长度为1-64个字符 |
| 132 | + > required: true |
| 133 | +- **runtime**: serverless方法的运行时 |
| 134 | + > 支持的运行时: |
| 135 | + nodejs20,nodejs18,nodejs16,nodejs14,nodejs12,nodejs10,nodejs8,python3.10,python3.9,python3,PHP7.2,Java11,.NETCore3.1,Go1.x |
| 136 | +- **handler**: serverless方法的处理程序 |
| 137 | + > required: true |
| 138 | +- **code**: serverless方法的代码包相对项根目录的路径 |
| 139 | + > 当前仅支持zip格式的代码包 |
| 140 | + > required: true |
| 141 | +- **timeout**: serverless方法的超时时间 |
| 142 | + > 默认值: 15分钟 |
| 143 | +- **memory**: serverless方法的内存大小 |
| 144 | + > 默认值: 128MB |
| 145 | +- **environment**: serverless方法的环境变量 |
| 146 | + > 支持的字符集为`a-zA-Z0-9-_`,长度为1-64个字符 |
| 147 | + > required: false |
| 148 | + |
| 149 | +## events |
| 150 | + |
| 151 | +`events`字段是一个对象,用于定义事件。事件是发起函数调用的触发器。可以是一个来自用户的通过api gateway转发的http请求 |
| 152 | +也可以是来自消息队列,数据库状态改变的事件等,events下的每一个子项都是一个事件的定义。event支持的字段有: |
| 153 | + |
| 154 | +- **type**: 事件的类型(目前仅支持 API_GATEWAY) |
| 155 | + > 支持的事件类型有:API_GATEWAY,SQS,S3,HTTP,Timer等 |
| 156 | + > required: true |
| 157 | +- **name**: 事件的名称 |
| 158 | + > required: true |
| 159 | +- **triggers**: 事件的触发器 |
| 160 | + > required: true |
| 161 | + - **method**: 事件的方法 |
| 162 | + > required: true |
| 163 | + > 支持的方法有:GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS 以及ANY |
| 164 | + - **path**: 事件的路径 |
| 165 | + > required: true |
| 166 | + - **backend**: 事件的后端,通过方法的名称,指定后端的方法,请求最终有指定的方法进行处理 |
| 167 | + > required: true |
| 168 | + |
0 commit comments