ジョブの実行および更新

このチュートリアルでは、IBM Cloud® Code Engine コンソールを使用してバッチ・ジョブを実行します。

ジョブは、実行可能コードの1つ以上のインスタンスを並行して実行します。 HTTP 要求を処理するアプリケーションとは異なり、ジョブは一度実行したら終了するように設計されています。 ジョブを作成するときには、ジョブの実行時に毎回使用するワークロードの構成情報を指定できます。

開始前に

バッチ・ジョブの詳細については、 バッチ・ジョブのワークロード を参照してください。

Code Engine コンソールを使用するには、 Code Engine の概要ページにアクセスしてください。

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

ジョブの作成

icr.io/codeengine/helloworldイメージを使用してCode Engineジョブを作成します。 このジョブはHello from helloworld! I'm a task job!を印刷します。

  1. Code Engine の概要ページを開きます。
  2. 作成を開始 」を選択します。
  3. 選択可能なプロジェクトのリストからプロジェクトを選択します。 新規作成することもできます。 ジョブを作成するには、選択したプロジェクトがなければならないことに注意してください。
  4. **「ジョブ」**を選択します。
  5. ジョブの名前を入力し、コンテナー・イメージのicr.io/codeengine/helloworldを指定します。 ジョブには、プロジェクト内で固有の名前を使用します。 この例では、環境変数やランタイム設定のデフォルト値を変更する必要はありません。 この例で使用されるコードについて詳しくは、 helloworldを参照してください。
  6. 「作成」 をクリックします。

ジョブの実行

ジョブを作成してワークロードの構成情報を指定したら、ジョブを実行するための準備は完了です。 一部の構成情報は、オーバーライドすることができます。

ジョブを実行すると、イメージのタグを指定しない限り、参照されているコンテナー・イメージの最新バージョンがダウンロードされてデプロイされることに注意してください。 イメージにタグが指定されている場合、タグ付けされたイメージがジョブに使用されます。

  1. 「ジョブ」ページに移動します。

    1. Code Engine プロジェクトページ 」から、自分のプロジェクト名をクリックします。
    2. [ジョブ] をクリックし、[ ジョブ ] タブをクリックします。
    3. 実行したいジョブの名前をクリックしてください。
  2. ジョブ・ページで、ジョブの実行依頼をクリックして、現在の構成に基づくジョブを実行依頼します。

  3. 「ジョブの送信」ペインで、すべてのデフォルト値をそのまま受け入れ、「 ジョブの送信 」をもう一度クリックしてジョブを実行します。

「ジョブの送信」ペインでは、インスタンス、CPU、メモリ、ジョブの再試行回数、ジョブのタイムアウトなどのデフォルト設定値を確認し、必要に応じて変更することができます。 実行する並列ジョブ・インスタンスには、 アレイ・サイズまたはアレイ・インデックスのいずれかを指定できます。 「 配列サイズ 」には、このジョブで並列実行するインスタンス数を指定してください。 配列のインデックスについては、カスタムインデックスのリストをカンマ区切りで指定してください。 たとえば、 5 のインデックスを独自に設定してこのジョブを実行するには、 3,12-14,25 と指定します。 ジョブ配列サイズのカスタム値を指定 することもできます。これにより、自動的に注入された JOB_ARRAY_SIZE 環境変数の値が更新されます。 このジョブを実行依頼した後、「ジョブの詳細 (job details)」ページに、ジョブのインスタンスの状況が表示されます。 「ジョブの送信」ペインの「 Configuration 」セクションで、 配列のインデックスの 代わりに配列のサイズを指定した場合、 この情報は配列のインデックスとして表示されます。

ジョブの詳細情報へのアクセス

ジョブに関する詳細について説明します。

ジョブをサブミットすると、特定のジョブ実行の結果が「ジョブ実行の詳細」ページからコンソールに表示されます。 コンソールから、「ジョブ」ページからジョブおよび特定のジョブ実行の詳細を表示することもできます。

  • ジョブの詳細を表示するには、 「ジョブ」 タブをクリックし、作業するジョブの名前をクリックします。
  • 特定のジョブ実行の詳細を表示するには、 「ジョブ実行」 タブをクリックし、処理するジョブ実行の名前をクリックします。

ジョブのインスタンスのうち、実行に失敗したものがある場合は、以下の対処を行うことができます

  1. 失敗したインデックスの再実行 」をクリックして、失敗したインデックスに対してジョブを再度実行します。 [ジョブの送信] ペインで、 配列のインデックスを含む設定値を確認し、必要に応じて変更します。 「 配列インデックス 」セクションには、実行に失敗したジョブの実行インスタンスのインデックスが自動的に一覧表示されます。

一般的なジョブ実行インデックス・エラーのトラブルシューティングについては、「 ジョブ実行インデックスが失敗する理由を理解する 」を参照してください。

  1. ジョブを送信 」をクリックして、失敗したインデックスに対するジョブを送信してください。

ロギング機能を追加すると、ジョブ・ログを表示できるようになります。 詳しくは、コンソールからのジョブ・ログの表示を参照してください。

ジョブの更新

