12.5. Python 関数の開発
Python を使用した OpenShift Serverless Functions は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
Python 関数プロジェクトを作成 したら、指定したテンプレートファイルを変更して、ビジネスロジックを関数に追加できます。これには、関数呼び出しと返されるヘッダーとステータスコードの設定が含まれます。
12.5.1. 前提条件
- 関数を開発する前に、OpenShift Serverless Functions の設定 の手順を完了している。
12.5.2. Python 関数テンプレート構造
Knative (kn
) CLI を使用して Python 関数を作成する場合、プロジェクトディレクトリーは一般的な Python プロジェクトと似ています。Python 関数にはいくつかの制限があります。プロジェクトの要件として唯一、main()
関数と func.yaml
設定ファイルで設定される func.py
が含まれることが挙げられます。
開発者は、テンプレート requirements.txt
ファイルにある依存関係しか使用できないわけではありません。その他の依存関係は、他の Python プロジェクトに配置されるように追加できます。デプロイメント用にプロジェクトをビルドすると、これらの依存関係は作成したランタイムコンテナーイメージに含まれます。
http
および event
トリガー関数のテンプレート構造はいずれも同じです。
テンプレート構造
fn ├── func.py 1 ├── func.yaml 2 ├── requirements.txt 3 └── test_func.py 4
12.5.3. Python 関数の呼び出しについて
Python 関数は、単純な HTTP 要求で呼び出すことができます。受信要求を受け取ると、関数は context
オブジェクトで最初のパラメーターとして呼び出されます。
context
オブジェクトは、2 つの属性を持つ Python クラスです。
-
request
属性は常に存在し、Flaskリクエスト
オブジェクトが含まれます。 -
2 番目の属性
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
12.5.4. Python 関数の戻り値
関数は、Flask でサポートされている任意の値を返すことができます。これは、呼び出しフレームワークがこれらの値を Flask サーバーに直接プロキシーするためです。
例
def main(context: Context): body = { "message": "Howdy!" } headers = { "content-type": "application/json" } return body, 200, headers
関数は、関数呼び出しの 2 番目および 3 番目の応答値として、ヘッダーと応答コードの両方を設定できます。
12.5.4.1. Returning 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_source
および event_type
デコレーター属性は任意です。
12.5.5. Python 関数のテスト
Python 関数は、お使いのコンピューターのローカルにテストできます。デフォルトのプロジェクトには、関数の単純な単体テストを提供する test_func.py
ファイルが含まれています。
Python 関数のデフォルトのテストフレームワークは unittest
です。必要に応じて、別のテストフレームワークを使用できます。
前提条件
Python 関数テストをローカルで実行するには、必要な依存関係をインストールする必要があります。
$ pip install -r requirements.txt
手順
-
test_func.py
ファイルが含まれる関数のフォルダーに移動します。 テストを実行します。
$ python3 test_func.py