IBM Cloud Docs
ローカル・ソースからの関数の実行

ローカル・ソースからの関数の実行

このチュートリアルでは、ローカル・システム上のコードから Code Engine CLI を使用して関数を実行します。

ファンクションとは、 HTTP リクエストによって呼び出されるとタスクを実行する、ステートレスなコードの断片です。 IBM Code Engine 機能により、スケーラブルでサーバーレスな方法でビジネスロジックを実行できます。 IBM Code Engine 機能は、低レイテンシと迅速なスケールアウトのシナリオをサポートする最適化された実行環境を提供します。 お客様の関数コードは、特定の Node.js または Python バージョンを含むマネージドランタイムに書き込むことができます。

コード・バンドルは、機能コードを表すファイルの集合です。 このコード・バンドルは、ランタイム・コンテナーに注入されます。 コード・バンドルは Code Engine によって作成され、コンテナー・レジストリーに保管されるか、関数とともにインラインで保管されます。 コード・バンドルは、Open Container Initiative (OCI) 標準コンテナー・イメージではありません。

開始前に

すべてのCode Engineユーザーは、従量課金 (PAYG) アカウントを持っている必要があります。 チュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、使用量の見積もりに基づいてコスト見積もりを生成してください。 詳しくは、 Code Engine 価格設定 を参照してください。

環境を設定する

  1. IBM Cloud CLI にログインします。

    ibmcloud login -r us-south
    
  2. 以下のコマンドを実行して、リソース・グループをターゲットに設定します。 リソースグループの一覧を表示するには、 ibmcloud resource groups

    ibmcloud target -g <resource_group>
    

    出力例

    Targeted resource group default
    
  3. sampleという名前のプロジェクトをCode Engineに作成します。

    ibmcloud ce project create --name sample
    

    出力例

    Creating project 'sample'...
    ID for project 'sample' is 'abcdabcd-abcd-abcd-abcd-abcd12e3456f7'.
    Waiting for project 'sample' to be active...
    Now selecting project 'sample'.
    OK
    

    プロジェクトがコンテキスト用にも選択されていることに注意してください。したがって、後続のすべてのアプリケーション関連コマンドは、この新規 sample プロジェクトのスコープ内にあります。

  4. コマンド・オプションを表示して、機能コマンドについてよく理解します。

    ibmcloud ce fn --help
    

ソース・コードの作成

以下のサンプル・コードを使用して、 funhello.js という名前の Node.js ソース・ファイルを作成します。

  function main(params) {
      var msg = 'You did not tell me who you are.';
      if (params.name) {
          msg = `Hello, ${params.name}!`
       } else {
          msg = `Hello, Functions on CodeEngine!`
      }
      return {
          headers: { 'Content-Type': 'text/html; charset=utf-8' },
          body: `<html><body><h3>${msg}</h3></body></html>`
       }
  }

  module.exports.main = main;

関数の作成

funhello.js ファイルから関数を作成します。

ibmcloud ce fn create --name funhello --runtime nodejs-20 --build-source funhello.js

コマンド出力

Preparing function 'funhello' for build push...
Creating function 'funhello'...
Packaging files to upload from source path 'hello.js'...
Submitting build run 'funhello-run-230623-090738611'...
Creating image 'private.stg.icr.io/ce--8a6a0-13c66hbi3rhz/function-funhello:230623-1407-s8kzr'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n funhello-run-230623-090738611' to check the build run status.
Waiting for function 'funhello' to become ready...
Function 'funhello' is ready.
OK
Run 'ibmcloud ce function get -n funhello' to see more details.

https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud

関数が呼び出された後、 URL が利用可能になります。次のコマンドを使用して、関数に関する情報を検索します。

ibmcloud ce fn get -n funhello

