リポジトリ・ソースコードを使った関数ワークロードの作成

IBM Cloud® Code Engine コンソールまたはCLIを使用して、 Git リポジトリにあるソースコードから直接関数を作成できます。

コード・バンドルは、関数コードを表すファイルの集合です。 このコード・バンドルはランタイム・コンテナに注入される。 コードバンドルは Code Engine によって作成され、コンテナレジストリまたは関数と一緒にインラインに保存されます。 コードバンドルはOCI(Open Container Initiative)標準のコンテナイメージではない。

このシナリオでは、 Code Engine が Git リポジトリ・ソースからコード・バンドルをビルドし、そのコード・バンドルをコンテナ・レジストリに自動的にアップロードし、ビルドされたコード・バンドルを参照する関数を作成します。 必要なのは、関数の名前、 Git リポジトリへの URL、関数のランタイムだけである。 この場合、Code Engine が自動的に名前空間を管理します。 ただし、別のコンテナレジストリを使用したい場合は、そのコンテナレジストリ用のコードバンドルとレジストリシークレットを指定する必要があります。

イメージ・レジストリーにアクセスするために必要な許可については、イメージ・レジストリーの権限のセットアップを参照してください。

コンソールからリポジトリソースコードを使って関数ワークロードを作成する

コンソールからソースコード付きの関数を作成する。

  1. コンソールを開く Code Engine コンソールを開く。
  2. 作成を開始 」を選択します。
  3. 選択可能なプロジェクトのリストからプロジェクトを選択します。 新規作成することもできます。 関数を作成するにはプロジェクトを選択する必要があります。
  4. 機能 」を選択してください。
  5. 関数の名前を入力してください。例: myfunction。 関数名には、プロジェクト内で一意のものを使用してください。
  6. ファンクションコードのランタイムイメージを選択します。 詳細は ランタイムを 参照。
  7. ソースコードからコードバンドルをビルドするには、これを選択してください。 このオプションを選択すると、関数はソースコードから作成され、コンテナレジストリに保存される。
  8. ソースリポジトリを選択します(例: https://github.com/IBM/CodeEngine )。 サンプル・ソースを使用する場合、認証情報は必要ありませんので、 コード・リポジトリへのアクセスに None。 オプションでブランチ名を指定できます。 ブランチ名を指定せず、このフィールドを空のままにすると、Code Engineは指定されたリポジトリーのデフォルト・ブランチを自動的に使用します。 次へ をクリックします。
  9. ビルドの方式およびビルドのリソースを選択します。 ビルド・オプションについて詳しくは、ビルドの計画を参照してください。 **「次へ」**をクリックします。
  10. コンテナー・レジストリー・ロケーション (IBM Registry Dallas など) を選択して、ビルド出力のイメージを保管する場所を指定します。 プライベート・レジストリーである場合は、そのレジストリーへのアクセスをセットアップする必要があります。
  11. ビルド出力のイメージを保管する場所に関するレジストリー情報を指定します。 既存のレジストリ・シークレットを選択するか、新しいものを作成してください。 アカウント内のContainer Registryインスタンスにイメージを作成する場合は、Code Engine managed secretを選択して、Code Engineにシークレットを作成して管理させることができます。
  12. イメージの名前空間、名前、タグを選択します。 アカウント内の IBM Cloud Container Registry インスタンスにイメージをビルドする場合は、既存の名前空間を選択するか、Code Engine に名前空間を作成して管理させることができます。 その他のヘルプについては、 Help me specify the code bundleをクリックしてください。 詳しくは、コンテナー・レジストリーへのアクセスを参照してください。
  13. CPUとメモリの組み合わせスケールダウン遅延などの リソース情報を指定します。
  14. オプションで、 カスタム・ドメイン または 環境変数を 指定する。 これらのオプションは後で追加できる。
  15. 「作成」 をクリックします。
  16. 機能のステータスが「 Ready 」に変わったら、その機能をテストできます。 Test functionをクリックし、 Send requestをクリックする。 Webページでこの関数を開くには、「 Function URL 」をクリックしてください。
  17. エディター・ウィンドウでファンクション・コードを変更することもできます。 関数を再デプロイすると、コードはインラインで保存される。

関数を呼び出すには、[ 関数をテスト]、[ リクエストを送信 ]の順にクリックします。

CLIを使用したリポジトリソースコードによるファンクションワークロードの作成

コマンドを使って function create コマンドを使って、 Git リポジトリのソースからコードバンドルをビルドし、ビルドしたコードバンドルを参照する関数を作成します。 オプションの完全な一覧については、 ibmcloud ce function create コマンドを参照してください。

開始前に

次の例 function create コマンドは myfun 関数を作成し、 https://github.com/IBM/CodeEngine にあるコードを参照します。 このコマンドは自動的にコードバンドルをビルドし、あなたのアカウント IBM Cloud® Container Registry ネームスペースにアップロードします。 この関数は、このビルドされたコードバンドルを参照する。 --build-context-dirオプションを指定すると、ビルドはhelloworld-samples/function-codebundle-nodejsディレクトリー内のソースを使用します。

ibmcloud ce function create --name myfun --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs

出力例

Preparing function 'myfun' for build push...
Creating function 'myfun'...
Submitting build run 'myfun-run-230111-111212718'...
Creating image 'icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' to check the build run status.
Waiting for function 'myfun' to become ready...
Function 'myfun' is ready.
OK                                                
Run 'ibmcloud ce function get -n myfun' to see more details.
https://myfun.11a66hbi3rhz.us-south.codeengine.appdomain.cloud

コマンドの出力が function create コマンドの出力は、関数が作成される前のビルドの進行に関する情報を提供する。

この例では、ビルドされたコードバンドルが、 Container Registry の ce--abcde-4svg40kna19 ネームスペースにアップロードされます。

次の表は、この例で function create コマンドで使用されるオプションをまとめたものです。 このコマンドとそのオプションの詳細については、 ibmcloud ce function create コマンドを参照してください。

コマンドの説明
オプション 説明
--name 関数の名前。 プロジェクト内で固有の名前を使用します。 この値は必須です。
-名前は小文字で始まる必要があります。
-名前は小文字の英数字で終わる必要があります。
-名前は 63 文字以下でなければならず、文字、数字、およびハイフン (-) を含めることができます。
--build-source ソース・コードが含まれている Git リポジトリーの URL (例: https://github.com/IBM/CodeEngine)。
--build-context-dir コードを含むリポジトリ内のディレクトリ。 この値はオプションです。
--runtime その関数の実行時間。

以下の出力は、ビルドに関する情報を含む、この例の**function get**コマンドの結果を示しています。

出力例

Getting function 'myfun'
'...
OK
Name:          myfun  
Project Name:  sample  
Project ID:    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Age:           27m  
Created:       2023-06-27T21:07:26Z  
Visibility:    public  
URL:           https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud  
Internal URL:  http://myfun.13c66hbi3rhz.function.cluster.local  
Resources:    
  CPU:               0.25  
  Memory:            500M  
  Timeout:           60 seconds  
  Scale Down Delay:  1 seconds  
  Trusted profiles:  disabled  
Environment Variables:    
  Type     Name             Value  
  Literal  CE_API_BASE_URL  https://api.us-south.codeengine.cloud.ibm.com  
  Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
  Literal  CE_FUNCTION      myfun  
  Literal  CE_REGION        us-south  
  Literal  CE_SUBDOMAIN     13c66hbi3rhz  
  Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Build Information:    
  Build Run Name:     myfun-run-230111-111212718  
  Build Type:         git  
  Build Strategy:     codebundle-nodejs-22
  Timeout:            600  
  Source:             https://github.com/IBM/CodeEngine  
  Context Directory:  /helloworld-samples/function-codebundle-nodejs    
                      
  Build Run Status:   Succeeded  
  Build Run Reason:   All Steps have completed executing  
  Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' for details.  
Function Code:    
  Runtime:        nodejs-22
  Bundle Secret:  ce-auto-icr-us-south  
  Code Bundle:    cr://icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o
  Main:           main
Status:  Ready  
URL:     https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud

これで関数はリポジトリのソースコードから作成されました。 ibmcloud ce function update コマンドを使って関数を更新することができます。 --build-source この関数で使用するためにソースを更新したい場合は、 function update コマンドでxml-ph-0000@deepl.internalオプションを指定する必要があります。

関数をリポジトリのソースコードから、またはCLIを使って ローカルのソースから 作成する場合、結果のビルド実行はビルド設定に基づくものではありません。 完了したビルドランは最終的に自動的に削除される。 ビルド構成に基づかないビルド実行は、ビルド実行が成功した場合、1時間後に削除される。 ビルド実行が成功しなかった場合、このビルド実行は24時間後に削除される。 CLIで表示できるのは、このビルド実行に関する情報のみです。 このビルドの実行をコンソールで見ることはできない。

関数の依存関係を含める

さまざまなプログラミング言語で関数を作成できる。 関数のコードが複雑になってきたら、関数の依存関係としてコードモジュールを追加することができます。 各言語には、ファンクションコードで使用する独自のモジュールがあります。 例えば、 Node.js の依存関係は通常、既存の npm モジュールであり、 Python は Python パッケージを使用する。 これらの依存関係は、ソースコードと一緒にファイルに宣言して作成する必要があります

Node.js 関数のモジュールを含む

package.json ファイルを作成し、特定の Node.js モジュールへの依存を含む関数を作成する。 この場合、ソースコードもパッケージファイルも同じフォルダにある。

  1. main.js ファイルにコードを記述してソースコードを作成します。 例えば、以下のコード例を main.js というファイルにコピーする。

    /**
    * The `main` function is the entry-point into the function.
    * It has one optional argument, which carries all the
    * parameters the function was invoked with.
    */
    function main(params /* optional */) {
      // use third-party 'lorem-ipsum' package to generate random words
      const LoremIpsum = require("lorem-ipsum").LoremIpsum;
      const lorem = new LoremIpsum();
      // Since functions are invoked through http(s), we return an HTTP response.
      return {
        headers: { "Content-Type": "text/plain;charset=utf-8" },
        body: lorem.generateWords(10),
      };
    }
    // This step is necessary, if you gave your main function a different name.
    // We include it here for documentation purposes only.
    module.exports.main = main;
    
  2. あなたの関数に必要な依存関係を含む package.json。 先ほどのコード例では、 package.json

    {
      "name": "function",
      "version": "1.0.0",
      "main": "main.js",
      "dependencies" : {
    		    "lorem-ipsum" : "2.0.8"
     	}
    }
    
  3. Code Engine の関数としてファイルを作成する。 どちらのファイルもリポジトリからアクセスできなければならない。 プライベート・リポジトリにある場合は、 プライベート・コード・リポジトリへのアクセスを 作成し、その値を --build-git-repo-secret。 ファイルがmain以外のディレクトリにある場合は、 --build-context-dir オプションでそのディレクトリへのパスを指定してください。 以下の例では、 https://github.com/IBM/CodeEngine 公開リポジトリからファイルを取り込んでいる。

    ibmcloud ce fn create -n nodelorem -runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs/
    
  4. 提供された fn get コマンドを実行し、機能の詳細を確認する。

  5. ウェブ・ブラウザに URL を貼り付けて関数を呼び出す。 ブラウザは lorem ipsum の一節を表示する。

fn create ・コマンドとそのオプションの詳細については、 関数の作成を 参照のこと。

Python 関数のモジュールを含む

requirements.txt ファイルを作成し、特定の Python モジュールへの依存を含む関数を作成する。 この場合、ソースコードと要件ファイルは同じフォルダにあります。

  1. コードを __main__.py ファイルに保存して関数を作成します

    # use third-party 'lorem-ipsum' package to generate random words
    from lorem_text import lorem
    # The `main` function is the entry-point into the function.
    # It has one optional argument, which carries all the
    # parameters the function was invoked with.
    def main(params):
        words = 10
        # since functions are invoked through http(s), we return an HTTP response
        return {
          "headers": {
            "Content-Type": "text/plain;charset=utf-8",
        },
        "body": lorem.words(words),
    }
    def main(params):
         words = 10
         return {
              "headers": {
                  "Content-Type": "text/plain;charset=utf-8",
              },
              "body": lorem.words(words),
          }
    
  2. 関数に必要な依存関係を含む requirements.txt を作成します

    lorem-text
    
  3. Code Engine の関数としてファイルを作成する。 どちらのファイルもリポジトリからアクセスできなければならない。 プライベート・リポジトリにある場合は、 プライベート・コード・リポジトリへのアクセスを 作成し、その値を --build-git-repo-secret。 ファイルがmain以外のディレクトリにある場合は、 --build-context-dir オプションでそのディレクトリへのパスを指定してください。 以下の例では、 https://github.com/IBM/CodeEngine 公開リポジトリからファイルを取り込んでいる。

    ibmcloud ce fn create -n pylorem -runtime python --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-python/
    
  4. 提供された fn get コマンドを実行し、機能の詳細を確認する。

  5. ウェブ・ブラウザに URL を貼り付けて関数を呼び出す。 ブラウザは lorem ipsum の一節を表示する。

fn create ・コマンドとそのオプションの詳細については、 関数の作成を 参照のこと。

次のステップ

  • 関数が作成されたら、コンソールで Test functionをクリックするか、 URL。 function get コマンドで見つけることができます。

  • カスタム・ドメイン・マッピングを 作成し、関数に割り当てることができます。

  • ファンクションが作成され、デプロイされた後、コンソールから、あるいは ibmcloud ce function update コマンドを使って更新することができます。 --build-source この関数で使用するためにソースを更新したい場合は、 function update コマンドでxml-ph-0000@deepl.internalオプションを指定する必要があります。

関数の作成後、その関数や参照されているコードは、関数の作成方法や過去の更新方法にかかわらず、以下のいずれかの方法で更新できます

  • 既存のコード・バンドルがある場合は、アプリをデプロイするときに、コンテナ・レジストリの場所を指すイメージへの参照だけを提供する必要がある。 詳細については、 既存のコードバンドルから関数ワークロードを作成するを 参照してください。

    コマンドを使用して関数を作成し function create コマンドを使用して関数を作成し、 --build-source オプションを指定してローカルまたはリポジトリソースからコードバンドルをビルドした場合、関数を変更して別のコードバンドルを指すようにするには、まず関数からビルドの関連付けを削除する必要があります。 例えば、 ibmcloud ce function update -n FUN_NAME --build-clear を実行する。 関数からビルドの関連付けを削除した後、関数を更新して別の画像を参照することができます。

  • Git リポジトリにあるソースコードから作業を始める場合、 Code Engine にソースからコードバンドルをビルドさせ、 1回の操作で関数を作成するように設定することもできます。 このシナリオでは、 Code Engine がコードバンドルを IBM Cloud® Container Registry にアップロードします。 詳しくは、 リポジトリのソースコードから関数を作成するを ご覧ください。

  • ローカル・ワークステーションにあるソース・コードから始める場合、 Code Engine、ソースからコード・バンドルをビルドし、CLIコマンド 1つで関数を作成することができます。 このシナリオでは、 Code Engine があなたのソースコードとコードバンドルを IBM Cloud® Container Registry にアップロードします。

    たとえば、その関数のソースコードの開発を進めながら、 Code Engine を実行してローカルのソースコードをビルドするように設定することもできます。 そして、コードバンドルが成熟した後、あなたが望む特定のコードバンドルを参照するように関数を更新することができます。 必要に応じて、このプロセスを繰り返すことができます。

コード・サンプルがさらに必要ですか? Samples for IBM Cloud Code Engine GitHub repoをチェックしてください。