第5章 Knative Functions CLI コマンド
5.1. kn 関数コマンド リンクのコピーリンクがクリップボードにコピーされました!
5.1.1. Knative 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
-
受け入れられるランタイム値には、
5.1.2. 機能をローカルで実行する リンクのコピーリンクがクリップボードにコピーされました!
kn func run コマンドを使用して、現在のディレクトリーまたは --path フラグで指定されたディレクトリーで機能をローカルに実行できます。実行している関数が以前にビルドされたことがない場合、またはプロジェクトファイルが最後にビルドされてから変更されている場合、kn func run コマンドは、デフォルトで関数を実行する前に関数をビルドします。
現在のディレクトリーで機能を実行するコマンドの例
$ kn func run
パスとして指定されたディレクトリーで機能を実行するコマンドの例
$ kn func run --path=<directory_path>
--build フラグを使用して、プロジェクトファイルに変更がなくても、機能を実行する前に既存のイメージを強制的に再構築することもできます。
ビルドフラグを使用した実行コマンドの例
$ kn func run --build
build フラグを false に設定すると、イメージのビルドが無効になり、以前ビルドしたイメージを使用して機能が実行されます。
ビルドフラグを使用した実行コマンドの例
$ kn func run --build=false
help コマンドを使用して、kn func run コマンドオプションの詳細を確認できます。
help コマンドのビルド
$ kn func help run
5.1.3. 関数の構築 リンクのコピーリンクがクリップボードにコピーされました!
関数を実行する前に、関数プロジェクトをビルドする必要があります。kn func run コマンドを使用している場合は、関数が自動的に構築されます。ただし、kn func build コマンドを使用すると、実行せずに関数をビルドできます。これは、上級ユーザーやデバッグシナリオに役立ちます。
kn func build は、コンピューターまたは OpenShift Container Platform クラスターでローカルに実行できる OCI コンテナーイメージを作成します。このコマンドは、関数プロジェクト名とイメージレジストリー名を使用して、関数の完全修飾イメージ名を作成します。
5.1.3.1. イメージコンテナーの種類 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、kn func build は、Red Hat Source-to-Image (S2I) テクノロジーを使用してコンテナーイメージを作成します。
Red Hat Source-to-Image (S2I) を使用したビルドコマンドの例
$ kn func build
5.1.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
5.1.3.3. Push フラグ リンクのコピーリンクがクリップボードにコピーされました!
--push フラグを kn func build コマンドに追加して、正常にビルドされた後に関数イメージを自動的にプッシュできます。
OpenShift Container Registry を使用したビルドコマンドの例
$ kn func build --push
5.1.3.4. Help コマンド リンクのコピーリンクがクリップボードにコピーされました!
kn func build コマンドオプションの詳細は、help コマンドを使用できます。
help コマンドのビルド
$ kn func help build
5.1.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 にデプロイされます。 -
この関数は、
pathが指定されない限り、現在のディレクトリーからデプロイされます。 - Knative サービス名はプロジェクト名から派生するため、以下のコマンドでは変更できません。
-
Developer パースペクティブの +Add ビューで Import from Git または Create Serverless Function を使用して、Git リポジトリー URL を使用してサーバーレス関数を作成できます。
5.1.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 TrueKnative サービスとしてデプロイされた関数をリスト表示します。
$ 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
5.1.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
5.1.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コマンドは、デフォルトでローカルディレクトリーで実行され、このディレクトリーが関数プロジェクトであると想定します。
-
5.1.7.1. kn func はオプションのパラメーターを呼び出します リンクのコピーリンクがクリップボードにコピーされました!
次の knfuncinvoke CLI コマンドフラグを使用して、リクエストのオプションのパラメーターを指定できます。
| フラグ | 説明 |
|---|---|
|
|
呼び出された関数のターゲットインスタンスを指定します。たとえば、 |
|
|
メッセージの形式を指定します (例: |
|
| リクエストの一意の文字列識別子を指定します。 |
|
| クラスターの namespace を指定します。 |
|
|
リクエストの送信者名を指定します。これは、CloudEvent |
|
|
リクエストのタイプを指定します (例: |
|
|
リクエストの内容を指定します。CloudEvent リクエストの場合、これは CloudEvent |
|
| 送信するデータを含むローカルファイルへのパスを指定します。 |
|
| リクエストの MIME コンテンツタイプを指定します。 |
|
| プロジェクトディレクトリーへのパスを指定します。 |
|
| すべてのオプションを対話的に確認するように要求を有効にします。 |
|
| 詳細出力の出力を有効にします。 |
|
|
|
5.1.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"を指定できます。
5.1.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
5.1.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
5.1.7.1.2.2. 関数プロジェクトの指定 リンクのコピーリンクがクリップボードにコピーされました!
--path フラグを使用して、関数プロジェクトへのパスを指定できます。
$ kn func invoke --path <path_to_function>
たとえば、./example/example- function ディレクトリーにある function プロジェクトを使用するには、以下のコマンドを使用します。
$ kn func invoke --path ./example/example-function
5.1.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
5.1.8. 関数の削除 リンクのコピーリンクがクリップボードにコピーされました!
kn func delete コマンドを使用して関数を削除できます。これは、関数が不要になった場合に役立ち、クラスターのリソースを節約するのに役立ちます。
手順
関数を削除します。
$ kn func delete [<function_name> -n <namespace> -p <path>]-
削除する関数の名前またはパスが指定されていない場合は、現在のディレクトリーで
func.yamlファイルを検索し、削除する関数を判断します。 -
namespace が指定されていない場合は、
func.yamlのnamespaceの値にデフォルト設定されます。
-
削除する関数の名前またはパスが指定されていない場合は、現在のディレクトリーで