fn
├── func.py (1)
├── func.yaml (2)
├── requirements.txt (3)
└── test_func.py (4)
OpenShift Serverless Functions with Python 仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 支持,可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让客户尽早访问即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
在您创建了 Python 函数项目之后,您可以修改提供的模板文件以向您的函数添加业务逻辑。这包括配置函数调用以及返回的标头和状态代码。
在您可以开发函数之前,必须完成配置 OpenShift Serverless Functions中的步骤。
当您使用 Knative (kn
) CLI 创建 Python 函数时,项目目录类似于典型的 Python 项目。Python 函数的限制很少。唯一的要求是您的项目包含一个包含 main()
函数的 func.py
文件和一个 func.yaml
配置文件。
开发人员不受模板 requirements.txt
文件中提供的依赖项的限制。可以像在任何其他 Python 项目中一样添加其他依赖项。当项目构建用于部署时,这些依赖项将包含在创建的运行时容器镜像中。
http
和 event
触发函数具有相同的模板结构。
fn
├── func.py (1)
├── func.yaml (2)
├── requirements.txt (3)
└── test_func.py (4)
1 | 包含一个 main() 函数。 |
2 | 用于确定镜像名称和注册表。 |
3 | 可以像在任何其他 Python 项目中一样向 requirements.txt 文件添加其他依赖项。 |
4 | 包含一个简单的单元测试,可用于在本地测试您的函数。 |
可以使用简单的 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
函数可以返回 Flask 支持的任何值。这是因为调用框架将这些值直接代理到 Flask 服务器。
def main(context: Context):
body = { "message": "Howdy!" }
headers = { "content-type": "application/json" }
return body, 200, headers
函数可以将标头和响应代码设置为函数调用的次要和第三个响应值。
开发人员可以使用 @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_source
和 event_type
装饰器属性都是可选的。