最佳实践

通用类

最近更新时间:2020-06-03 18:04:07

本地运行正常,线上运行提示找不到某依赖怎么处理?

通常是第三方依赖未打包上传至线上环境导致,您需要将函数依赖的第三方库放至函数目录下,跟随函数代码一起打包上传。

SCF 部署到 VPC 后,如何配置外网访问?

VPC 访问外网的方法有几种,可以参考 NAT 网关文档介绍

SCF 访问外网时 IP 是随机的还是固定的?

默认是随机的,开发者可以设置固定公网 IP。详情请参见 固定公网出口 IP

SCF 环境内的时区是什么?如何处理时区影响?

云函数的运行环境内保持的是 UTC 时间,即0时区时间,和北京时间有8小时的时间差。
可以通过语言的时间处理相关库或代码包,识别 UTC 时间并转换为+8区北京时间,或通过设置环境变量 TZ=Asia/Shanghai 指定时区。

环境内有可写空间吗?

有。云函数在执行过程中,都拥有一块500MB的临时磁盘空间 /tmp,用户可以在执行代码时对该空间进行一些读写操作,也可以创建子目录,但这部分数据在函数执行完成后不会保留。

说明:

  • 实例间的临时空间互相隔离,不共享,即每个实例均有独立的临时空间。
  • 运行环境内除 /tmp 目录下,其他均限制为只读。

SCF 运行返回 504 怎么办?

  1. 检查函数及网关配置的超时时间,并尝试增加一定的网关超时时间。
  2. 可参考 API 网关日志管理 配置日志,通过分析日志定位具体原因。

Redis 数据库只有内网,使用 SCF 怎么进行连接?

如需访问 VPC 网络中的资源,请参考 私有网络通信 进行配置。

为什么返回的数据格式多了引号?

API 网关会默认将 SCF 返回结果当做 JSON 格式,您可以参考 集成响应与透传响应,在函数配置里勾选集成响应以解决问题。请注意,如果开启了集成响应,则需按照规范返回数据结构 。

主账号是否可以限制子账号只对部分函数进行操作?

可以,详情请参见 创建子用户并授予部分函数的操作权限

函数日志如何投递到 COS?

可参考 SCF 日志与 CLS 打通教程 ,将日志转到日志服务 CLS ,并在日志服务 CLS 配置日志 投递到 COS

应用程序如何直接触发函数?

可以通过调用 SCF 的 Invoke API 直接触发函数。该函数的所有者或有调用该函数 Invoke API 权限的帐号能直接调用。

改动代码或配置时,SCF 还可以使用吗?

可以。更新函数时会有短暂的窗口期,通常不到1分钟,在这期间请求将由旧函数代码或新函数代码实现。

单次运行的函数数量有没有限制?

SCF 可以支持大量函数实例并行。但是,我们有一项默认的安全阈值:每个函数最多300个并发执行量,此阈值可以通过 提交工单 进行提升。

函数在处理事件时发生故障会怎样?

如遇故障,进行同步调用的函数会返回异常信息,异步调用的函数将在后台自动重试3次。

可写空间写满后报错如何处理?

如果持续写入 /tmp 临时目录,并且由于调用频繁导致实例持续被使用,可能存在临时目录被写满,导致无法写入的问题。
请在代码中自行检查临时目录的写情况,并使用代码删除不再使用的临时文件以释放空间。

能否在我的函数代码中使用线程和进程?

能。用户可使用正常的语言和操作系统功能,如创建额外的线程和进程。分配至函数的资源,包括内存、执行时间、磁盘和网络,都通过其使用的线程/进程进行共享。

能否在我的函数代码中发起网络连接?

能。用户可使用正常的语言和操作系统功能,如发起 tcp、udp 的网络连接,能通过使用语言相关的库,连接数据库、访问 API 等操作。

有哪些限制适用于函数代码?

我们尽量不对正常的语言和操作系统活动施加限制,但有些活动仍被禁用。例如,入站网络连接将被阻止。

