有奖捉虫:行业应用 & 管理与支持文档专题 HOT
云函数 SCF 支持开发者将容器镜像部署为函数。当前支持两种类型的镜像函数:
?WebServer 镜像函数:镜像中需包含 Http Server 并监听 9000 端口。实例拉起后,事件体以 Http 请求的形式传入实例。
Job 镜像函数:镜像中无需包含 Http Server,不暴露任何端口。实例拉起后,将根据用户指定的 CMDEntryPoint 执行特定命令(简单的如 date 命令,也可指定运行特定代码逻辑),执行完毕后自动释放实例。事件体以环境变量的形式注入实例。
本文介绍 Job 镜像函数的背景信息、工作原理、函数开发、函数日志打印、冷启动优化、计费说明及使用限制。

背景信息

在 WebServer 镜像上线后,运行时的环境依赖问题得到了较好解决,该功能同时也给予了用户更大的自由发挥空间。但另一方面,我们发现 WebServer 镜像函数必须在镜像内包含 Http Server 的限制为云原生用户使用镜像函数带来了不小的迁移改造成本。为此,我们推出了全新的 Job 镜像函数类型,用户无需对已有镜像进行任何改造即可快速迁移到 SCF,充分享受免 Kubernetes 集群管理、免安全维护、免资源故障诊断带来的便利,将弹性伸缩、可用性等需求下沉至计算平台,进一步释放云计算能力。

工作原理

当前仅事件函数支持 Job 镜像。
云函数在函数实例初始化阶段,获得镜像仓库的临时用户名和密码作为访问凭证来拉取镜像。当前以异步的方式响应调用请求,即在接收到调用请求、镜像拉取完成并成功拉起实例后,将立即返回实例调度结果(200 OK),并根据您所定义的启动命令 Command、参数 Args 异步地执行特定进程。最后,在该进程生命周期结束后,实例将被自动销毁。
注意:事件体将以环境命令的方式注入实例,整个调用过程如图所示:
?
?
?

基于 Job 镜像部署的函数开发

函数入参

SCF_CUSTOM_CONTAINER_EVENT:事件体,json类型。收到请求后,以环境变量的方式直接注入到实例中。
SCF_CUSTOM_CONTAINER_EVENT={"key1":"test?value?1","key2":"test?value?2"}
事件结构请参见 触发器事件消息结构汇总
说明
Job 镜像函数在被拉起后不会对外暴露任何端口,故无法直接透传 HTTP 请求到实例中。
Job 镜像的所有环境变量总大小限制为4KB,因此请控制您的事件体大小在4KB以内。

内置的其他环境变量

自定义镜像场景相较于基于代码包部署,在容器内置的环境变量做了变更,您可以根据实际需要进行引用。
环境变量 Key
具体值或值来源
TENCENTCLOUD_RUNENV
SCF
USER_CODE_ROOT
/var/user/
USER
qcloud
SCF_FUNCTIONNAME
函数名
SCF_FUNCTIONVERSION
函数版本
TENCENTCLOUD_REGION
区域
TENCENTCLOUD_APPID
账号 APPID
TENCENTCLOUD_UIN
账号 UIN

函数调用方式

可以在控制台/使用 API 直接调用,亦支持使用触发器调用。

函数日志打印

云函数 SCF 将以无侵入的方式,收集在容器内所产生的 stdout、stderr 等标准输出日志,并上报至日志模块。您在调用函数后,可以通过控制台查看日志聚合展示效果。

冷启动优化

镜像由于增加了基础环境、系统依赖等文件层,相较于基于代码包部署的完全内置,存在额外的文件下载和镜像解压的时间。为了进一步降低冷启动时间,推荐您使用以下策略。

优化镜像体积

在同一地域创建镜像仓库与函数。在函数触发镜像拉取时通过 VPC 网络进行拉取,以此获得更快更稳定的镜像拉取效率。
镜像制作秉承最小化原则,即仅包含必要基础环境、运行依赖,去除不必要的文件等。

开启镜像加速

通过开启镜像加速开关,函数平台会通过内部加速机制,预先将镜像就近缓存,在调用函数实例时,直接从缓存进行加载和解压,省去了镜像文件下载的时间。可获得平均 5 倍的启动速度提升。

操作步骤

1. 登录?Serverless 控制台,单击左侧导航栏的函数服务
2. 函数服务列表中,选择需进行配置的镜像函数名。
3. 函数管理页面中,选择函数代码,单击镜像配置右侧的编辑,进入编辑模式。
4. 单击镜像加速右侧的
?
,开启镜像加速模式。如下图所示:
?
?
?
5. 单击保存完成配置。

注意事项

该功能目前属于公测免费期,每个账户在单个地域下限制为最多开启5个函数加速。

使用预置并发

镜像部署搭配预置并发功能,预先启动函数实例,达到最优降低冷启动的体验,详情请参见 预置并发

计费说明

使用镜像部署函数的计费项与使用代码包部署的计费项完全一致。计费详情请参见 计费方式

使用限制

镜像大小

目前仅支持镜像(解压前)小于1GB,如有特殊需要,可 提交工单 申请。建议您根据镜像的大小来选择适合的函数实例执行内存。
镜像大小(X)
执行内存(Y)
X < 256MB
256MB < Y < 512MB
256MB < X < 512MB
512MB < Y < 1GB
512MB < X < 1GB
Y>1GB

镜像仓库访问

仅支持腾讯云容器镜像服务企业版和个人版,详情可参见 容器镜像服务
容器镜像服务企业版镜像仓库详情可参见 镜像仓库基本操作
容器镜像服务个人版镜像仓库详情可参见 开通个人版镜像仓库
仅支持同地域(Region)下私有镜像仓库的镜像读取。

容器内文件读写权限

默认 /tmp 可读可写,建议输出文件时选择 /tmp
避免使用其他用户的存在限制访问或执行的文件。
容器内文件可写层存储空间限制为512M。

构建镜像的客户端 CPU 架构限制

云函数当前是基于 X86 架构运行的,所以暂不支持运行在 ARM 平台上构建的镜像。ARM 的平台典型如 Apple Mac 搭载 M1 芯片的 PC 端。

构建镜像的客户端限制

满足其中之一即可:
Docker image manifest V2,schema 2 (使用 Docker version 1.10或者更新版本)
Open Container Initiative (OCI) Specifications (v1.0.0及以上)
http://www.vxiaotou.com