云函数 SCF 支持开发者将容器镜像部署为函数。当前支持两种类型的镜像函数:
WebServer 镜像函数:镜像中需包含 Http Server 并监听 9000 端口。实例拉起后,事件体以 Http 请求的形式传入实例。
Job 镜像函数:镜像中无需包含 Http Server,不暴露任何端口。实例拉起后,将根据用户指定的
CMD
和EntryPoint
执行特定命令(简单的如 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 镜像函数单个命令行参数或环境变量的最大长度限制是128KB,所有环境变量总大小限制为2MB,您的事件体大小需遵循此限制。
内置的其他环境变量
自定义镜像场景相较于基于代码包部署,在容器内置的环境变量做了变更,您可以根据实际需要进行引用。
环境变量 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个函数加速。
使用预置并发
计费说明
使用限制
镜像大小
镜像大小(X) | 执行内存(Y) |
X < 256MB | 256MB < Y < 512MB |
256MB < X < 512MB | 512MB < Y < 1GB |
512MB < X < 1GB | Y>1GB |
镜像仓库访问
仅支持腾讯云容器镜像服务企业版和个人版,详情可参见 容器镜像服务。
容器镜像服务企业版镜像仓库详情可参见 镜像仓库基本操作。
容器镜像服务个人版镜像仓库详情可参见 开通个人版镜像仓库。
仅支持同地域(Region)下私有镜像仓库的镜像读取。
容器内文件读写权限
输出文件时,
rootfs
文件系统下可写。避免使用其他用户的存在限制访问或执行的文件。
容器内文件可写层存储空间限制为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及以上)