云函数 SCF 支持开发者将容器镜像部署为函数的功能。本文介绍镜像部署函数的背景信息、工作原理、函数开发、函数日志打印、冷启动优化、计费说明及使用限制。
云函数 SCF 从设计开始即是基于云原生架构的 FaaS 产品。在 Runtime 层支持容器镜像部署为函数后,产品形态整体向容器化生态迈进。一方面,解决函数运行时的环境依赖问题,给予用户更大的自由发挥空间。另一方面,产品形态层面的呈现使得用户无需受困于 Kubernetes 集群管理、安全维护、故障诊断等技术门槛,将弹性伸缩、可用性等需求下沉至计算平台,进一步释放云计算能力。
您在开发函数具体的逻辑之前,首先需要确认函数类型,云函数提供事件函数和 Web 函数两种类型。
云函数在函数实例初始化阶段,获得镜像仓库的临时用户名和密码作为访问凭证来拉取镜像。镜像拉取成功后,根据指定您所定义的启动命令 Command
、参数 Args
及端口(固定为9000)启动您定义的 HTTP Server。最后,HTTP Server 将接收云函数的所有入口请求,包括来自您的事件函数调用及 Web 函数调用。
函数工作原理如下图所示:
基于镜像部署的函数,需要搭建 HTTP Server,配置要求如下:
0.0.0.0:9000
或 *:9000
。如未完成,则可能会导致健康检查超时,出现以下错误:
The request timed out in 30000ms.Please confirm your http server have enabled listening on port 9000.
event:POST 请求体(HTTP Body)
请求体包含事件数据,结构请参见 触发器事件消息结构汇总。
context:请求头(HTTP Header)
详细列表如下表所示:说明- 事件函数和 Web 函数均包含 Common Headers。
- 公共请求头由云函数生成,主要包含权限、函数基本信息等。
Header 字段 | 描述 |
---|---|
X-Scf-Request-Id | 当前请求ID |
X-Scf-Memory | 函数实例运行时可使用的最大内存 |
X-Scf-Timeout | 函数执行的超时时间 |
X-Scf-Version | 函数版本 |
X-Scf-Name | 函数名称 |
X-Scf-Namespace | 函数所在命名空间 |
X-Scf-Region | 函数所在地域 |
X-Scf-Appid | 函数所有者的Appid |
X-Scf-Uin | 函数所有者的Uin |
X-Scf-Session-Token | 临时 SESSION TOKEN |
X-Scf-Secret-Id | 临时 SECRET ID |
X-Scf-Secret-Key | 临时 SECRET KEY |
X-Scf-Trigger-Src | Timer(使用定时触发器时) |
自定义镜像场景相较于基于代码包部署,在容器内置的环境变量做了变更,您可以根据实际需要进行引用。
环境变量 Key | 具体值或值来源 |
---|---|
TENCENTCLOUD_RUNENV | SCF |
USER_CODE_ROOT | /var/user/ |
USER | qcloud |
SCF_FUNCTIONNAME | 函数名 |
SCF_FUNCTIONVERSION | 函数版本 |
TENCENTCLOUD_REGION | 区域 |
TENCENTCLOUD_APPID | 账号 APPID |
TENCENTCLOUD_UIN | 账号 UIN |
/event-invoke
来接受函数调用请求。云函数 SCF 将以无侵入的方式,收集在容器内所产生的 stdout、stderr 等标准输出日志,并上报至日志模块。您在调用函数后,可以通过控制台查看日志聚合展示效果。
镜像由于增加了基础环境、系统依赖等文件层,相较于基于代码包部署的完全内置,存在额外的文件下载和镜像解压的时间。为了进一步降低冷启动时间,推荐您使用以下策略。
通过开启镜像加速开关,函数平台会通过内部加速机制,预先将镜像就近缓存,在调用函数实例时,直接从缓存进行加载和解压,省去了镜像文件下载的时间。可获得平均 5 倍的启动速度提升。
该功能目前属于公测免费期,每个账户在单个地域下限制为最多开启5个函数加速。
镜像部署搭配预置并发功能,预先启动函数实例,达到最优降低冷启动的体验,详情请参见 预置并发。
使用镜像部署函数的计费项与使用代码包部署的计费项完全一致。计费详情请参见 计费方式。
目前仅支持镜像(解压前)小于1Gi,如有特殊需要,可 提交工单 申请。建议您根据镜像的大小来选择适合的函数实例执行内存。
镜像大小(X) | 执行内存(Y) |
---|---|
X < 256MB | 256MB < Y < 512MB |
256MB < X <512MB | 512MB < Y < 1Gi |
512MB < X < 1Gi | Y>1Gi |
/tmp
可读可写,建议输出文件时选择 /tmp
。云函数当前是基于 X86 架构运行的,所以暂不支持运行在 ARM 平台上构建的镜像。ARM 的平台典型如 Apple Mac 搭载 M1 芯片的 PC 端。
满足其中之一即可:
本页内容是否解决了您的问题?