SCF 后台部署了 Java 的 jar 包,前台小程序如何调用无服务器部署的代码?

可以使用 API 网关。API 网关后端配置成云函数,然后调用网关 API 来触发云函数 。详细教程请参考 如何创建触发器API 网关触发器

哪些事件可以触发 SCF 函数?

当前支持:手动触发(API)、定时触发、COS 触发、CMQ 触发、API网关触发等触发方式,后续更多触发方式正在持续添加中。

SCF 支持哪些语言?

目前支持 Python 2.7 & 3.6、Node.js 6.10 & 8.9 & 10.15 & 12.16、Java 8、PHP 5 & 7 及 Golang。后续更多开发语言支持正在持续添加中。

能否访问 SCF 运行所在的基础设施?

不能,SCF 会代您管理计算基础设施。

SCF 如何隔离代码?

每个函数都运行在自己独有的环境中,拥有自己的资源和文件系统。SCF 使用与 CVM 相同的技术在基础设施和执行级别上提供安全性和隔离。

SCF 是否可以和 CVM,TencentDB 等云上其他产品互访?

可以,您在创建云函数或修改云函数配置时,选择 VPC 配置,将云函数和 CVM,TencentDB 等部署到同一 VPC 即可。

SCF 是否会重复使用函数实例?

为了提高性能,SCF 会在一定时间内保留您的函数实例,将其再用于服务后续请求。但您的代码不应假设此操作总是发生。

为何要保持 SCF 函数无状态?

保持函数的无状态性可使函数按需要尽可能多地启动多个实例,从而满足请求的速率。

如何进行故障排除?

SCF 集成了日志功能,每次调用都会将该次调用的日志输出到控制台日志窗口中,日志记录了该函数每次使用时所消耗的资源、代码中的 log 及平台调用信息等,您可以轻松将故障排除相关的 log 语句插入到代码中。

通过上传 zip 包创建函数后,提示“函数服务创建失败,请重试”?

通常是函数的执行方法无法在 zip 包中找到对应的执行文件或函数入口,或压缩时包括了外层文件夹。执行方法格式为 a.b,其中:a 是 py 文件的名称,b 是代码中的方法名。
如果用户上传的 zip 包在解压后的根目录下找不到名为 a.py 的文件,则会提示“函数代码无法显示,代码 zip 包中找不到执行方法指定的文件名”。
例如:文件结构如下

--RootFolder
----SecondFolder
------a.py
------thirdfolder
--------sth.json

压缩代码 zip 包时,如果压缩的是 SecondFolder,则会出现上述错误,需要选择 a.pythirdfoler 进行压缩。

出现 timeout 时如何处理?

请先将超时时间设置为一个较大值(不超过300均可)再测试一遍,如果仍然超时,请检查您的代码 log 中是否存在过大的输入数据和计算量、无法跳出的循环、长时间的 sleep 等。

如何扩容?

用户不必关心函数扩缩容问题,SCF 平台会代您自动扩展。每当接收函数请求时,SCF 会快速定位空闲容量并运行您的代码。由于您的代码是无状态的,可以在需要时尽可能多地启动实例,而不会发生冗长的部署和配置延迟。

如何分配函数计算资源?

用户可以选择函数分配的内存量,CPU 和其他资源也会相应的按比例进行分配。例如,选择256MB的内存时,分配至函数的 CPU 约是分配128MB内存的两倍。

能否使用本地库?

可以。用户可以在函数代码中包含自己的代码库,并以 zip 包的形式上传至平台。

如何处理函数调用报错 “Resource limit exceed for function”?

通常是函数并发触发了配额上限,可以通过公式“函数并发 = qps(每秒的请求数量)x 函数执行时间(秒)”来计算所需的函数并发数量。
例如:qps = 100,函数执行时间 = 100ms,则实际需要的函数并发= 100 x 0.1 = 10。如果并发超了上限,您可以通过 提交工单 来提升限制。

目录