Digital Ocean Function 开发
source link: https://liqiang.io/post/digitalocean-serverless-functions-develop?lang=ZH_CN
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Project 规范
两个最低要求:
- packages 目录
- project.yml
packages 目录规范
packages 的目录规范与你的 Function 的目录规范是一致的,例如我创建了这么一个 Function:
图 1:An Digital Ocean Function Creation |
---|
那么对应的 package 目录就为:
[[email protected]]# tree
.
├── packages
│ └── test-package
│ └── functiona
│ └── main.go
└── project.yml
packages 目录允许包含多个 Functions 的,按照这个标准来就可以了。
project.yml 规范
这里直接先放一个又所有属性的 project 配置文件:
parameters:
param1: value
environment:
env1: value
packages:
- name: package1
parameters: {}
environment: {}
annotations: {}
actions:
- name: function1
parameters: {}
environment: {}
limits: {}
runtime: 'go:default'
main: ''
可以看到整体是三层结构:
- 第一层:project 级别,一个 project 包含多个 package。在 project 层级定义的属性都将被 package 继承;
- 第二层:package 级别,一个 package 包含多个 function。在 package 级别定义的属性也将被 function 继承(当然包括从 project 继承的属性);
- 第三层:function 级别,定义属于这个 function 的特殊属性。
可以看到,三层都有参数 parameters 和 environment。
parameters
定义在 parameters 的属性都会作为参数传递给 Function,例如 Function 的入口接口如下:
func Main(args map[string]interface{}) map[string]interface{} {
那么这些定义的参数都是 args 的一部分。
environment
这个就是老生常谈的环境变量的,就不多做介绍了。
Function 参数
main
这个参数定义了 Function 的入口,你可能会奇怪,不是说入口是 Main
的么,为什么又需要自定义?其实也很简单,Main
是默认入口,如果你不定义,那么就用它,如果你需要自定义,就可以通过 main
参数来定义。
runtime
runtime
是用来定义应用运行时的,例如我用的是 go,那么就定义 go 作为 runtime,但是 go 也有不同版本啊,所以你可以指定 go 的版本,默认就使用 go:default
,指定版本就类似于:go:1.18
。
limits
limits
字段是用于限制 Function 的一些属性,当前支持以下属性:
timeout
:单位:ms,用于限制 API 的响应时间;memory
:单位:MB,用于限制程序的使用内存;logs
:单位:KB,用于限制程序的日志大小;
- Function 代码只能在单个目录下
- 我猜测:Function 定位为
function
,而不是一个project
,所以规模不应该很大,单层目录可以满足要求 - 我猜测:Function 是一个业务单元,当需要分层构造更复杂的结构时,需要组合不同的 Function 来完成
- 我猜测:Function 定位为
- 感觉就是 Digital Ocean 的这个 Function 功能实在还是比较年轻,首先公开的功能还是很局限的,但是我知道他支持的肯定不是只有这么多,但是事实上也只有这么多能知道怎么用。
- 例如这个示例项目:https://github.com/digitalocean/sample-functions-golang-random 中的 app-spec.yaml 是怎么用的就没有说明;
- 还有例如 Go 项目如果 import 其他 package 应该如何操作这个也是没有说明的;
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK