×

OpenShift Serverless Functions with Python 仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 支持,可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让客户尽早访问即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

在您创建了 Python 函数项目之后,您可以修改提供的模板文件以向您的函数添加业务逻辑。这包括配置函数调用以及返回的标头和状态代码。

先决条件

Python 函数模板结构

当您使用 Knative (kn) CLI 创建 Python 函数时,项目目录类似于典型的 Python 项目。Python 函数的限制很少。唯一的要求是您的项目包含一个包含 main() 函数的 func.py 文件和一个 func.yaml 配置文件。

开发人员不受模板 requirements.txt 文件中提供的依赖项的限制。可以像在任何其他 Python 项目中一样添加其他依赖项。当项目构建用于部署时,这些依赖项将包含在创建的运行时容器镜像中。

httpevent 触发函数具有相同的模板结构。

模板结构
fn
├── func.py (1)
├── func.yaml (2)
├── requirements.txt (3)
└── test_func.py (4)
1 包含一个 main() 函数。
2 用于确定镜像名称和注册表。
3 可以像在任何其他 Python 项目中一样向 requirements.txt 文件添加其他依赖项。
4 包含一个简单的单元测试,可用于在本地测试您的函数。

关于调用 Python 函数

可以使用简单的 HTTP 请求调用 Python 函数。当收到传入请求时,将使用 context 对象作为第一个参数调用函数。

context 对象是一个具有两个属性的 Python 类。

  • request 属性始终存在,并包含 Flask request 对象。

  • 第二个属性 cloud_event,如果传入请求是 CloudEvent 对象,则会填充。

开发人员可以从上下文对象访问任何 CloudEvent 数据。

示例上下文对象
def main(context: Context):
    """
    The context parameter contains the Flask request object and any
    CloudEvent received with the request.
    """
    print(f"Method: {context.request.method}")
    print(f"Event data {context.cloud_event.data}")
    # ... business logic here

Python 函数返回值

函数可以返回 Flask 支持的任何值。这是因为调用框架将这些值直接代理到 Flask 服务器。

示例
def main(context: Context):
    body = { "message": "Howdy!" }
    headers = { "content-type": "application/json" }
    return body, 200, headers

函数可以将标头和响应代码设置为函数调用的次要和第三个响应值。

返回 CloudEvents

开发人员可以使用 @event 装饰器告诉调用程序必须在发送响应之前将函数返回值转换为 CloudEvent。

示例
@event("event_source"="/my/function", "event_type"="my.type")
def main(context):
    # business logic here
    data = do_something()
    # more data processing
    return data

此示例发送一个类型为 "my.type" 且源为 "/my/function" 的 CloudEvent 作为响应值。CloudEvent data 属性 设置为返回的 data 变量。event_sourceevent_type 装饰器属性都是可选的。

测试 Python 函数

您可以在本地计算机上本地测试 Python 函数。默认项目包含一个 test_func.py 文件,该文件为函数提供了一个简单的单元测试。

Python 函数的默认测试框架是 unittest。如果愿意,您可以使用其他测试框架。

先决条件
  • 要在本地运行 Python 函数测试,您必须安装所需的依赖项。

    $ pip install -r requirements.txt
步骤
  1. 导航到包含 test_func.py 文件的函数文件夹。

  2. 运行测试

    $ python3 test_func.py

后续步骤