func/docs/function-templates/lifecycle.md

4.6 KiB

Lifecycle Hooks

Function runtimes should provide the function developer an ability to perform basic lifecycle operations on the function. In addition to the default / endpoints that all function runtimes expose, there should also be a set of lifecycle endpoints that allow function developers to execute code at startup and shutdown. Additionally, function runtimes should provide the function developer an ability to override the implementation and routing of the HTTP health endpoints at /health/liveness and /health/readiness.

Hook APIs

Due to the fact that each function runtime is implemented in a different language, the APIs for the lifecycle hooks are not consistent across all runtimes. This document describes the intent of the lifecycle hooks and the expected behavior of the function runtime, but does not address the implementation details for each language. Currently none of the function runtimes expose this behavior. This document is forward-looking.

Function lifecycle hooks allow the function developer to provide custom code that is executed at specific points in the function's lifecycle. The function developer can provide a function that is executed when the function is started, and when the function is stopped. This allows the function developer to perform any initialization or cleanup tasks that are required for the function to operate correctly.

To provide custom code for the lifecycle hooks, runtime implementations should NOT require modification to the function configuration in the func.yaml file. Instead, the function developer should be able to provide the code for the lifecycle hooks in the function source code itself. As previously mentioned, the details of these implementations are language-specific.

Init

When a function is first started, the runtime should execute the function's init function, if provided by the function developer. The init function is executed before the function is ready to receive requests. The init function is expected to be synchronous, and should return a boolean value indicating whether the function was successfully initialized. The init function should not accept any arguments.

Shutdown

When a function is stopped, the runtime should execute the function's shutdown function, if provided by the function developer. The shutdown function is executed after the function has stopped receiving requests, but before the function process has been stopped. The shutdown function is expected to be synchronous, and should return a boolean value indicating whether the function was successfully shutdown. The shutdown function should not accept any arguments.

Health Endpoints

Out of the box, the function runtimes provide a default implementation of the HTTP health endpoints. These endpoints are used by Knative to determine if the function is ready to receive requests. The default implementation of the health endpoints varies by language, but in general, the /health/liveness endpoint is used to determine if the function is running, and the /health/readiness endpoint is used to determine if the function is ready to receive requests.

Function runtimes should provide the function developer an ability to override the implementation of the HTTP health endpoints. By default, functions are expected to respond to HTTP requests on the /health/liveness and /health/readiness endpoints. Language Packs may change these values by providing a healthEndpoints section in the manifest.yaml file.

However, this alone does not allow the function developer to override the default implementation of the health endpoints. Function developers should be able to provide custom code for the health endpoints in order to provide custom logic for determining if the function is ready to receive requests. This is useful for functions that require some sort of initialization before they are ready to receive requests or which may need to determine if some external service is available before they are ready to receive requests.

To provide custom code for the health endpoints, runtime implementations should NOT require modification to the function configuration in the func.yaml file. Instead, the function developer should be able to provide the code for the health endpoints in the function source code itself. As previously mentioned, the details of these implementations are language-specific.

Health endpoints are expected to be synchronous and should result in an HTTP 200 OK response code if the function is ready to receive requests. If the function is not ready to receive requests, the health endpoint should result in 503 Service Unavailable.