使用无服务器函数
学习目标
描述无服务器函数
识别使用无服务器函数的适当场景
使用不同的方法调用无服务器函数
创建无服务器函数
无服务器函数概述
什么是无服务器函数?
函数(Function)是 Kyma 提供的一种工作负载类型。"无服务器"意味着不涉及服务器或基础设施。但这是错误的。它只是意味着由第三方管理服务器,你无需为此操心。你可以专注于函数的代码。
从技术上讲,Kyma 中的函数依赖于多种 Kubernetes 资源,例如 Deployment 和 Service。
因此,借助 Kyma 中的无服务器函数,你无需提供和维护容器镜像或基础设施即可运行代码片段。与基于容器的 Deployment 一样,函数也可以被扩缩容、公开暴露和订阅事件。
无服务器函数的优缺点
优点
当你想减少应用的实现和运维工作量时,无服务器函数很有帮助。你只需关心函数的代码和依赖项,其余由 Kyma 管理。这可确保代码的快速部署。
开发人员无需搭建完整的应用即可部署轻量的无服务器函数,从而实现快速原型开发。函数通过服务绑定支持与 SAP BTP 服务的无缝集成,可轻松使用 SAP HANA、Event Mesh 或 Object Store 等能力。这让团队能够在 SAP BTP 生态系统中更快地试验和迭代,从而加速创新。
无服务器函数还支持异步编程模型,并提供事件生产者与消费者之间的松耦合。
缺点
但是,无服务器函数受限于 Kyma 支持的运行时环境。使用自管理的容器,你可以使用任何你想要的语言和环境。
函数还与厂商绑定。换句话说,你必须针对特定提供者专门开发你的函数。因此,与容器相比,函数的可移植性较差。
调用无服务器函数
下表展示了调用函数的两种不同方式:
调用函数
调用方式 |
描述 |
|---|---|
HTTP |
HTTP 请求调用该函数。必须先公开暴露端点。 |
Event |
该函数由事件调用。 |
下图展示了事件如何调用函数:

创建无服务器函数
你可以通过在 YAML 文件中声明函数清单(manifest)来创建函数,也可以使用 Kyma 仪表板的可视化编辑器。可视化编辑器会为你生成函数清单。
描述函数清单
使用 Kyma,你可以用 Node.js 和 Python 创建函数。Kyma 通过针对该工作负载类型的自定义资源(CR)来扩展 Kubernetes。
请查看一个简单 hello-kyma-function 示例的函数清单(版本 v1alhpa2)YAML:
apiVersion: serverless.kyma-project.io/v1alpha2
kind: Function
metadata:
name: hello-kyma-function
labels:
app: hello-kyma-function
spec:
runtime: nodejs22
source:
inline:
dependencies: |
{
"name": "hello-kyma-function",
"version": "1.0.0",
"dependencies": {}
}
source: |-
module.exports = {
main: async function (event, context) {
const message = `Hello ` + process.env.NAME
+ ` from the Kyma Function ${context["function-name"]}`
+ ` running on ${context.runtime}!`;
console.log(message);
return message;
}
}
env:
- name: NAME
value: "Kyma"
注意
在函数清单中,
${context\["function-name"\]}是由 Kyma 注入的运行时变量。它包含函数的名称。这就是我们之前提到的厂商锁定的一个例子。使用这类组件会降低代码的可移植性。
下表展示了清单的不同字段:
函数清单的字段
字段 |
描述 |
|---|---|
apiVersion |
自定义资源的版本。 |
kind |
自定义资源的种类。 |
metadata |
自定义资源的元数据。 |
spec |
自定义资源的规范。 |
让我们分解清单中的 spec 部分:
函数 CR 规范
字段 |
描述 |
|---|---|
spec.runtime |
函数的运行时。例如 |
spec.source |
函数的源代码配置。例如 |
spec.source.inline |
以内联方式直接在函数 CR 中定义的函数完整源代码。 |
spec.source.dependencies |
函数的依赖项。 |
spec.env |
用作函数环境变量的键值对数组。 |
还有更多字段可用于配置你的函数。要获取完整的字段列表,请参阅 Function CR 文档。
总结
如果你想运行较少的代码,例如处理数据或响应事件,无服务器函数是一个不错的选择。你可以通过部署轻量函数并将其与 SAP BTP 服务集成,快速地对新想法进行原型验证。函数还支持事件驱动架构,并确保代码的快速部署。但是,你必须考虑到函数与厂商绑定,并且受限于 Kyma 支持的运行时环境。
有关无服务器函数的延伸阅读
Kyma Serverless Components
The Function CR