函数运行报错 “Cannot find module”、“No module named”、找不到依赖怎么处理?如何进行依赖安装?
该问题通常是由于代码执行的依赖文件没有上传到云上环境导致的,可按照如下方法进行检查:
1. 请核对代码中引用的依赖文件路径是否准确,如果采用相对路径,依赖文件需要与函数代码文件在同一个根目录下,并与函数代码一起打包上传至云端;如果采用绝对路径,请确认该绝对路径是 SCF 的可访问路径,且路径下存在指定的依赖文件。
2. 如果提前将依赖文件上传至层中,请核对层版本与函数运行版本绑定关系是否符合预期。
3. 如果使用了在线依赖安装 功能,请检查全部依赖是否成功安装。 SCF 环境内的时区是什么?如何处理时区影响?
云函数的运行环境内保持的是 UTC 时间,即0时区时间,和北京时间有8小时的时间差。
可以通过语言的时间处理相关库或代码包,识别 UTC 时间并转换为+8区北京时间,或通过设置环境变量 TZ=Asia/Shanghai
指定时区。
写文件报错无权限?环境内有可写空间吗?
云函数在执行过程中,都拥有一块500MB的临时磁盘空间 /tmp
,用户可以在执行代码时对该空间进行一些读写操作,也可以创建子目录,但这部分数据在函数执行完成后不会保留。
说明:
实例间的临时空间互相隔离,不共享,即每个实例均有独立的临时空间。
运行环境内除 /tmp
目录下,其他均限制为只读。
可写空间写满后报错如何处理?
如果持续写入 /tmp
临时目录,并且由于调用频繁导致实例持续被使用,可能存在临时目录被写满,导致无法写入的问题。
请在代码中自行检查临时目录的写情况,并使用代码删除不再使用的临时文件以释放空间。
为什么返回的数据格式多了引号?
API 网关会默认将 SCF 返回结果当做 JSON 格式,详情请参见 集成响应与透传响应,在函数配置里勾选集成响应以解决问题。请注意,如果开启了集成响应,则需按照规范返回数据结构 。 主账号是否可以限制子账号只对部分函数进行操作?
函数日志如何投递到 COS?
应用程序如何直接触发函数?
可以通过调用 SCF 的 Invoke API 直接触发函数。该函数的所有者或有调用该函数 Invoke API 权限的账号能直接调用。
改动代码或配置时,SCF 还可以使用吗?
可以。更新函数时会有短暂的窗口期,通常不到1分钟,在这期间请求将由旧函数代码或新函数代码实现。
单一函数的并发实例个数有没有限制?
SCF 可以支持大量函数实例并行。每个地域下函数总并发配额可参考 配额限制说明,可参考 并发管理 进行函数级并发管理。 函数在处理事件时发生故障会怎样?
如遇故障,进行同步调用的函数会返回异常信息,异步调用的函数将自动重试,重试策略可参考 错误类型与重试策略。 能否在我的函数代码中使用线程和进程?
能。用户可使用正常的语言和操作系统功能,如创建额外的线程和进程。分配至函数的资源,包括内存、执行时间、磁盘和网络,都通过其使用的线程/进程进行共享。
有哪些限制适用于函数代码?
我们尽量不对正常的语言和操作系统活动施加限制,但有些活动仍被禁用。例如,入站网络连接将被阻止。
SCF 后台部署了 Java 的 jar 包,前台小程序如何调用无服务器部署的代码?
哪些事件可以触发 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 及 Custom Runtime 自定义语言。后续更多开发语言支持正在持续添加中。
能否访问 SCF 运行所在的基础设施?
不能,SCF 会代您管理计算基础设施。
SCF 如何隔离代码?
每个函数都运行在自己独有的环境中,拥有自己的资源和文件系统。SCF 使用与 CVM 相同的技术在基础设施和执行级别上提供安全性和隔离。
SCF 是否可以和 CVM,TencentDB 等云上其他产品互访?
可以,您在创建云函数或修改云函数配置时,选择 VPC 配置,将云函数和 CVM,TencentDB 等部署到同一 VPC 即可。
SCF 是否会重复使用函数实例?
为了提高性能,SCF 会在一定时间内保留您的函数实例,将其再用于服务后续请求。但您的代码不应假设此操作总是发生。
为何要保持 SCF 函数无状态?
保持函数的无状态性可使函数按需要尽可能多地启动多个实例,从而满足请求的速率。
如何进行故障排除?
SCF 集成了日志功能,每次调用都会将该次调用的日志输出到控制台日志窗口中,日志记录了该函数每次使用时所消耗的资源、代码中的 log 及平台调用信息等,您可以轻松将故障排除相关的 log 语句插入到代码中。
通过上传 zip 包创建函数后,提示“函数服务创建失败,请重试”或“未找到函数执行入口文件,请确认代码包入口文件名和 handler 设置是否对应或代码压缩包是否正常”?
通常是压缩时包含了外层文件夹,zip 解压后无法找到入口函数,即函数的执行方法无法在 zip 包中找到对应的执行文件或函数入口。
执行方法格式为 a.b
,其中:a 是 py 文件的名称,b 是代码中的方法名。
如果用户上传的 zip 包在解压后的根目录下找不到名为 a.py
的文件,则会提示“函数代码无法显示,代码 zip 包中找不到执行方法指定的文件名”。
例如:文件结构如下:
--RootFolder
----SecondFolder
------a.py
------thirdfolder
--------sth.json
压缩代码 zip 包时,如果压缩的是 SecondFolder,则会出现上述错误,需要选择 a.py
和 thirdfoler
进行压缩。
提示 timeout 时如何处理?
请先将超时时间设置为一个较大值(不超过900均可)再测试一遍,如果仍然超时,请检查您的代码 log 中是否存在过大的输入数据和计算量、无法跳出的循环、长时间的 sleep 等。
如何扩容?
用户不必关心函数扩缩容问题,SCF 平台会代您自动扩展。每当接收函数请求时,SCF 会快速定位空闲容量并运行您的代码。由于您的代码是无状态的,可以在需要时尽可能多地启动实例,而不会发生冗长的部署和配置延迟。
如何分配函数计算资源?
用户可以选择函数分配的内存量,CPU 和其他资源也会相应的按比例进行分配。例如,选择256MB的内存时,分配至函数的 CPU 约是分配128MB内存的两倍。
能否使用本地库?
可以。用户可以在函数代码中包含自己的代码库,并以 zip 包的形式上传至平台。
如何处理函数调用报错 “Resource limit exceed for function”?
通常是函数并发触发了配额上限,可以通过公式“函数并发 = qps(每秒的请求数量)x 函数执行时间(秒)”来计算所需的函数并发数量。
例如,qps = 100,函数执行时间 = 100ms,则实际需要的函数并发= 100 x 0.1 = 10。如果并发超了上限,您可以通过 提交工单 来提升限制。 如何处理创建函数失败 “Account Arrears, Operation not Allowed”?
账号欠费,请充值后重试。
如何处理创建函数失败 “SCF_QcsRole 角色不存在,请访问 https://console.tencentcloud.com/scf 创建角色”?
创建函数依赖 SCF_QcsRole,请使用主账号访问 云函数控制台 按照引导完成授权。 请在访问管理 角色 页面中单击 SCF_QcsRole
并确认该角色的权限策略中是否已经关联预设策略 QcloudAccessForScfRole
,如未关联,请单击添加策略并关联 QcloudAccessForScfRole
后重试。 使用模板创建函数时,DemoId
如何获取?
请在云函数控制台创建函数流程中选择模板创建,选择需要使用的模板,单击模板右上角的查看详情,在模板详情页单击点击下载模板函数。模板代码会以 DemoId
命名下载到本地。
注意:
同一个函数模板不同地域下的 DemoId
不同,在获取 DemoId
时,请关注地域选择。
本页内容是否解决了您的问题?