Serverless Devs是一个开源开放的Serverless开发者工具,通过该工具您可以快速地开发、创建、测试和部署项目,实现项目的全生命周期管理。本文以部署运行环境为Node.js 14的函数为例,介绍如何使用Serverless Devs下载对应的函数计算应用模板,然后快速开发部署函数应用。
背景信息
本文介绍两种方式初始化项目。当您初次使用Serverless Devs时,建议您使用方式一体验Serverless Devs。如果您想了解关于Serverless Devs的更多信息,例如本地调试、远程调用、删除资源等操作,建议您使用方式二体验。
前提条件
方式一:使用s命令管理资源
执行以下命令,初始化项目。
sudo s
请根据输出的交互提示,初始化项目。输出示例:
No Serverless-Devs project is currently detected. Do you want to create a new project? Yes//在项目文件内未检测到Serverless-Devs项目。选择是否创建一个项目。
Serverless Awesome: https://github.com/Serverless-Devs/Serverless-Devs/blob/master/docs/zh/awesome.md
Hello Serverless for Cloud Vendors Alibaba Cloud Serverless//选择目标云厂商,本示例以阿里云为例。
Hello, serverlesser. Which template do you like? Quick start [Deploy a Hello World function to FaaS]//选择您需要创建的模板。本示例以快速部署运行环境为Node.js 14的事件函数为例。
Which template do you like? [Event] Node.js 14
Create application command: [s init devsapp/start-fc-event-nodejs14]
Please input your project name (init dir) start-fc-event-nodejs14//Serverless Devs默认为您生成一个项目名称,您也可以自定义该名称。
file decompression completed
____ _ _ ___ _ _ _ _____ ____
/ _ \/ \ / \\ \/// \ /\/ \ /| / // _\
| / \|| | | | \ / | | ||| |\ || | __\| /
| |-||| |_/\| | / / | \_/|| | \|| | | | \__
\_/ \|\____/\_//_/ \____/\_/ \| \_/ \____/
please select credential alias default//选择您在配置Serverless Devs时设置的别名。
Welcome to the Aliyun FC start application
This application requires to open these services:
FC : https://fc.console.aliyun.com/
* 项目初始化完成,您可以直接进入项目目录下,并使用s deploy进行项目部署。
Thanks for using Serverless-Devs
You could [cd /test/start-fc-event-nodejs14] and enjoy your serverless journey!
If you need help for this example, you can use [s -h] after you enter folder.
Document Star:https://github.com/Serverless-Devs/Serverless-Devs
Do you want to deploy the project immediately? Yes//选择是否部署项目,本示例以选择部署项目为例。
......
helloworld:
region: cn-hangzhou
service:
name: hello-world-service
function:
name: event-nodejs14
runtime: nodejs14
handler: index.handler
memorySize: 128
timeout: 60
方式二:使用s init命令管理资源
- 初始化项目。在目标文件内执行以下命令,初始化项目:
sudo s init devsapp/start-fc-http-nodejs14
说明 本示例以部署一个运行环境为Node.js 14的HTTP函数为例,介绍如何快速初始化一个项目。当需要部署其他运行环境的示例时,您可以将上述模板start-fc-http-nodejs14
名称中http
替换为其他类型的触发方式例如event
,也可以将nodejs14
替换为其他类型的运行环境。执行输出:Serverless Awesome: https://github.com/Serverless-Devs/Serverless-Devs/blob/master/docs/zh/awesome.md Please input your project name (init dir) start-fc-http-nodejs14//Serverless Devs会默认生成一个项目名称,您也可以自定义该名称。 file decompression completed ____ _ _ ___ _ _ _ _____ ____ / _ \/ \ / \\ \/// \ /\/ \ /| / // _\ | / \|| | | | \ / | | ||| |\ || | __\| / | |-||| |_/\| | / / | \_/|| | \|| | | | \__ \_/ \|\____/\_//_/ \____/\_/ \| \_/ \____/ please select credential alias default//选择您在配置Serverless Devs时设置的别名。 Welcome to the Aliyun FC start application This application requires to open these services: FC : https://fc.console.aliyun.com/ * 项目初始化完成,您可以直接进入项目目录下,并使用s deploy进行项目部署。 Thanks for using Serverless-Devs You could [cd /test/start-fc-http-nodejs14] and enjoy your serverless journey! If you need help for this example, you can use [s -h] after you enter folder. Document Star:https://github.com/Serverless-Devs/Serverless-Devs Do you want to deploy the project immediately? No//选择部署项目。
当成功初始化项目后,会在当前目录中生成一个start-fc-http-nodejs14文件夹,该文件夹内包含以下文件:- s.yaml:函数计算资源,该资源是以YAML规范定义的。关于YAML规范的详细信息,请参见YAML规范。
- s_en.yaml:同s.yaml。系统默认使用s.yaml文件,如需使用s_en.yaml文件,请在命令中显式指定。例如,部署应用时,命令中增加参数
-t
,即s deploy -t s_en.yaml -y
。 - code:code文件夹内包含index.js文件,可在该文件内编辑函数代码逻辑。
- readme.md:依赖清单文件,该文件内定义了项目所需的各个模块和项目的配置信息。
- 执行以下命令,进入项目目录内:
cd start-fc-http-nodejs14
- 可选:构建应用。在项目目录内执行以下命令,构建应用:
sudo s build
执行成功该步骤后,会在当前目录中生成一个.s文件,存放输出的构建产物,该文件可用于本地调试和部署。 - 可选:本地调试应用。当您在本地完成应用的开发构建后,可能需要在本地调试验证功能是否正常。您可以按需选择命令调试函数:
- HTTP函数
执行输出:sudo s local start
[2021-12-16 07:17:05] [INFO] [FC-LOCAL-INVOKE] - Using trigger for start: name: httpTrigger type: http config: authType: anonymous methods: - GET [2021-12-16 07:17:05] [INFO] [FC-LOCAL-INVOKE] - HttpTrigger httpTrigger of hello-world-service/http-trigger-nodejs14 was registered url: http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/ methods: GET authType: anonymous Tips:you can also use these commands to run/debug custom domain resources: Start with customDomain: * s local start auto Debug with customDomain: * s local start -d 3000 auto Tips for next step ====================== * Deploy Resources: s deploy helloworld: status: succeed function compute app listening on port 7013!
- 事件函数
sudo s local invoke
当您执行调试命令后,由于函数类型不同返回结果也会不同:- HTTP函数当您的函数是HTTP函数时,执行完调试命令后,将在执行输出中返回一个URL地址,此时调试流程阻塞在这里,您可以使用以下方式触发函数执行:
- 使用cURL工具触发函数执行
curl http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
- 使用浏览器访问HTTP函数
http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
- 使用cURL工具触发函数执行
- 事件函数
如果您的函数是事件函数,执行完调试命令后,将立即返回调试结果。
- HTTP函数
- 部署应用。执行以下命令,将应用部署至函数计算:
执行输出:sudo s deploy -y
Checking Service, Function, Triggers (0.82s) Creating Service, Function, Triggers (0.6s) Creating custom domain (0.31s) Tips for next step ====================== * Display information of the deployed resource: s info * Display metrics: s metrics * Display logs: s logs * Invoke remote function: s invoke * Remove Service: s remove service * Remove Function: s remove function * Remove Trigger: s remove trigger * Remove CustomDomain: s remove domain helloworld: region: cn-hangzhou service: name: hello-world-service function: name: http-trigger-nodejs14 runtime: nodejs14 handler: index.handler memorySize: 128 timeout: 60 url: custom_domain: - domain: http://http-trigger-nodejs14.hello-world-service.188077086902****.cn-hangzhou.fc.devsapp.net triggers: - type: http name: httpTrigger
执行成功后,该命令会将应用部署至函数计算。 - 可选:远程调试应用。执行以下命令,远程调试应用:
执行输出:sudo s invoke -e '{"body": "","method":"GET","headers":{"header_1":"v1"},"queries":{"key":"value"},"path":"/"}'
Request url: https://188077086902****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/ ========= FC invoke Logs begin ========= FC Invoke Start RequestId: 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c load code for handler:index.handler 2022-03-04T08:39:14.770Z 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c [verbose] hello world FC Invoke End RequestId: 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c Duration: 66.23 ms, Billed Duration: 67 ms, Memory Size: 128 MB, Max Memory Used: 42.48 MB ========= FC invoke Logs end ========= FC Invoke Result[Code: 200]: { path: '//', queries: { key: 'value' }, headers: { accept: 'application/json', authorization: 'FC LTAI4G4cwJkK4Rza6xd9****:KZsoanKle4SoRO8EjyOjY3duLlVlR1mp78hjV9WG****', date: 'Fri, 04 Mar 2022 08:39:14 GMT', header_1: 'v1', host: '188077086902****.cn-hangzhou.fc.aliyuncs.com', 'user-agent': 'Node.js(v14.17.4) OS(linux/x64) SDK(@alicloud/fc2@v2.5.0)', 'x-forwarded-proto': 'http' }, method: 'GET', requestURI: '/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14//?key=value', clientIP: '47.97.XX.XX', body: '' } End of method: invoke
由于本示例部署的函数是HTTP函数,所以在成功执行远程调试命令后,执行输出会返回一个URL,您可以使用cURL工具触发执行线上的函数:curl https://188077086902****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
- 可选:删除应用。执行以下命令删除应用:
sudo s remove service
执行输出:Need to delete the resource in the cn-hangzhou area, the operation service is hello-world-service: ...... Delete trigger hello-world-service/http-trigger-nodejs14/httpTrigger success. Delete function hello-world-service/http-trigger-nodejs14 success. Delete service hello-world-service success. [2022-03-04 08:40:26] [INFO] [FC] - Getting list on-demand: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service [2022-03-04 08:40:26] [INFO] [FC] - Getting list provision: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service [2022-03-04 08:40:26] [INFO] [FC] - Getting listAliases: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service [2022-03-04 08:40:26] [INFO] [FC] - Getting list on-demand: _FC_NAS_hello-world-service [2022-03-04 08:40:26] [INFO] [FC] - Getting list provision: _FC_NAS_hello-world-service [2022-03-04 08:40:26] [INFO] [FC] - Getting listAliases: _FC_NAS_hello-world-service End of method: remove
当成功执行该命令时,表示应用已被删除。