既存のコード・バンドルからの関数ワークロードの作成

IBM Cloud® Container Registry にあるコードバンドルを使用して、 Code Engine 関数を作成してください。 コンソールから、またはCLIを使用して関数を作成できます。

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

Container Registry 以外の場所からコードバンドルを取得することはできません。

開始前に

プロジェクトのすべてのユーザーが、手動でレジストリシークレットを作成することなく、 Container Registry に画像を保存・アクセスできるようにプロジェクトを設定したいとお考えですか? 十分な権限があれば、ロケーション (地域) ごとにこのデフォルトのレジストリー・アクセス権限を構成できます。 これらのアクションを実行するための十分な権限がない場合は、このページを使用して必要な権限を理解することができます。 プロジェクト全体の設定の構成 を参照してください。

コンソールを使用して Container Registry でコード・バンドルを参照する関数を作成する

Code Engine コンソールを使用して、既存のコードバンドルを利用する関数を作成します。

Code Engine は、 Container Registryからコード・バンドルを自動的にプルできます。

  1. Code Engine コンソールを開きます。
  2. 作成を開始 」を選択します。
  3. 選択可能なプロジェクトのリストからプロジェクトを選択します。 新規作成することもできます。 関数を作成するプロジェクトを選択する必要があります。
  4. 機能 」を選択してください。
  5. 関数の名前を入力してください。例: myfunction。 関数名には、プロジェクト内で一意のものを使用してください。
  6. 機能コードの 「ランタイム・イメージ」 を選択します。 詳しくは、 ランタイム を参照してください。
  7. 「既存のコード・バンドルを使用」 を選択します。
  8. コード・バンドルの場所を registry/namespace/repository:tag の形式で指定します。
  9. コード・バンドルがアカウント内またはパブリック・レジストリー内にある場合は、レジストリー・シークレットを指定する必要はありません。 コード・バンドルが専用レジストリーにある場合は、レジストリー・シークレットを追加する必要があります。 追加のヘルプについては、 「コード・バンドルの指定方法」 をクリックしてください。 詳しくは、コンテナー・レジストリーへのアクセスを参照してください。
  10. CPU とメモリーの組み合わせスケールダウン遅延 などのリソース情報を指定します。
  11. オプションで、 カスタム・ドメイン または 環境変数 を指定します。
  12. 「作成」 をクリックします。
  13. 機能のステータスが「 Ready 」に変わったら、その機能をテストできます。 「テスト機能」 をクリックし、 「要求の送信」 をクリックします。 Webページでこの関数を開くには、「 Function URL 」をクリックしてください。

CLI を使用した既存のコード・バンドルでの関数のデプロイ

CLI を使用して、 IBM Cloud® Container Registry に保存されているコードバンドルを利用する関数を作成します。その際、 ibmcloud ce fn create コマンドを使用して、xml-ph-0000@deepl.internal に保存されているコードバンドルを利用する関数を作成してください。 オプションの完全な一覧については、 ibmcloud ce fn create コマンドを参照してください。

開始前に

CLI を使用したパブリック・レジストリーからの関数のデプロイ

既存のコード・バンドルがアカウントまたはパブリック・レジストリーにある場合は、 ibmcloud ce fn create コマンドを使用できます。

例えば、以下のコマンドを実行して、パブリック・レジストリーから既存のコード・バンドルをプルし、関数を作成します。

ibmcloud ce fn create --name myhellofun --code-bundle icr.io/codeengine/samples/function-nodejs-codebundle --runtime nodejs

提供されている fn get コマンドを実行して、 URL を見つけてください。 その後、 curl コマンドを使用して、その URL を呼び出すことができます。

既存のコード・バンドルからの出力例。

<html><body><h3>Hello, Functions on CodeEngine!</h3></body></html>

CLI を使用したプライベート・レジストリーからの関数のデプロイ

専用レジストリーから既存のコード・バンドルにアクセスするには、レジストリーへのアクセスをセットアップし、レジストリー・シークレットを作成し、 ibmcloud ce fn create コマンドの実行時にそのシークレットを指定する必要があります。

  1. Container Registry にアクセスするには、IAM API キーを作成します。 CLI で IBM Cloud IAM API キーを作成するには、iam api-key-create コマンドを実行します。 たとえば、 cliapikey という名前の API キーを作成し、説明に My CLI API key を指定して、 key_file という名前のファイルに保存するには、次のコマンドを実行します

    ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
    

    キーをファイルに保存しないことを選択した場合は、作成時に表示される API キーを記録する必要があります。 後で取得することはできません。

  2. API キーを作成した後、 Code Engineに対するレジストリー・シークレットを作成します。 レジストリー・シークレットを作成するには、 ibmcloud ce secret create --format registry コマンドを使用します。 たとえば、次のコマンドを実行すると、「 myregistry 」という名前の Container Registry インスタンスへのレジストリアクセスが作成されます。 例のコマンドでは --server オプションと --username オプションが指定されていますが、サーバーが --server の場合は us.icr.io オプションのデフォルトは --username で、iamapikey オプションはデフォルトで us.icr.io になることに注意してください。

    ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password APIKEY
    

    出力例

    Creating registry secret 'myregistry'...
    OK
    
  3. 関数を作成し、 Container Registryのプライベート・レジストリーでコード・バンドルを参照します。 たとえば、 ibmcloud ce fn create コマンドを使用して、 myregistry のアクセス情報を利用して icr.io/codeengine/samples/function-nodejs-codebundle を参照する myhellofun 関数を作成します。

    ibmcloud ce fn create --name myhellofun --code-bundle icr.io/NAMESPACE/REGISTRY:TAG --registry-secret myregistry
    

    この関数のコードバンドルの名前は、 REGISTRY/NAMESPACE/REGISTRY:TAG という形式になります。ここで、 REGISTRY および TAG は省略可能です。 REGISTRY が指定されていない場合、デフォルトは icr.io となります。 TAG を指定しない場合、そのデフォルトは latest です。

  4. 関数が作成されると、それを呼び出すことができます。 関数の URL を求めるには、提供されている ibmcloud ce fn get コマンドを実行してください。 その後、 curl コマンドを使用して、その URL を呼び出すことができます。

次のステップ

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

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

コード・サンプルがさらに必要ですか? 「 IBM Cloud Code Engine 」のサンプルについては、 GitHub リポジトリをご覧ください。