Serverless Devs工具使用FAQ

本文介绍使用Serverless Devs工具过程中可能遇到的问题,并提供对应的解决方案。

如何配置s.yaml文件?

关于YAML规范的详细信息,请参见YAML规范

使用Serverless Devs偶然出现异常,但未提示错误信息怎么办?

您可以按照以下步骤排查问题。

  1. 执行命令npm install @serverless-devs/s -g升级工具。

  2. 执行命令s clean --all删除冗余文件。

  3. 执行命令rm -rf .s移除同级目录下的.s文件。

  4. 执行s -v查看工具版本。

    如果执行命令后无任何响应,可能是本地Node.js环境异常,需要重新安装Node.js 12或更高版本。

如果问题还未解决,请加入钉钉用户群(钉钉群号11721331),并提供日志文件{s-home}/logs/{TraceId}.logs.yaml文件,联系函数计算开发工程师帮您解决。

关于{s-home}{TraceId}的获取方式,请参见下图。checks-s-home

部署代码时,希望以本地配置为准如何处理?

您可以在执行命令s deploy时,选择use-local或执行命令时指定参数,即s deploy -y --use-local

Serverless Devs工具支持多Region部署吗?

支持。具体操作,请参见Serverless Devs工具多Region部署

如何本地调试函数?

  • 如果您的Runtime不是Custom Runtime,而是函数计算内置语言,例如Node.js、Python等,推荐使用Serverless Devs工具的本地调用方式进行调试。具体操作,请参见Local命令

  • 如果您的Runtime是Custom Runtime,可以按照正常的开发习惯发起一个Server代码调试流程。

    说明

    针对Custom Runtime,s local invoke命令能正常发起函数本地执行,但不支持断点调试。

怎样使用.fcignore文件?

部署较大的代码包时,将项目中的依赖上传到NAS文件系统后,可以通过.fcignore忽略上传到NAS的文件,然后将项目部署到线上。更多信息,请参见fcignore使用方法

s.yaml文件中定义了多个函数时如何指定部署和调用某个函数?

s.yaml文件中,可能存在一个服务对应多个函数的情况,如果只想部署或调用其中某一个函数,可以在执行命令s deploys local starts local invoke时,指定函数名称。例如,下图s.yaml文件示例中,执行s helloworld deploy只部署helloworld函数。

muti-functions

执行s local或者s build命令时出现“connect ENOENT /var/run/docker.sock”错误,如何处理?

报错信息

报错信息类似如下内容:

Project xxx failed to execute:

ERROR:

connect ENOENT /var/run/docker.sock

解决方案

如果本地执行Docker命令是正常的,但是通过Serverless Devs执行s local或者s build命令异常,可以通过以下步骤解决该问题。

  1. 查看/var/run/docker.sock文件是否存在。

    1. 运行以下命令查看文件是否存在。如果存在该文件,则跳过以下步骤。如果不存在该文件,则执行以下步骤。

      ll /var/run/docker.sock
    2. 设置软链到/var/run目录。

      ll ~/.docker/run/docker.sock
      ln -s ~/.docker/run/docker.sock  /var/run/docker.sock
  2. 查看Docker客户端是否启动。

    通过Serverless Devs执行s local或者s build命令,需要先启动Docker客户端,请确保已启动Docker客户端。

在应用中心或者Serverless Devs工具中如何使用Node.js 18?

在函数计算的Web场景下,用户大多使用的运行时为自定义运行时,但是自定义运行时的内置Node、Python、PHP的版本可能无法满足用户的需求。例如,您需要使用Node.js 18的版本,使用方法如下:

建议您在控制台先创建一个自定义运行时函数,运行环境选择Node.js 18,然后在函数详情页面中导出函数的配置。YAML中的layers用来挂载Node.js 18公共层,PATH变量可以将Node.js 18设置为默认版本。

service:
	internetAccess: true
  name: test-service
function:
	handler: index.handler
  timeout: 60
  diskSize: 512
  caPort: 3000
  layers:
  	- acs:fc:cn-hangzhou:official:layers/Nodejs18/versions/1
  customRuntimeConfig:
  	command:
    	- node
      - server.js
  runtime: custom.debian10
  environmentVariables:
  	PATH: /opt/nodejs18/bin:/usr/local/bin/...
    NODE_PATH: /opt/nodejs/node_modules
  ...

如果您在使用应用中心的功能,由于目前构建的过程中无法使层的配置生效。您需要通过export PATH的方式使构建过程中使用Node.js 18来进行npm installnpm run build。具体请参见升级流水线构建环境运行时

通过Serverless Devs工具部署的应用怎么无法访问了?域名被删除了?

****.devsapp.net域名是CNCF Sandbox项目Serverless Devs社区所提供,仅供学习和测试使用,不可用于任何生产使用。社区会对该域名进行不定期地拨测,并在域名下发30天后进行回收,建议您绑定自定义域名以获得更好的使用体验。