Project 规范

两个最低要求:

packages 目录规范

packages 的目录规范与你的 Function 的目录规范是一致的,例如我创建了这么一个 Function:

图 1:An Digital Ocean Function Creation

那么对应的 package 目录就为:

  1. [root@liqiang.io]# tree
  2. .
  3. ├── packages
  4. └── test-package
  5. └── functiona
  6. └── main.go
  7. └── project.yml

packages 目录允许包含多个 Functions 的,按照这个标准来就可以了。

project.yml 规范

这里直接先放一个又所有属性的 project 配置文件:

  1. parameters:
  2. param1: value
  3. environment:
  4. env1: value
  5. packages:
  6. - name: package1
  7. parameters: {}
  8. environment: {}
  9. annotations: {}
  10. actions:
  11. - name: function1
  12. parameters: {}
  13. environment: {}
  14. limits: {}
  15. runtime: 'go:default'
  16. main: ''

可以看到整体是三层结构:

通用函数

可以看到,三层都有参数 parameters 和 environment。

parameters

定义在 parameters 的属性都会作为参数传递给 Function,例如 Function 的入口接口如下:

  1. func Main(args map[string]interface{}) map[string]interface{} {

那么这些定义的参数都是 args 的一部分。

environment

这个就是老生常谈的环境变量的,就不多做介绍了。

Function 参数

main

main 这个参数定义了 Function 的入口,你可能会奇怪,不是说入口是 Main 的么,为什么又需要自定义?其实也很简单,Main 是默认入口,如果你不定义,那么就用它,如果你需要自定义,就可以通过 main 参数来定义。

runtime

runtime 是用来定义应用运行时的,例如我用的是 go,那么就定义 go 作为 runtime,但是 go 也有不同版本啊,所以你可以指定 go 的版本,默认就使用 go:default,指定版本就类似于:go:1.18

limits

limits 字段是用于限制 Function 的一些属性,当前支持以下属性:

一些经验