すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:Knative ベースの Knative 関数のデプロイ

最終更新日:Dec 28, 2024

Knative Functions を使用すると、簡単なプログラミングで Knative プラットフォームに関数を簡単に作成、ビルド、デプロイできます。 Knative、Kubernetes、コンテナの複雑さを気にする必要がなくなります。関数の作成後、システムは自動的にコンテナイメージを作成し、イメージのビルドとデプロイのパラメータを定義して、関数を Knative サービスとしてデプロイするのに役立ちます。

前提条件

Knative が ACS クラスタにデプロイされています。詳細については、Knative のデプロイを参照してください。

ステップ 1: コマンドラインツールのダウンロードとインストール

  1. func リリースページにアクセスし、使用している OS に基づいて func コマンドラインツールのバイナリファイルをダウンロードします。

    次の例は、Linux に func をインストールする方法を示しています。

  2. バイナリファイルをダウンロードした後、次のコマンドを実行して、ファイルの名前を func に変更します。

    mv <path-to-binary-file> func # <path-to-binary-file> はバイナリファイルのローカルパスです。例: func_darwin_amd64 または func_linux_amd64.

  3. 次のコマンドを実行して、ファイルを実行可能にします。

    chmod +x func
  4. 次のコマンドを実行して、func バイナリファイルを Linux の PATH 変数に含まれるディレクトリに移動します。このようにして、バイナリファイルは任意のパスから実行できます。

    mv func /usr/local/bin
  5. 次のコマンドを実行して、func がインストールされているかどうかを確認します。

    func version

    func バージョンに関する情報が返された場合、func はインストールされています。

ステップ 2: 関数の作成

Knative Functions は、基本的な関数を作成するために使用できるテンプレートを提供します。使用するプログラミング言語と呼び出し方法に基づいて、次のテンプレートを選択できます。次のテンプレートを使用すると、CloudEvent および HTTP リクエストを使用して関数を呼び出すことができます。

次の例は、Go テンプレートを使用して関数を作成する方法を示しています。

  1. 次のコマンドを実行して、関数を作成します。

    func create -l <language> <function-name>

    たとえば、Go で記述されたデモ関数を作成します。

    func create -l go hello

    予期される出力:

    Created go function in /usr/local/bin/hello
  2. hello ディレクトリで ls コマンドを実行して、作成されたプロジェクトディレクトリをクエリします。

    func.yaml  go.mod  handle.go  handle_test.go  README.md
  3. hello ディレクトリで次のコマンドを実行して、自動的に作成された func.yaml ファイルをクエリします。

    cat func.yaml

    予期される出力:

    specVersion: 0.35.0
    name: hello
    runtime: go
    created: 2023-12-13T06:48:45.419587147Z
  4. 関数のビルドとデプロイのパラメータをカスタマイズして、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 Functionsへのデプロイ

関数の作成後、デプロイできます。

  1. 次のコマンドを実行して、関数をデプロイします。

    デフォルトでは、deploy コマンドは、関数プロジェクトにちなんで名付けられた Knative サービスとして関数をデプロイします。プロジェクト名とレジストリ名は、関数のビルド時に完全なイメージアドレスを生成するために使用されます。

    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
  2. 次のコマンドを実行して、デプロイされた関数をクエリします。

    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 からの呼び出し

  1. hosts ファイルに次の構成を追加して、Knative サービスのドメイン名を Knative ゲートウェイの IP アドレスにポイントします。例:

    121.xx.xxx.xx hello.default.example.com # 121.xx.xxx.xx を実際の Knative ゲートウェイ IP アドレスに置き換えます。 hello.default.example.com を Knative サービスのドメイン名に置き換えます。
  2. 次のコマンドを実行して、関数を呼び出します。

    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 に送信され、関数が正常に呼び出されたことを示しています。

  3. 次のコマンドを実行して、クラスタ内のポッドをクエリします。

    kubectl get pod

    予期される出力:

    NAME                                      READY   STATUS    RESTARTS   AGE
    hello-00001-deployment-7b65fcdc4c-gfcbp   2/2     Running   0          34

    出力は、呼び出し後にポッドが作成されたことを示しています。

参考資料

Knative の使用時に発生する可能性のある一般的な問題とその解決策については、Knative に関する FAQ を参照してください。