Knative Functions は、Knative で関数を作成およびデプロイするための簡素化されたプログラミングプラットフォームを提供し、Knative、Kubernetes、およびコンテナーの基礎となる詳細から解放します。関数を作成するだけで、システムがコンテナーイメージを自動的に生成します。イメージの構築とデプロイメントの関連パラメーターをカスタマイズした後、Knative サービスの形式で存在する関数のデプロイメントを完了できます。
前提条件
Knative がクラスターにデプロイされています。 詳細については、「」「Knative のデプロイと管理」をご参照ください。
手順 1:コマンドラインツールのダウンロードとインストール
func リリースページにアクセスし、使用している OS に基づいて
funcコマンドラインツールのバイナリファイルをダウンロードします。次の例は、Linux に func をインストールする方法を示しています。
バイナリファイルをダウンロードした後、次のコマンドを実行して、ファイルの名前を
funcに変更します。mv <バイナリファイルへのパス> func # <バイナリファイルへのパス> はバイナリファイルのローカルパスです。 例:func_darwin_amd64 または func_linux_amd64。次のコマンドを実行して、ファイルを実行可能にします。
chmod +x func次のコマンドを実行して、func バイナリファイルを Linux の PATH 変数に含まれているディレクトリに移動します。 この方法では、バイナリファイルは任意のパスから実行できます。
mv func /usr/local/bin次のコマンドを実行して、func がインストールされているかどうかを確認します。
func versionfunc バージョンに関する情報が返された場合、func はインストールされています。
手順 2:関数の作成
Knative Functions は、複数のプログラミング言語と呼び出しメソッドをサポートするテンプレートを提供します。 次のテンプレートは、CloudEvent と HTTP の両方の呼び出しに適用できます。
次の例は、Go テンプレートを使用して関数を作成する方法を示しています。
次のコマンドを実行して、関数を作成します。
func create -l <言語> <関数名>たとえば、Go で記述されたデモ関数を作成します。
func create -l go hello予期される出力:
Created go function in /usr/local/bin/hellohelloディレクトリでlsコマンドを実行して、作成されたプロジェクトディレクトリをクエリします。func.yaml go.mod handle.go handle_test.go README.mdhelloディレクトリで次のコマンドを実行して、自動的に作成された func.yaml ファイルをクエリします。cat func.yaml予期される出力:
specVersion: 0.35.0 name: hello runtime: go created: 2023-12-13T06:48:45.419587147Z関数の構築とデプロイのパラメーターをカスタマイズして、func.yaml ファイルを変更します。 func.yaml ファイルには、関数プロジェクトの構成が含まれています。 詳細については、「func_yaml.md」をご参照ください。
次のコードブロックは、func.yaml ファイルの例を示しています。
specVersion: 0.35.0 name: hello runtime: go created: 2023-11-29T14:47:34.101658+08:00 registry: registry.cn-beijing.aliyuncs.com/knative-release-xxx image: registry.cn-beijing.aliyuncs.com/knative-release-xxx/hello:latest build: builderImages: pack: registry-cn-beijing.ack.aliyuncs.com/acs/knative-func-builder-jammy-tiny:latest deploy: namespace: defaultregistry:イメージがビルドされた後にプッシュされるレジストリ。builderImages:イメージビルダーによって使用されるイメージ。 例:registry-cn-beijing.ack.aliyuncs.com/acs/knative-func-builder-jammy-tiny:latest。deploy:関数をデプロイするための構成。たとえば、関数がデプロイされる名前空間。
手順 3: Knative Functions にデプロイする
関数が作成された後、デプロイできます。
関数をデプロイするには、次のコマンドを実行します。
デフォルトでは、deploy コマンドは、関数プロジェクトの名前を付けた Knative サービスとして関数をデプロイします。プロジェクト名とレジストリ名は、関数のビルド時に完全なイメージアドレスを生成するために使用されます。
func deployデプロイされている関数をクエリするには、次のコマンドを実行します。
func info予期される出力:
Function name: hello Function is built in image: Function is deployed in namespace: default Routes: http://hello.default.example.com
手順 4:Knative Functions からの呼び出し
hosts ファイルに次の構成を追加して、Knative サービスのドメイン名を Knative ゲートウェイの IP アドレスにポイントします。 例:
121.xx.xxx.xx hello.default.example.com # 121.xx.xxx.xx を実際の Knative ゲートウェイ IP アドレスに置き換えます。 hello.default.example.com を Knative サービスのドメイン名に置き換えます。次のコマンドを実行して、関数を呼び出します。
func invoke予期される出力:
POST / HTTP/1.1 hello.default.example.com Content-Type: application/json Forwarded: for=192.168.102.101;proto=http Knative-Serving-Default-Route: true X-Forwarded-Proto: http User-Agent: Go-http-client/1.1 Content-Length: 25 Accept-Encoding: gzip K-Proxy-Request: activator X-Forwarded-For: 192.168.102.101, 192.168.102.97 X-Request-Id: 3d82cfc8-f9df-4935-84cd-c6561b4587f6 Body:出力は、HTTP リクエストが Knative Functions に送信され、関数が正常に呼び出されたことを示しています。
次のコマンドを実行して、クラスター内のポッドをクエリします。
kubectl get pod予期される出力:
NAME READY STATUS RESTARTS AGE hello-00001-deployment-7b65fcdc4c-gfcbp 2/2 Running 0 34出力は、呼び出し後にポッドが作成されたことを示しています。
関連情報
Container Service for Kubernetes (ACK) の Knative に関するよくある質問 (FAQ) については、「Knative に関する FAQ」をご参照ください。