ジョブの設定を微調整することで、ジョブを管理できます。これには、コード、コンテナイメージ、コードの引数やコマンド、ランタイムインスタンスのリソース、環境変数の更新などが含まれます。

ジョブが「準備完了」状態になったら、そのジョブを更新できます。 前回作成したジョブを更新して、環境変数を更新することで出力される挨拶文と環境変数を変更してみましょう。 icr.io/codeengine/helloworld のサンプルジョブにリクエストが送信されると、そのジョブは環境変数 TARGET を読み取り、 "Hello ${TARGET}!" を出力します。 この環境変数が空の場合は、"Hello World!" が返されます。 この例で使用されているコードの詳細については、以下を参照してください。 helloworld.

  1. 「ジョブ」ページに移動します。

    1. Code Engine プロジェクトページ 」から、自分のプロジェクト名をクリックします。
    2. [ジョブ] をクリックし、[ ジョブ ] タブをクリックします。
    3. 更新したいジョブの名前をクリックしてください。
  2. 「構成」>「環境変数」 タブで、 「環境変数の追加」 をクリックします。 TARGET という名前のリテラル環境変数を、値に Sunshine を指定して追加します。 icr.io/codeengine/helloworld は、メッセージ Hello <value_of_TARGET>!>を出力します。

  3. 追加 」をクリックして、環境変数を追加してください。

  4. 「デプロイ」 をクリックします。

  5. **「ジョブの実行依頼」**をクリックします。

  6. 「ジョブの実行依頼 (Submit job)」ペインで、インスタンス、CPU、メモリー、ジョブの再試行回数、ジョブ・タイムアウトなどのデフォルトの構成値を確認し、必要に応じて変更します。 実行する並列ジョブ・インスタンスには、 アレイ・サイズまたはアレイ・インデックスのいずれかを指定できます。 「 配列サイズ 」には、このジョブで並列実行するインスタンス数を指定してください。 配列のインデックスについては、カスタムインデックスのリストをカンマ区切りで指定してください。 たとえば、 5 のインデックスを独自に設定してこのジョブを実行するには、 3,12-14,25 と指定します。 **「ジョブの実行依頼 (Submit job)」**をもう一度クリックして、ジョブを実行します。 「ジョブの詳細 (job details)」ページに、ジョブのインスタンスの状況が表示されます。

  7. コンソールからジョブログを確認する によるこのジョブの場合、ジョブの出力は Hello Sunshine! となります。

次のステップ

  • ジョブを作成した後、そのジョブを実行するためにジョブをサブミットします。 ジョブの実行を参照してください。 ジョブは複数回実行できます。

  • ジョブの実行後に、ジョブおよびジョブ実行の詳細を表示するには、アクセス・ジョブの詳細を参照してください。

  • ジョブが作成されたので、ジョブをイベント・ドリブンにすることを検討してください。 イベント・サブスクリプションを使用すると、定期的なスケジュールによってジョブをトリガーしたり、ファイルのアップロードなどのイベントに反応するようにジョブを設定したりすることができます。

  • ジョブの作成方法や以前の更新方法に関係なく、以下の任意の方法でジョブの更新および参照されるコードの更新を行うことができます。

    • Open Container Initiative(OCI)規格に準拠したコンテナイメージをお持ちの場合は、ジョブの作成(または更新)時に、コンテナレジストリの場所を指すイメージへの参照のみを指定すれば十分です。 パブリックレジストリ または プライベートレジストリ 内のイメージを使用してジョブを作成(または更新)し、ジョブの実行中にその参照先イメージにアクセスすることができます。

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

    • Git リポジトリーにあるソース・コードから開始する場合は、ソースからイメージをビルドし、単一操作を使用してジョブを作成 (または更新) する処理を Code Engine に任せることができます。 このシナリオでは、Code Engine はイメージを IBM Cloud® Container Registry にアップロードします。 詳しくは、リポジトリー・ソース・コードからのジョブの作成を参照してください。 イメージのビルドをさらに制御したい場合は、ジョブを作成 (または更新) してジョブを実行する前に、Code Engine を使用してイメージのビルドを選択することができます。

    • ローカル・ワークステーションにあるソース・コードから開始する場合は、単一 CLI コマンドを使用して、ソースからのイメージのビルドとジョブの作成を Code Engine に処理させることができます。 このシナリオでは、Code Engine はイメージを IBM Cloud® Container Registry にアップロードします。 詳しくは、CLI を使用したローカル・ソース・コードからのジョブの作成を参照してください。 イメージのビルドをさらに制御したい場合は、ジョブを作成 (または更新) してジョブを実行する前に、Code Engine を使用してイメージのビルドを選択することができます。

    例えば、ジョブのソースの開発を進化させながら、ローカル・ソースのビルドを Code Engine に処理させることができます。 その後、イメージが成熟すると、目的の特定のイメージを参照するようにジョブを更新できます。 必要に応じて、このプロセスを繰り返すことができます。

    更新されたジョブを実行すると、イメージにタグが指定されていない限り、参照されたコンテナー・イメージの最新バージョンがジョブ実行に使用されます。 イメージにタグが指定されている場合、タグ付けされたイメージがジョブ実行に使用されます。

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