Knative Functionsは、Knativeで関数を作成およびデプロイするための簡略化されたプログラミングプラットフォームを提供し、Knative、Kubernetes、およびコンテナーの基本的な詳細から解放されます。 関数を作成するだけで、システムは自動的にコンテナイメージを生成します。 イメージの構築とデプロイに関連するパラメーターをカスタマイズした後、Knative Serviceの形式で存在する関数のデプロイを完了できます。
前提条件
Knativeはクラスターにデプロイされています。 詳細については、「」「Knativeのデプロイ」をご参照ください。
ステップ1: コマンドラインツールのダウンロードとインストール
funcreleaseページに移動し、使用するOSに基づいて
func
コマンドラインツールのバイナリファイルをダウンロードします。次の例は、Linuxにfuncをインストールする方法を示しています。
バイナリファイルをダウンロードした後、次のコマンドを実行してファイルの名前を
func
に変更します。mv <path-to-binary-file> func # <path-to-binary-file> is the local path of the binary file. Example: func_darwin_amd64 or func_linux_amd64.
次のコマンドを実行して、ファイルを実行可能にします。
chmod +x func
次のコマンドを実行して、LinuxのPATH変数に含まれるディレクトリにfuncバイナリファイルを移動します。 このようにして、バイナリファイルは任意のパスから実行できます。
mv func /usr/local/bin
次のコマンドを実行して、funcがインストールされているかどうかを確認します。
func version
funcのバージョンに関する情報が返された場合、funcがインストールされます。
ステップ2: 関数の作成
Knative Functionsは、基本関数の作成に使用できるテンプレートを提供します。 使用するプログラミング言語と呼び出し方法に基づいて、次のテンプレートを選択できます。 次のテンプレートでは、CloudEventおよびHTTPリクエストを使用して関数を呼び出すことができます。
次の例は、Goテンプレートを使用して関数を作成する方法を示しています。
次のコマンドを実行して関数を作成します。
func create -l <language> <function-name>
たとえば、Goで書かれたデモ関数を作成します。
func create -l go hello
期待される出力:
Created go function in /usr/local/bin/hello
hello
ディレクトリでls
コマンドを実行し、作成されたプロジェクトディレクトリを照会します。func.yaml go.mod handle.go handle_test.go README.md
hello
ディレクトリで次のコマンドを実行し、自動的に作成される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: default
registry
: ビルド後にイメージがプッシュされるレジストリ。builderImages
: イメージビルダーによって使用されるイメージ。 例:registry-cn-beijing.ack.aliyuncs.com/acs/knative-func-builder-jammy-tiny:latest
。deploy
: 関数がデプロイされている名前空間など、関数をデプロイするための設定。
ステップ3: Knativeに関数をデプロイする
関数は作成後にデプロイできます。
次のコマンドを実行して、関数をデプロイします。
既定では、deployコマンドは、関数プロジェクトにちなんで名付けられたKnative Serviceとして関数をデプロイします。 プロジェクト名とレジストリ名は、関数のビルド時に完全なイメージアドレスを生成するために使用されます。
func deploy
期待される出力:
Building function image Still building Still building Yes, still building Don't give up on me Still building This is taking a while Still building Still building Yes, still building Function built: registry.cn-beijing.aliyuncs.com/knative-release-xxx/hello:latest Pushing function image to the registry "registry.cn-beijing.aliyuncs.com" using the "xxx" user credentials Deploying function to the cluster Function deployed in namespace "default" and exposed at URL: http://hello.default.example.com
次のコマンドを実行して、デプロイされた関数を照会します。
func info
期待される出力:
Function name: hello Function is built in image: Function is deployed in namespace: default Routes: http://hello.default.example.com
ステップ4: Knative関数からの呼び出し
以下の設定をhostsファイルに追加して、Knativeサービスのドメイン名をKnativeゲートウェイのIPアドレスに指定します。 例:
121.xx.xxx.xx hello.default.example.com # Replace 121.xx.xxx.xx with the actual Knative gateway IP address. Replace hello.default.example.com with the domain name of the Knative Service.
次のコマンドを実行して、関数を呼び出します。
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」をご参照ください。