首先介绍下在本文出现的几个比较重要的概念:
函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考。
2.0 版本的 Fun,在部署这一块做了很多努力,并提供了比较完善的功能,能够做到将云资源方便、平滑地部署到云端。但该版本,在本地开发上的体验,还有较多的工作要做。于是,我们决定推出 Fun Init 弥补这一处短板。
Fun Init: Fun Init 作为 Fun 的一个子命令存在,只要 Fun 的版本大于等于 2.7.0,即可以直接通过fun init
命令使用。Fun Init 工具可以根据指定的模板快速的创建函数计算应用,快速体验和开发函数计算相关业务。官方会提供常用的模板,用户也可以自定自己的模板。
快速体验
hellworld-nodejs8 模板目录结构
helloworld-nodejs8 ① 模板项目根目录
├── metadata.json ② 模板项目配置文件
└── {{ projectName }} ③ 模板根目录
├── index.js
└── template.yml
执行命令:fun init -n xxx helloworld-nodejs8
$ fun init -n xxx helloworld-nodejs8
Start rendering template...
+ /Users/kevin/xxx
+ /Users/kevin/xxx/index.js
+ /Users/kevin/xxx/template.yml
finish rendering template.
初始化生成的项目目录结构:
xxx
├── index.js
└── template.yml
Fun Init 命令格式
$ fun init --help
Usage: init [options] [location]
Initializes a new fun project
Options:
-o, --output-dir [outputDir] where to output the initialized app into (default: .)
-n, --name [name] name of your project to be generated as a folder (default: fun-app)
--no-input [noInput] disable prompting and accept default values defined template config
-V, --var [vars] template variable
-h, --help output usage information
Examples:
$ fun init
$ fun init helloworld-nodejs8
$ fun init foo/bar
$ fun init gh:foo/bar
$ fun init gl:foo/bar
$ fun init bb:foo/bar
$ fun init github:foo/bar
$ fun init gitlab:foo/bar
$ fun init bitbucket:foo/bar
$ fun init git+ssh://git@github.com/foo/bar.git
$ fun init hg+ssh://hg@bitbucket.org/bar/foo
$ fun init git@github.com:foo/bar.git
$ fun init https://github.com/foo/bar.git
$ fun init /path/foo/bar
$ fun init -n fun-app -V foo=bar /path/foo/bar
选项说明
选项 | 默认值 | 描述 |
---|---|---|
-o, --output-dir | . |
初始化的应用程序输出目录(可选) |
-n, --name | fun-app |
要作为文件夹生成的项目名称(可选) |
--no-input | false |
禁用提示并接受默认值来定义的模板配置(可选) |
-V, --var | 空 | 模板变量(可选) |
-h, --help | 无 | 打印使用说明(可选) |
示例:
-
-o,--output-dir
选项
输出初始化应用程序的输出目录。默认是fun init
命令执行的当前路径。
$ fun init -o /path/foo/bar
-
-n,--name
选项
要作为文件夹生成的项目名称。默认值是fun-app
。
$ fun init -n xxx
-
-V,--var
选项
模板变量。模板可能会有很多模板变量,模板变量一般都会设置默认值,如果某些模板变量希望用户填写自己的值,在初始化模板的过程中,会提示用户输入自定义的值,用户可以输入自定义的值,也可以直接回车使用默认值,还可以直接通过-V,--var
选项设置模板变量值。通过该选项设置的模板变量,就不会再提示用户输入了。
选项格式要求:以等号分隔的键值对,键只能包含字母、数字和 _;值可以是任意字符。
$ fun init -V foo=bar -V bar=baz
-
--no-input
选项
禁用提示并接受默认值来定义的模板配置。假如不想提示输入模板变量,可以通过该选项,跳过提示输入,直接使用模板变量的默认值。
$ fun init --no-input
模板位置(Location)
支持如下方式指定模板:
-
官方模板。包含离线和在线模板:
- 离线模板。内嵌在 fun 工具中
- 在线模板。通过模板名称来指定模板位置,fun 内部会将其转换为 github 地址
- Git / Mercurial 仓库模板。支持缩写方式,具体请看下文
- 本地文件系统路径模板
如果您需要自定义自己的模板,只需要将您的模板提交到 github 上,然后在执行 fun init
指定您自己的 github 地址。具体请参考:Fun Init 自定义模板
示例:
- 选择官方模板
输入fun init
命令,则提示用户选择模板,支持模糊查询。在不清楚自己需要什么样的模板时,简单的使用不带任何参数的fun init
会提示用户官方模板有哪些,用户更具提示选择自己的需要模板。
$ fun init
? Select a tempalte to init (Use arrow keys or type to search)
helloworld-nodejs8
helloworld-nodejs6
helloworld-python3
helloworld-python2.7
helloworld-java8
helloworld-php7.2
- 指定官方模板
helloworld-nodejs8 是内嵌在 fun 工具的官方模板,所以支持离线,该模板最终生成一个运行时为 nodejs8 的 helloworld 函数计算应用。对于一些常用的模板,我们会把它放到官方模板列表中,用户只需要指定简短模板名称即可,不需要指定完整的模板仓库地址。
$ fun init helloworld-nodejs8
- 指定 Git / Mercurial 仓库模板
支持 Git / Mercurial 仓库模板,支持多种前缀的缩写形式,对于 github,甚至可以进一步缩写为user/repo
。
$ fun init foo/bar
$ fun init gh:foo/bar
$ fun init gl:foo/bar
$ fun init bb:foo/bar
$ fun init github:foo/bar
$ fun init gitlab:foo/bar
$ fun init bitbucket:foo/bar
$ fun init git+ssh://git@github.com/foo/bar.git
$ fun init hg+ssh://hg@bitbucket.org/bar/foo
$ fun init git@github.com:foo/bar.git
$ fun init https://github.com/foo/bar.git
说明:需要提前安装好相应的版本控制工具。
- 指定本地文件系统路径模板
我们可以将在线模板克隆放到本地文件系统,通过指定模板路径,实现离线初始化。
$ fun init /path/foo/bar
小结
通过 Fun Init 工具可以快速体验和开发函数计算的应用,避免重复机械劳动,你也可以将自己觉得有价值的函数计算应用制作成模板项目,方便自己同时也可以方便别人。