前の**function create**コマンドについて詳しく見てみましょう。 このコマンドの出力は、 function create コマンドの出力は、関数が作成およびデプロイされる前のビルド実行の進行状況に関する情報を提供します。

  1. Code Engine は、ソース・コードから関数を作成する要求を受け取ります。
  2. Code Engine 選択したプロジェクトに関連付けられている IAM サービス ID および API キーをチェックします。 このサービスIDは、 IBM Cloud Container Registry への読み書き権限が必要です。 サービス ID が存在しない場合は、Code Engine によって作成されます。 このサービス ID は、同じプロジェクトから実行される後続の Code Engine ビルド依頼に使用されることに注意してください。
  3. この例では、ローカルソース(--build-source )からコードをビルドします。ソースコード(hello.js )はコードバンドルファイルにパックされ、お客様のアカウント内の IBM Cloud Container Registry インスタンス内の管理ネームスペースにアップロードされます。 ローカル・ビルドのターゲットにできるのは IBM Cloud Container Registry のみであることに注意してください。 IBM Container Registry に関する詳細情報(クォータ制限やアクセスに関する情報を含む)については 、「 IBM Cloud Container Registry の使い方」 を参照してください。
  4. Code Engine は、ソース・コードをコード・バンドルにビルドします。 ソースコードバンドルは、ソースアーカイブファイルと同じ名前空間で作成されます。
  5. ビルドが完了すると、関数がデプロイされます。 URL より、ご提供いただいた機能にアクセスできます。

関数の呼び出し

URL をブラウザウィンドウに貼り付けて、その機能を有効にします。 コマンド行で curl コマンドを使用することもできます。

Hello, Functions on CodeEngine!

Code Engine 関数が正常に作成され、呼び出されました。

関数のパラメーターを指定してください

URL の末尾に ?name=Sunshine を追加し、ブラウザウィンドウに貼り付けて、パラメータ付きで URL 関数を呼び出します。

https://funhello.13c66hbi3rhz.us-south.codeengine.appdomain.cloud?name=Sunshine
Hello, Sunshine!

クリーンアップ

以下のコマンドを使用して、関数を削除できます。

ibmcloud ce fn delete -n funhello

関数を削除すると、関連するビルドファイルも削除されます。

最後に、 IBM Cloud Container Registry からビルドが作成したコードバンドルを削除します。

  1. 案内する Container Registry>画像の中にIBM Cloudコンソール。
  2. 地域を選択してください位置ログイン時に選択したドロップダウンメニューIBM Cloud 。
  3. 関数名を検索して、関数に関連付けられている画像(コードバンドルを表す)を見つけます(たとえば、funhello )。
  4. 画像を選択します(例:au.icr.io/ce--27b98-1jp42v8n9n3o/function-funhello@sha256:b53683f47e0e548b4fa1d3fc93404399fdc4008b54ccecc0852794ea88d01538 )を選択し、消去省略記号 (...) メニューから選択します。

次のステップ

  • 関数が作成された後、コンソールで 「Test function」 をクリックするか、コマンドを使用して関数の URL を見つけることで、関数にアクセスできます。 function get コマンドを使用して、

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

  • 機能を作成してデプロイした後、コンソールから、または ibmcloud ce function update コマンドを使用して、必要に応じて機能を更新できます。 関数で使用するソースを更新したい場合は、 --build-source オプションをコマンドで指定する必要があります。 function update コマンドで指定する必要があります。

関数が作成された後、関数の作成方法や以前の更新方法に関わらず、 以下のいずれかの方法を使用して関数および参照コードを更新することができます

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

    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 コマンドで関数を作成することができます。 このシナリオでは、 Code Engine がソース・コードとコード・バンドルを IBM Cloud® Container Registryにアップロードします。

    例えば、 Code Engine でローカルソースを構築しながら、機能ソースの開発を進めるという選択肢もあります。 その後、コード・バンドルの成熟後に、必要な特定のコード・バンドルを参照するように関数を更新できます。 必要に応じて、このプロセスを繰り返すことができます。

コード・サンプルがさらに必要ですか? IBM Cloud Code Engine GitHub repoをチェックアウトします。