このドキュメントでは、バッチジョブの作成の基本について説明します。スクリプトまたはコンテナ イメージに基づくジョブを作成、実行し、事前定義された変数とカスタム変数を使用する方法です。ジョブの作成と実行の詳細については、ジョブの作成と実行の概要をご覧ください。
始める前に
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
プロジェクトのバッチジョブ編集者(
-
ジョブを作成するたびに、ジョブに有効なネットワーク構成があることを確認します。
- ワークロードまたはプロジェクトに特定のネットワーキング要件がなく、プロジェクトのデフォルト ネットワークを変更していない場合は、操作は必要ありません。
- それ以外の場合は、ジョブの作成時にネットワーキングを構成する必要があります。基本的なジョブを作成する前に、ジョブにネットワークを構成する方法を確認します。これにより、ネットワーク要件を満たすように以下の例を変更できます。
-
ジョブを作成するたびに、ジョブに有効な VM オペレーティング システム(OS)環境があることを確認します。
- ワークロードまたはプロジェクトに特定の VM OS イメージまたはブートディスクの要件がない場合は、操作は必要ありません。
- それ以外の場合は、有効な VM OS 環境オプションを準備する必要があります。基本的なジョブを作成する前に、VM OS 環境のデフォルト構成を許可するか、VM OS 環境をカスタマイズする方法を学習して、要件を満たすように以下の例を変更します。
基本的なジョブを作成する
ジョブに指定できるすべてのフィールドについては、projects.locations.jobs
REST リソースのリファレンス ドキュメントをご覧ください。要するに、すべてがジョブの実行可能なスクリプトやコンテナである実行可能物を 1 つ以上実行する 1 つ以上のタスクの配列で、ジョブは構成されます。基本を網羅するため、このセクションでは、スクリプトまたはコンテナ イメージのいずれかである実行可能物を 1 つだけ使用して、サンプルジョブを作成する方法について説明します。
- バッチを使用してコンテナ イメージを実行するジョブを作成する場合は、コンテナ ジョブを作成するをご覧ください。
- それ以外で、コンテナ イメージを使用するかどうか不明な場合、またはコンテナに精通していない場合は、スクリプト ジョブの作成をおすすめします。
両方の種類のサンプルジョブには、4 つのタスクの配列を含むタスクグループがあります。各タスクは、メッセージとそのインデックスを標準出力と Cloud Logging に出力します。このジョブの定義では、並列処理を 2 に指定しています。これは、ジョブを 2 つの VM で実行して、一度に 2 つのタスクを実行できるようにする必要があることを示しています。
基本コンテナジョブを作成する
コンテナ イメージを選択または作成して、あらゆるコンピューティング環境から実行するジョブのコードと依存関係を指定できます。詳細については、コンテナ イメージの操作と VM インスタンスでコンテナを実行するをご覧ください。
基本コンテナジョブは、Google Cloud コンソール、gcloud CLI、Batch API、Go、Java、Node.js、Python、C++ を使用して作成できます。
Console
Google Cloud コンソールを使用して基本コンテナジョブを作成するには、次のようにします。
Google Cloud コンソールで、[ジョブリスト] ページに移動します。
[
作成] をクリックします。[バッチジョブを作成する] ページが開きます。左側のペインで、[ジョブの詳細] ページが選択されています。[ジョブの詳細] ページを構成します。
省略可: [ジョブ名] フィールドで、ジョブ名をカスタマイズします。
たとえば、「
example-basic-job
」と入力します。[タスクの詳細] セクションを構成します。
[新しい実行可能物] ウィンドウで、このジョブを実行するためのスクリプトまたはコンテナを少なくとも 1 つ追加します。
たとえば、1 つのコンテナを追加するには、次の操作を行います。
[コンテナ イメージの URL](デフォルト)を選択します。
[コンテナ イメージの URL] フィールドに、このジョブ内の各タスクで実行するコンテナ イメージの URL を入力します。
たとえば、
busybox
Docker コンテナ イメージを使用するには、次の URL を入力します。gcr.io/google-containers/busybox
(省略可)コンテナ イメージの
ENTRYPOINT
コマンドをオーバーライドするには、[エントリ ポイント] フィールドにコマンドを入力します。たとえば、次のように入力します。
/bin/sh
(省略可)コンテナ イメージの
CMD
コマンドをオーバーライドするには、次の手順を行います。[コンテナ イメージの CMD コマンドをオーバーライドする] チェックボックスをオンにします。テキスト ボックスが表示されます。
テキスト ボックスに 1 つ以上のコマンドを入力します。各コマンドは改行で区切ります。
たとえば、次のコマンドを入力します。
-c echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks.
[完了] をクリックします。
[タスク数] フィールドに、このジョブのタスク数を入力します。値は
1
とタスクグループあたりのタスク数の上限の間の整数である必要があります。たとえば、「
4
」と入力します。[並列処理] フィールドに、同時に実行するタスクの数を入力します。この数は、タスクの合計数よりも大きくすることはできません。また、
1
と ジョブあたりの並列タスクの上限の間の整数である必要があります。たとえば、「
2
」と入力します。
[リソースの仕様] ページを構成します。
左側のペインで [リソースの仕様] をクリックします。[リソースの仕様] ページが開きます。
[VM プロビジョニング モデル] セクションで、このジョブの VM のプロビジョニング モデルに次のいずれかのオプションを選択します。
ジョブがプリエンプションに耐えることができて、削減した VM が必要な場合は、[スポット] を選択します。
それ以外の場合は、[標準] を選択します。
たとえば、[標準](デフォルト)を選択します。
このジョブのロケーションを選択 :
[リージョン] フィールドでリージョンを選択します。
たとえば、
us-central1 (Iowa)
(デフォルト)を選択します。[ゾーン] フィールドで、次のいずれかを行います。
このジョブを特定のゾーンでのみ実行するように制限する場合は、ゾーンを選択します。
それ以外の場合は、[any] を選択します。
たとえば、[any](デフォルト)を選択します。
次のいずれかのマシン ファミリーを選択します。
一般的なワークロードの場合は、[汎用] をクリックします。
パフォーマンスが要求されるワークロードの場合は、[コンピューティング最適化] をクリックします。
メモリ使用量の多いワークロードの場合は、[メモリ最適化] をクリックします。
たとえば、[汎用](デフォルト)をクリックします。
[シリーズ] フィールドで、このジョブの VM のマシンシリーズを選択します。
たとえば、マシン ファミリーに [汎用] を選択した場合は、[E2](デフォルト)を選択します。
[マシンタイプ] フィールドで、このジョブの VM のマシンタイプを選択します。
たとえば、マシンシリーズに E2 を選択した場合は、e2-medium(2 つの vCPU、4 GB メモリ)(デフォルト)を選択します。
各タスクに必要な VM リソースの量を構成します。
[コア数] フィールドに、タスクあたりの vCPUs の数を入力します。
たとえば、「
1
」(デフォルト)と入力します。[メモリ] フィールドに、タスクあたりの RAM の量を GB 単位で入力します。
たとえば、「
0.5
」(デフォルト)と入力します。
省略可: ジョブ構成を確認するには、左側のペインで [プレビュー] をクリックします。
[作成] をクリックします。
[ジョブの詳細] ページに、作成したジョブが表示されます。
gcloud
gcloud CLI を使用して基本コンテナ ジョブを作成するには、次のようにします。
ジョブの構成の詳細を指定する JSON ファイルを作成します。たとえば、基本コンテナジョブを作成するには、次の内容の JSON ファイルを作成します。ジョブに指定できるすべてのフィールドの詳細については、
projects.locations.jobs
REST リソースのリファレンス ドキュメントをご覧ください。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { CONTAINER } } ], "computeResource": { "cpuMilli": CORES, "memoryMib": MEMORY }, "maxRetryCount": MAX_RETRY_COUNT, "maxRunDuration": "MAX_RUN_DURATION" }, "taskCount": TASK_COUNT, "parallelism": PARALLELISM } ] }
以下を置き換えます。
CONTAINER
: 各タスクが実行するコンテナ。コンテナは、少なくともimageUri
サブフィールドにイメージを指定する必要がありますが、追加のサブフィールドが必要になる場合もあります。詳細については、このセクションのcontainer
サブフィールドとコンテナジョブの例をご覧ください。CORES
: 省略可。ミリ CPU 単位で各タスクに割り当てるコア数(特に物理コアの半分を表す vCPUs)。cpuMilli
フィールドが指定されていない場合、値は2000
(2 個の vCPU)に設定されます。MEMORY
: 省略可。各タスクに割り当てるメモリ容量(MB 単位)。memoryMib
フィールドが指定されていない場合、値は2000
(2 GB)に設定されます。MAX_RETRY_COUNT
: 省略可。タスクの再試行の最大回数。値は0
と10
の間の整数にする必要があります。maxRetryCount
フィールドが指定されていない場合、値は0
に設定されます。これは、タスクを再試行しないということです。maxRetryCount
フィールドの詳細については、タスクの再試行を自動化するをご覧ください。MAX_RUN_DURATION
: 省略可。タスクが再試行または失敗するまでに実行できる最長時間。値は秒単位で、その後にs
が続く形式です。たとえば、1 時間の場合は3600s
です。maxRunDuration
フィールドが指定されていない場合、値はジョブの最大実行時間に設定されます。maxRunDuration
フィールドの詳細については、タイムアウトを使用してタスクと実行可能オブジェクトの実行時間を制限するをご覧ください。TASK_COUNT
: 省略可。ジョブのタスクの数。値は1
とタスクグループあたりのタスク数の上限の間の整数である必要があります。taskCount
フィールドが指定されていない場合、値は1
に設定されます。PARALLELISM
: 省略可。ジョブが同時に実行するタスクの数。この値は、タスクの数より大きくすることはできません。また、1
と ジョブあたりの並列タスクの上限の間の整数である必要があります。parallelism
フィールドが指定されていない場合、値は1
に設定されます。
gcloud batch jobs submit
コマンドを使用してジョブを作成します。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
たとえば、busybox
Docker コンテナ イメージを使用してタスクを実行するジョブを作成するには、次のようにします。
hello-world-container.json
という名前の現在のディレクトリに、次の内容の JSON ファイルを作成します。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." ] } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 }, "maxRetryCount": 2, "maxRunDuration": "3600s" }, "taskCount": 4, "parallelism": 2 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] }, "labels": { "department": "finance", "env": "testing" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
次のコマンドを実行します。
gcloud batch jobs submit example-container-job \ --location us-central1 \ --config hello-world-container.json
API
Batch API を使用して基本コンテナ ジョブを作成するには、jobs.create
メソッドを使用します。ジョブに指定できるすべてのフィールドの詳細については、projects.locations.jobs
REST リソースのリファレンス ドキュメントをご覧ください。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
CONTAINER
}
}
],
"computeResource": {
"cpuMilli": CORES,
"memoryMib": MEMORY
},
"maxRetryCount": MAX_RETRY_COUNT,
"maxRunDuration": "MAX_RUN_DURATION"
},
"taskCount": TASK_COUNT,
"parallelism": PARALLELISM
}
]
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。CONTAINER
: 各タスクが実行するコンテナ。コンテナは、少なくともimageUri
サブフィールドにイメージを指定する必要がありますが、追加のサブフィールドが必要になる場合もあります。詳細については、このセクションのcontainer
サブフィールドとコンテナジョブの例をご覧ください。CORES
: 省略可。単位はミリ CPU 単位で各タスクに割り当てるコア数(特に物理コアの半分を表す vCPUs)。cpuMilli
フィールドが指定されていない場合、値は2000
(2 個の vCPU)に設定されます。MEMORY
: 省略可。各タスクに割り当てるメモリ容量(MB 単位)。memoryMib
フィールドが指定されていない場合、値は2000
(2 GB)に設定されます。MAX_RETRY_COUNT
: 省略可。タスクの再試行の最大回数。値は0
と10
の間の整数にする必要があります。maxRetryCount
フィールドが指定されていない場合、値は0
に設定されます。これは、タスクを再試行しないということです。maxRetryCount
フィールドの詳細については、タスクの再試行を自動化するをご覧ください。MAX_RUN_DURATION
: 省略可。タスクが再試行または失敗するまでに実行できる最長時間。値は秒単位で、その後にs
が続く形式です。たとえば、1 時間の場合は3600s
です。maxRunDuration
フィールドが指定されていない場合、値はジョブの最大実行時間に設定されます。maxRunDuration
フィールドの詳細については、タイムアウトを使用してタスクと実行可能オブジェクトの実行時間を制限するをご覧ください。TASK_COUNT
: 省略可。ジョブのタスク数で、1
と タスクグループあたりのタスク数の上限の間の整数である必要があります。taskCount
フィールドが指定されていない場合、値は1
に設定されます。PARALLELISM
: 省略可。ジョブが同時に実行するタスクの数。この値は、タスクの数より大きくすることはできません。また、1
と ジョブあたりの並列タスクの上限の間の整数である必要があります。parallelism
フィールドが指定されていない場合、値は1
に設定されます。
たとえば、busybox
Docker コンテナ イメージを使用してタスクを実行するジョブを作成するには、次のリクエストを使用します。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-container-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
]
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
},
"maxRetryCount": 2,
"maxRunDuration": "3600s"
},
"taskCount": 4,
"parallelism": 2
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
},
"labels": {
"department": "finance",
"env": "testing"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
PROJECT_ID
はプロジェクトのプロジェクト ID です。
Go
Go
詳細については、Batch Go API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Java
詳細については、Batch Java API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Node.js
詳細については、Batch Node.js API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Python
詳細については、Batch Python API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
C++
C++
詳細については、Batch C++ API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
基本スクリプト ジョブを作成する
基本スクリプト ジョブは、Google Cloud コンソール、gcloud CLI、Batch API、Go、Java、Node.js、Python、C++ を使用して作成できます。
Console
Google Cloud コンソールを使用して基本スクリプト ジョブを作成するには、次のようにします。
Google Cloud コンソールで、[ジョブリスト] ページに移動します。
[
作成] をクリックします。[バッチジョブを作成する] ページが開きます。左側のペインで、[ジョブの詳細] ページが選択されています。[ジョブの詳細] ページを構成します。
省略可: [ジョブ名] フィールドで、ジョブ名をカスタマイズします。
たとえば、「
example-basic-job
」と入力します。[タスクの詳細] セクションを構成します。
[新しい実行可能物] ウィンドウで、このジョブを実行するためのスクリプトまたはコンテナを少なくとも 1 つ追加します。
たとえば、1 つのスクリプトを追加するには、次の操作を行います。
[スクリプト] を選択します。テキスト ボックスが表示されます。
テキスト ボックスに、このジョブの各タスクで実行するスクリプトを入力します。
たとえば、次のスクリプトを入力します。
echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks.
[完了] をクリックします。
[タスク数] フィールドに、このジョブのタスク数を入力します。値は
1
とタスクグループあたりのタスク数の上限の間の整数である必要があります。たとえば、「
4
」と入力します。[並列処理] フィールドに、同時に実行するタスクの数を入力します。この数は、タスクの合計数よりも大きくすることはできません。また、
1
と ジョブあたりの並列タスクの上限の間の整数である必要があります。たとえば、「
2
」と入力します。
[リソースの仕様] ページを構成します。
左側のペインで [リソースの仕様] をクリックします。[リソースの仕様] ページが開きます。
[VM プロビジョニング モデル] セクションで、このジョブの VM のプロビジョニング モデルに次のいずれかのオプションを選択します。
ジョブがプリエンプションに耐えることができて、削減した VM が必要な場合は、[スポット] を選択します。
それ以外の場合は、[標準] を選択します。
たとえば、[標準](デフォルト)を選択します。
このジョブのロケーションを選択 :
[リージョン] フィールドでリージョンを選択します。
たとえば、
us-central1 (Iowa)
(デフォルト)を選択します。[ゾーン] フィールドで、次のいずれかを行います。
このジョブを特定のゾーンでのみ実行するように制限する場合は、ゾーンを選択します。
それ以外の場合は、[any] を選択します。
たとえば、[any](デフォルト)を選択します。
次のいずれかのマシン ファミリーを選択します。
一般的なワークロードの場合は、[汎用] をクリックします。
パフォーマンスが要求されるワークロードの場合は、[コンピューティング最適化] をクリックします。
メモリ使用量の多いワークロードの場合は、[メモリ最適化] をクリックします。
たとえば、[汎用](デフォルト)をクリックします。
[シリーズ] フィールドで、このジョブの VM のマシンシリーズを選択します。
たとえば、マシン ファミリーに [汎用] を選択した場合は、[E2](デフォルト)を選択します。
[マシンタイプ] フィールドで、このジョブの VM のマシンタイプを選択します。
たとえば、マシンシリーズに E2 を選択した場合は、e2-medium(2 つの vCPU、4 GB メモリ)(デフォルト)を選択します。
各タスクに必要な VM リソースの量を構成します。
[コア数] フィールドに、タスクあたりの vCPUs の数を入力します。
たとえば、「
1
」(デフォルト)と入力します。[メモリ] フィールドに、タスクあたりの RAM の量を GB 単位で入力します。
たとえば、「
0.5
」(デフォルト)と入力します。
省略可: ジョブ構成を確認するには、左側のペインで [プレビュー] をクリックします。
[作成] をクリックします。
[ジョブの詳細] ページに、作成したジョブが表示されます。
gcloud
gcloud CLI を使用して基本スクリプト ジョブを作成するには、次のようにします。
ジョブの構成の詳細を指定する JSON ファイルを作成します。たとえば、基本スクリプト ジョブを作成するには、次の内容の JSON ファイルを作成します。ジョブに指定できるすべてのフィールドの詳細については、
projects.locations.jobs
REST リソースのリファレンス ドキュメントをご覧ください。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { SCRIPT } } ], "computeResource": { "cpuMilli": CORES, "memoryMib": MEMORY }, "maxRetryCount": MAX_RETRY_COUNT, "maxRunDuration": "MAX_RUN_DURATION" }, "taskCount": TASK_COUNT, "parallelism": PARALLELISM } ] }
以下を置き換えます。
SCRIPT
: 各タスクで実行するスクリプト。スクリプトは、text
サブフィールドを使用してテキストとして、またはfile
サブフィールドを使用してアクセス可能なファイルのパスとして定義する必要があります。詳細については、このセクションのscript
サブフィールドとスクリプト ジョブの例をご覧ください。CORES
: 省略可。ミリ CPU 単位で各タスクに割り当てるコア数(特に物理コアの半分を表す vCPUs)。cpuMilli
フィールドが指定されていない場合、値は2000
(2 個の vCPU)に設定されます。MEMORY
: 省略可。各タスクに割り当てるメモリ容量(MB 単位)。memoryMib
フィールドが指定されていない場合、値は2000
(2 GB)に設定されます。MAX_RETRY_COUNT
: 省略可。タスクの再試行の最大回数。値は0
と10
の間の整数にする必要があります。maxRetryCount
フィールドが指定されていない場合、値は0
に設定されます。これは、タスクを再試行しないということです。maxRetryCount
フィールドの詳細については、タスクの再試行を自動化するをご覧ください。MAX_RUN_DURATION
: 省略可。タスクが再試行または失敗するまでに実行できる最長時間。値は秒単位で、その後にs
が続く形式です。たとえば、1 時間の場合は3600s
です。maxRunDuration
フィールドが指定されていない場合、値はジョブの最大実行時間に設定されます。maxRunDuration
フィールドの詳細については、タイムアウトを使用してタスクと実行可能オブジェクトの実行時間を制限するをご覧ください。TASK_COUNT
: 省略可。ジョブのタスクの数。値は1
とタスクグループあたりのタスク数の上限の間の整数である必要があります。taskCount
フィールドが指定されていない場合、値は1
に設定されます。PARALLELISM
: 省略可。ジョブが同時に実行するタスクの数。この値は、タスクの数より大きくすることはできません。また、1
と ジョブあたりの並列タスクの上限の間の整数である必要があります。parallelism
フィールドが指定されていない場合、値は1
に設定されます。
gcloud batch jobs submit
コマンドを使用してジョブを作成します。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
たとえば、スクリプトを使用してタスクを実行するジョブを作成するには:
hello-world-script.json
という名前の現在のディレクトリに、次の内容の JSON ファイルを作成します。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 }, "maxRetryCount": 2, "maxRunDuration": "3600s" }, "taskCount": 4, "parallelism": 2 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] }, "labels": { "department": "finance", "env": "testing" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
次のコマンドを実行します。
gcloud batch jobs submit example-script-job \ --location us-central1 \ --config hello-world-script.json
API
Batch API を使用して基本スクリプト ジョブを作成するには、jobs.create
メソッドを使用します。ジョブに指定できるすべてのフィールドの詳細については、projects.locations.jobs
REST リソースのリファレンス ドキュメントをご覧ください。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
SCRIPT
}
}
],
"computeResource": {
"cpuMilli": CORES,
"memoryMib": MEMORY
},
"maxRetryCount": MAX_RETRY_COUNT,
"maxRunDuration": "MAX_RUN_DURATION"
},
"taskCount": TASK_COUNT,
"parallelism": PARALLELISM
}
]
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。SCRIPT
: 各タスクで実行するスクリプト。スクリプトは、text
サブフィールドを使用してテキストとして、またはfile
サブフィールドを使用してアクセス可能なファイルのパスとして定義する必要があります。詳細については、このセクションのscript
サブフィールドとスクリプト ジョブの例をご覧ください。CORES
: 省略可。単位はミリ CPU 単位で各タスクに割り当てるコア数(特に物理コアの半分を表す vCPUs)。cpuMilli
フィールドが指定されていない場合、値は2000
(2 個の vCPU)に設定されます。MEMORY
: 省略可。各タスクに割り当てるメモリ容量(MB 単位)。memoryMib
フィールドが指定されていない場合、値は2000
(2 GB)に設定されます。MAX_RETRY_COUNT
: 省略可。タスクの再試行の最大回数。値は0
と10
の間の整数にする必要があります。maxRetryCount
フィールドが指定されていない場合、値は0
に設定されます。これは、タスクを再試行しないということです。maxRetryCount
フィールドの詳細については、タスクの再試行を自動化するをご覧ください。MAX_RUN_DURATION
: 省略可。タスクが再試行または失敗するまでに実行できる最長時間。値は秒単位で、その後にs
が続く形式です。たとえば、1 時間の場合は3600s
です。maxRunDuration
フィールドが指定されていない場合、値はジョブの最大実行時間に設定されます。maxRunDuration
フィールドの詳細については、タイムアウトを使用してタスクと実行可能オブジェクトの実行時間を制限するをご覧ください。TASK_COUNT
: 省略可。ジョブのタスクの数。値は1
とタスクグループあたりのタスク数の上限の間の整数である必要があります。taskCount
フィールドが指定されていない場合、値は1
に設定されます。PARALLELISM
: 省略可。ジョブが同時に実行するタスクの数。この値は、タスクの数より大きくすることはできません。また、1
と ジョブあたりの並列タスクの上限の間の整数である必要があります。parallelism
フィールドが指定されていない場合、値は1
に設定されます。
たとえば、スクリプトを使用してタスクを実行するジョブを作成するには、次のリクエストを使用します。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-script-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
},
"maxRetryCount": 2,
"maxRunDuration": "3600s"
},
"taskCount": 4,
"parallelism": 2
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
},
"labels": {
"department": "finance",
"env": "testing"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
PROJECT_ID
はプロジェクトのプロジェクト ID です。
Go
Go
詳細については、Batch Go API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Java
詳細については、Batch Java API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Node.js
詳細については、Batch Node.js API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Python
詳細については、Batch Python API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
C++
C++
詳細については、Batch C++ API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
環境変数を使用する
ジョブを実行するコンテナ イメージまたはスクリプトを作成する際に、環境変数を使用します。すべてのバッチジョブに事前に定義されたあらゆる環境変数と、ジョブの作成中に定義したあらゆるカスタム環境変数を使用できます。
事前定義された環境変数を使用する
デフォルトでは、ジョブの実行可能物は、次の事前定義された環境変数を使用できます。
BATCH_TASK_COUNT
: このタスクグループのタスクの合計数。BATCH_TASK_INDEX
: タスクグループ内のこのタスクのインデックス番号。最初のタスクのインデックスは0
で、タスクを追加するごとにインデックスは増加します。BATCH_HOSTS_FILE
: このタスクグループで実行中のすべての VM インスタンスを一覧表示するファイルのパス。この環境変数を使用するには、requireHostsFile
フィールドをtrue
に設定する必要があります。BATCH_TASK_RETRY_ATTEMPT
: このタスクがすでに試行された回数。この値は、タスクの最初の試行では0
で、その後の再試行ごとに増加します。タスクで許可される再試行の合計数は、maxRetryCount
フィールドの値によって決まります。このフィールドが未定義の場合、値は0
です。再試行の詳細については、タスクの再試行を自動化するをご覧ください。
事前定義された環境変数を使用する方法の例については、このドキュメントの基本ジョブを作成するでの実行可能物な前例をご覧ください。
カスタム環境変数を定義して使用する
必要に応じて、ジョブに 1 つ以上のカスタム環境変数を定義できます。
各変数は、データの目的のスコープに基づいて特定の環境で定義します。
すべてのタスクに対して同じ値を持つ変数の場合は、次のいずれかを使用します。
変数にすべての実行可能物に対して同じ値がある場合は、すべての実行可能物の環境(
taskSpec
のenvironment
サブフィールド)を使用します。それ以外の場合は、変数にすべての実行可能物に対して個別の値がある場合、1 つ以上の特定の実行可能物の環境(
runnables[]
のenvironment
サブフィールド)を使用します。
それ以外の場合は、各タスクに対して個別の値がある array 変数を含む変数の場合、すべてのタスクに対する環境(
taskEnvironment
)を使用します。
選択した環境では、次のいずれかの環境サブフィールドのいずれかを使用して、各変数の名前と値を定義します。
ジョブ構成 JSON ファイルで変数を直接定義するには、このセクションで説明するように、標準変数(
variables
)サブフィールドを使用します。このオプションは、暗号化したくないデータにおすすめです。暗号化されたデータを使用して変数を定義するには、Secret Manager または Cloud Key Management Service を使用します。
既存の Secret Manager Secret の暗号化されたコンテンツを使用するには、Secret 変数(
secretVariables
)サブフィールドを使用します。ジョブで Secret を使用する方法の詳細については、Secret Manager でセンシティブ データを保護するをご覧ください。既存の Cloud Key Management Service 鍵の暗号化されたコンテンツを使用するには、暗号化された変数(
encryptedVariables
)サブフィールドを使用します。Cloud KMS 鍵の詳細については、Cloud Key Management Service のドキュメントをご覧ください。
gcloud CLI または Batch API を使用して、ジョブのカスタム環境変数を定義して使用できます。次の例では、標準変数を定義して使用する 2 つのジョブを作成する方法について説明します。最初のサンプルジョブには、特定の実行可能物の変数があります。2 つ目のジョブの例には、タスクごとに異なる値を持つ配列変数があります。
gcloud
各タスクが実行される実行可能ファイルに環境変数を渡すジョブを定義する場合は、実行可能環境変数を定義、使用するの例をご覧ください。それ以外で、タスクのインデックスに基づいて環境変数のリストを異なるタスクに渡すジョブを定義する場合は、タスクごとに環境変数を定義して使用する方法の例をご覧ください。
実行可能環境変数を定義、使用する
gcloud CLI を使用して環境変数を実行可能物に渡すジョブを作成するには、gcloud batch jobs submit
コマンドを使用し、ジョブの構成ファイルで環境変数を指定します。
たとえば、環境変数を定義するスクリプト ジョブを作成して、それを 3 つのタスクのスクリプトに渡すには、次のリクエストを行います。
hello-world-environment-variables.json
という名前の現在のディレクトリに、次の内容の JSON ファイルを作成します。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello ${VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." }, "environment": { "variables": { "VARIABLE_NAME": "VARIABLE_VALUE" } } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 } }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] } }
以下を置き換えます。
次のコマンドを実行します。
gcloud batch jobs submit example-environment-variables-job \ --location us-central1 \ --config hello-world-environment-variables.json
タスクごとの環境変数を定義して使用する
gcloud CLI を使用してタスク インデックスに基づいて環境変数をタスクに渡すジョブを作成するには、gcloud batch jobs submit
コマンドを使用してジョブの構成ファイル内で taskEnvironments
配列項目を指定します。
たとえば、一致する名前と異なる値を持つ 3 つの環境変数の配列を含むジョブを作成し、インデックスが配列内の環境変数のインデックスと一致するタスクのスクリプトに環境変数を渡すには
hello-world-task-environment-variables.json
という名前の現在のディレクトリに、次の内容の JSON ファイルを作成します。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello ${TASK_VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." }, } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 } }, "taskCount": 3, "taskEnvironments": [ { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_0" } }, { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_1" } }, { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_2" } } ] } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] } }
以下を置き換えます。
次のコマンドを実行します。
gcloud batch jobs submit example-task-environment-variables-job \ --location us-central1 \ --config hello-world-task-environment-variables.json
API
各タスクが実行される実行可能ファイルに環境変数を渡すジョブを定義する場合は、実行可能環境変数を定義、使用するの例をご覧ください。それ以外で、タスクのインデックスに基づいて環境変数のリストを異なるタスクに渡すジョブを定義する場合は、タスクごとに環境変数を定義して使用する方法の例をご覧ください。
実行可能環境変数を定義、使用する
Batch API を使用して環境変数を実行可能なジョブに渡すジョブを作成するには、gcloud batch jobs submit
コマンドを使用して、environment
フィールドに環境変数を指定します。
たとえば、環境変数を含むジョブを作成して、それを 3 つのタスクのスクリプトに渡すには、次のリクエストを行います。
POST https://batch.googleapis.com/v1/projects/<var>PROJECT_ID</var>/locations/us-central1/jobs?job_id=example-environment-variables-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello ${VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
"environment": {
"variables": {
"VARIABLE_NAME": "VARIABLE_VALUE"
}
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
}
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4"
}
}
]
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDVARIABLE_NAME
: 各タスクに渡される環境変数の名前。慣例により、環境変数名は大文字です。VARIABLE_VALUE
: 各タスクに渡される環境変数の値。
タスクごとの環境変数を定義して使用する
Batch API を使用してタスク インデックスに基づいて環境変数をタスクに渡すジョブを作成するには、jobs.create
メソッドを使用して、taskEnvironments
配列フィールドで環境変数を指定します。
たとえば、一致する名前と異なる値を持つ 3 つの環境変数の配列を含むジョブを作成し、インデックスに基づいて 3 つのタスクのスクリプトに環境変数を渡すには、次のリクエストを作成します。
POST https://batch.googleapis.com/v1/projects/<var>PROJECT_ID</var>/locations/us-central1/jobs?job_id=example-task-environment-variables-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello ${TASK_VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
}
},
"taskCount": 3,
"taskEnvironments": [
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_0"
}
},
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_1"
}
},
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_2"
}
}
]
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDTASK_VARIABLE_NAME
: インデックスが一致するタスクに渡される環境変数の名前。慣例により、環境変数名は大文字です。TASK_VARIABLE_VALUE_0
: 最初のタスクに渡される環境変数の値。BATCH_TASK_INDEX
は0
と等しい。TASK_VARIABLE_VALUE_1
:BATCH_TASK_INDEX
が1
と等しい 2 番目のタスクに渡される環境変数の値。TASK_VARIABLE_VALUE_2
:BATCH_TASK_INDEX
が2
と等しい 3 番目のタスクに渡される環境変数の値。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。