4.6. 関数コマンド
4.6.1. 関数の作成
関数をビルドし、デプロイする前に、Knative (kn
) CLI を使用して関数を作成する必要があります。コマンドラインでパス、ランタイム、テンプレート、およびイメージレジストリーをフラグとして指定するか、-c
フラグを使用してターミナルで対話型エクスペリエンスを開始できます。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
-
Knative (
kn
) CLI をインストールしている。
手順
関数プロジェクトを作成します。
$ kn func create -r <repository> -l <runtime> -t <template> <path>
-
受け入れられるランタイム値には、
quarkus
、node
、typescript
、go
、python
、springboot
、およびrust
が含まれます。 受け入れられるテンプレート値には、
http
とcloudevents
が含まれます。コマンドの例
$ kn func create -l typescript -t cloudevents examplefunc
出力例
Created typescript function in /home/user/demo/examplefunc
または、カスタムテンプレートを含むリポジトリーを指定することもできます。
コマンドの例
$ kn func create -r https://github.com/boson-project/templates/ -l node -t hello-world examplefunc
出力例
Created node function in /home/user/demo/examplefunc
-
受け入れられるランタイム値には、
4.6.2. 機能をローカルで実行する
kn func run
コマンドを使用して、現在のディレクトリーまたは --path
フラグで指定されたディレクトリーで機能をローカルに実行できます。実行している関数が以前にビルドされたことがない場合、またはプロジェクトファイルが最後にビルドされてから変更されている場合、kn func run
コマンドは、既定で関数を実行する前に関数をビルドします。
現在のディレクトリーで機能を実行するコマンドの例
$ kn func run
パスとして指定されたディレクトリーで機能を実行するコマンドの例
$ kn func run --path=<directory_path>
--build
フラグを使用して、プロジェクトファイルに変更がなくても、機能を実行する前に既存のイメージを強制的に再構築することもできます。
ビルドフラグを使用した実行コマンドの例
$ kn func run --build
ビルド
フラグを false に設定すると、イメージのビルドが無効になり、以前にビルドされたイメージを使用して機能が実行されます。
ビルドフラグを使用した実行コマンドの例
$ kn func run --build=false
help コマンドを使用して、kn func run
コマンドオプションの詳細を確認できます。
help コマンドの構築
$ kn func help run
4.6.3. 関数のビルド
関数を実行する前に、関数プロジェクトをビルドする必要があります。kn func run
コマンドを使用している場合、関数は自動的に構築されます。ただし、kn func build
コマンドを使用すると、実行せずに関数をビルドできます。これは、上級ユーザーやデバッグシナリオに役立ちます。
kn func build
は、コンピューターまたは OpenShift Container Platform クラスターでローカルに実行できる OCI コンテナーイメージを作成します。このコマンドは、関数プロジェクト名とイメージレジストリー名を使用して、関数の完全修飾イメージ名を作成します。
4.6.3.1. イメージコンテナーの種類
デフォルトでは、kn func build
は、Red Hat Source-to-Image (S2I) テクノロジーを使用してコンテナーイメージを作成します。
Red Hat Source-to-Image (S2I) を使用したビルドコマンドの例
$ kn func build
4.6.3.2. イメージレジストリーの種類
OpenShift Container Registry は、関数イメージを保存するためのイメージレジストリーとしてデフォルトで使用されます。
OpenShift Container Registry を使用したビルドコマンドの例
$ kn func build
出力例
Building function image Function image has been built, image: registry.redhat.io/example/example-function:latest
--registry
フラグを使用して、OpenShift Container Registry をデフォルトのイメージレジストリーとして使用することをオーバーライドできます。
quay.io を使用するように OpenShift Container Registry をオーバーライドするビルドコマンドの例
$ kn func build --registry quay.io/username
出力例
Building function image Function image has been built, image: quay.io/username/example-function:latest
4.6.3.3. Push フラグ
--push
フラグを kn func build
コマンドに追加して、正常にビルドされた後に関数イメージを自動的にプッシュできます。
OpenShift Container Registry を使用したビルドコマンドの例
$ kn func build --push
4.6.3.4. Help コマンド
kn func build
コマンドオプションの詳細については、help コマンドを使用できます。
help コマンドの構築
$ kn func help build
4.6.4. 関数のデプロイ
kn func deploy
コマンドを使用して、関数を Knative サービスとしてクラスターにデプロイできます。ターゲット関数がすでにデプロイされている場合には、コンテナーイメージレジストリーにプッシュされている新規コンテナーイメージで更新され、Knative サービスが更新されます。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
-
Knative (
kn
) CLI をインストールしている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
- デプロイする関数を作成し、初期化している必要がある。
手順
関数をデプロイします。
$ kn func deploy [-n <namespace> -p <path> -i <image>]
出力例
Function deployed at: http://func.example.com
-
namespace
が指定されていない場合には、関数は現在の namespace にデプロイされます。 -
この関数は、
パス
が指定されない限り、現在のディレクトリーからデプロイされます。 - Knative サービス名はプロジェクト名から派生するので、以下のコマンドでは変更できません。
-
4.6.5. 既存の関数の一覧表示
kn func list
を使用して既存の関数を一覧表示できます。Knative サービスとしてデプロイされた関数を一覧表示するには、kn service list
を使用することもできます。
手順
既存の関数を一覧表示します。
$ kn func list [-n <namespace> -p <path>]
出力例
NAME NAMESPACE RUNTIME URL READY example-function default node http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com True
Knative サービスとしてデプロイされた関数を一覧表示します。
$ kn service list -n <namespace>
出力例
NAME URL LATEST AGE CONDITIONS READY REASON example-function http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com example-function-gzl4c 16m 3 OK / 3 True
4.6.6. 関数の記述
kn func info
コマンドは、関数名、イメージ、namespace、Knative サービス情報、ルート情報、イベントサブスクリプションなどのデプロイされた関数に関する情報を出力します。
手順
関数を説明します。
$ kn func info [-f <format> -n <namespace> -p <path>]
コマンドの例
$ kn func info -p function/example-function
出力例
Function name: example-function Function is built in image: docker.io/user/example-function:latest Function is deployed as Knative Service: example-function Function is deployed in namespace: default Routes: http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com
4.6.7. テストイベントでのデプロイされた関数の呼び出し
kn func invoke
CLI コマンドを使用して、ローカルまたは OpenShift Container Platform クラスター上で関数を呼び出すためのテストリクエストを送信できます。このコマンドを使用して、関数が機能し、イベントを正しく受信できることをテストできます。関数をローカルで呼び出すと、関数開発中の簡単なテストに役立ちます。クラスターで関数を呼び出すと、実稼働環境に近いテストに役立ちます。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされている。
-
Knative (
kn
) CLI をインストールしている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
- 呼び出す関数をすでにデプロイしている必要があります。
手順
関数を呼び出します。
$ kn func invoke
-
kn func invoke
コマンドは、ローカルのコンテナーイメージが実行中の場合や、クラスターにデプロイされた関数がある場合にのみ機能します。 -
kn func invoke
コマンドは、デフォルトでローカルディレクトリーで実行され、このディレクトリーが関数プロジェクトであると想定します。
-
4.6.7.1. kn func はオプションのパラメーターを呼び出します
次の knfuncinvoke
CLI コマンドフラグを使用して、リクエストのオプションのパラメーターを指定できます。
フラグ | 説明 |
---|---|
|
呼び出された関数のターゲットインスタンスを指定します。たとえば、 |
|
メッセージの形式を指定します (例: |
| リクエストの一意の文字列識別子を指定します。 |
| クラスターの namespace を指定します。 |
|
リクエストの送信者名を指定します。これは、CloudEvent |
|
リクエストのタイプを指定します (例: |
|
リクエストの内容を指定します。CloudEvent リクエストの場合、これは CloudEvent |
| 送信するデータを含むローカルファイルへのパスを指定します。 |
| リクエストの MIME コンテンツタイプを指定します。 |
| プロジェクトディレクトリーへのパスを指定します。 |
| すべてのオプションを対話的に確認するように要求を有効にします。 |
| 詳細出力の出力を有効にします。 |
|
|
4.6.7.1.1. 主なパラメーター
次のパラメーターは、kn func invoke
コマンドの主なプロパティーを定義します。
- イベントターゲット (
-t
、-target
) -
呼び出された関数のターゲットインスタンス。ローカルにデプロイされた関数の
local
値、リモートにデプロイされた関数のremote
値、または任意のエンドポイントにデプロイされた関数の URL を受け入れます。ターゲットが指定されていない場合、デフォルトでlocal
になります。 - イベントメッセージ形式 (
-f
、--format
) -
http
やcloudevent
などのイベントのメッセージ形式。これは、デフォルトで、関数の作成時に使用されたテンプレートの形式になります。 - イベントタイプ (
--type
) -
送信されるイベントのタイプ。各イベントプロデューサーのドキュメントで設定されている
type
パラメーターに関する情報を見つけることができます。たとえば、API サーバーソースは、生成されたイベントのtype
パラメーターをdev.knative.apiserver.resource.update
として設定する場合があります。 - イベントソース (
--source
) -
イベントを生成する一意のイベントソース。これは、
https://10.96.0.1/
などのイベントソースの URI、またはイベントソースの名前である可能性があります。 - イベント ID (
--id
) - イベントプロデューサーによって作成されるランダムな一意の ID。
- イベントデータ (
--data
) kn func invoke
コマンドで送信されるイベントのdata
値を指定できます。たとえば、イベントにこのデータ文字列が含まれるように、"Hello World"
などの--data
値を指定できます。デフォルトでは、kn func invoke
によって作成されたイベントにデータは含まれません。注記クラスターにデプロイされた関数は、
source
およびtype
などのプロパティーの値を提供する既存のイベントソースからのイベントに応答できます。多くの場合、これらのイベントには、イベントのドメイン固有のコンテキストをキャプチャーする JSON 形式のdata
値があります。本書に記載されている CLI フラグを使用して、開発者はローカルテスト用にこれらのイベントをシミュレートできます。--file
フラグを使用してイベントデータを送信し、イベントのデータを含むローカルファイルを指定することもできます。この場合は、--content-type
を使用してコンテンツタイプを指定します。- データコンテンツタイプ (
--content-type
) -
--data
フラグを使用してイベントのデータを追加している場合は、-content-type
フラグを使用して、イベントによって伝送されるデータのタイプを指定できます。前の例では、データはプレーンテキストであるため、kn func invoke --data "Hello world!" --content-type "text/plain"
を指定できます。
4.6.7.1.2. コマンドの例
これは、kn func invoke
コマンドの一般的な呼び出しです。
$ kn func invoke --type <event_type> --source <event_source> --data <event_data> --content-type <content_type> --id <event_ID> --format <format> --namespace <namespace>
たとえば、Hello world! イベントを送信すると、以下を行うことができます。
$ kn func invoke --type ping --source example-ping --data "Hello world!" --content-type "text/plain" --id example-ID --format http --namespace my-ns
4.6.7.1.2.1. データを使用したファイルの指定
イベントデータが含まれるディスクにファイルを指定するには、--file
フラグおよび --content-type
フラグを使用します。
$ kn func invoke --file <path> --content-type <content-type>
たとえば、test.json
ファイルに保存されている JSON データを送信するには、以下のコマンドを使用します。
$ kn func invoke --file ./test.json --content-type application/json
4.6.7.1.2.2. 関数プロジェクトの指定
--path
フラグを使用して、関数プロジェクトへのパスを指定できます。
$ kn func invoke --path <path_to_function>
たとえば、./example/example-
function ディレクトリーにある function プロジェクトを使用するには、以下のコマンドを使用します。
$ kn func invoke --path ./example/example-function
4.6.7.1.2.3. ターゲット関数がデプロイされる場所の指定
デフォルトでは、kn func invoke
は関数のローカルデプロイメントをターゲットにします。
$ kn func invoke
別のデプロイメントを使用するには、--target
フラグを使用します。
$ kn func invoke --target <target>
たとえば、クラスターにデプロイされた関数を使用するには、-target remote
フラグを使用します。
$ kn func invoke --target remote
任意の URL にデプロイされた関数を使用するには、-target <URL>
フラグを使用します。
$ kn func invoke --target "https://my-event-broker.example.com"
ローカルデプロイメントを明示的にターゲットとして指定できます。この場合、関数がローカルで実行されていない場合、コマンドは失敗します。
$ kn func invoke --target local
4.6.8. 関数の削除
kn func delete
コマンドを使用して関数を削除できます。これは、関数が不要になった場合に役立ち、クラスターのリソースを節約するのに役立ちます。
手順
関数を削除します。
$ kn func delete [<function_name> -n <namespace> -p <path>]
-
削除する関数の名前またはパスが指定されていない場合には、現在のディレクトリーで
func.yaml
ファイルを検索し、削除する関数を判断します。 -
namespace が指定されていない場合には、
func.yaml
のnamespace
の値にデフォルト設定されます。
-
削除する関数の名前またはパスが指定されていない場合には、現在のディレクトリーで