このドキュメントでは、ラベルを使用して Batch リソースを整理する方法について説明します。
ラベルは、リソースに適用され、リソースをグループ化して記述する Key-Value ペアです。Batch には、リソースに自動的に適用される事前定義されたラベルと、ジョブの作成時に定義して適用できるカスタムラベルがあります。
ラベルを使用すると、リソースリストと Cloud Billing レポートの結果をフィルタできます。たとえば、ラベルを使用すると、次のことができます。
プロジェクトのジョブのリストを明確にして整理します。
ラベルを使用して、指定されたコンテナまたはスクリプトのタイプを記述し、ジョブの実行可能ファイルを区別します。
Batch または特定のジョブによって作成されたリソースの Cloud Billing レポートをフィルタリングして、費用を分析します。
ラベルの詳細については、Compute Engine のドキュメントでラベルをご覧ください。
準備
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
プロジェクトのバッチジョブ編集者(
制限事項
Compute Engine のドキュメントで指定されたラベルの要件に加えて、Batch ジョブとそのリソースにラベルを適用するには、次の制限があります。
Batch では、Batchを使用して作成され、以下のタイプのリソースのラベルのみがサポートされます:
ジョブ
実行可能ファイル
ジョブのグラフィック プロセッシング ユニット(GPU)(ある場合)
ジョブの永続ディスク(ブートディスクとストレージ ボリューム)
ジョブの仮想マシン(VM)インスタンス
Batch が自動的にジョブに適用する事前定義されたラベルを考慮した後、次の量のカスタムラベルを定義できます。
ジョブとそのランナブルに適用するカスタムラベルは最大 63 個定義できます。
ジョブ用に作成された各 GPU、永続ディスク、VM に適用するカスタムラベルは最大 61 個定義できます。
Batch では、一意の名前を持つカスタムラベルの定義のみがサポートされています。結果として次のようになります。
事前定義済みのラベルをオーバーライドしようとすると、エラーが発生します。
重複するカスタムラベルを定義すると、既存のカスタムラベルがオーバーライドされます。
Batch では、ジョブの作成時にのみラベルの定義がサポートされています。
ジョブと実行可能ファイルのラベルを追加、更新、削除することはできません。
Compute Engine を使用して、ジョブ用に作成された永続ディスクと VM のラベルを追加、更新、削除することはできますが、おすすめしません。ジョブのリソースが存在する期間を正確に予測することはできず、変更が Batch で正しく機能しない可能性があります。
ラベルを使用してジョブのリストをフィルタするには、gcloud CLI または Batch API を使用してジョブのリストを表示する必要があります。
定義済みのラベル
各事前定義ラベルには、batch-
接頭辞で始まるキーがあります。デフォルトでは、Batch は次の事前定義ラベルを自動的に適用します。
作成するジョブごとに、次の操作を行います。
batch-job-id
: このラベルの値は、ジョブの名前に設定されます。
ジョブ用に作成された各 GPU、永続ディスク、VM に適用されます。
batch-job-id
: このラベルの値は、ジョブの名前に設定されます。batch-job-uid
: このラベルの値は、ジョブの一意の識別子(UID)に設定されます。batch-node
: このラベルの値は null です。ジョブ用に作成されたすべての GPU、永続ディスク、VM をグループ化します。たとえば、Cloud 課金レポートを表示して、Batch によって作成されたすべての GPU、永続ディスク、VM の費用を特定する場合は、このラベルを使用します。
カスタムラベルを定義する
必要に応じて、ジョブの作成時に 1 つ以上のカスタムラベルを定義できます。カスタムラベルは、新しい鍵またはプロジェクトですでに使用している鍵で定義できます。カスタムラベルを定義するには、ラベルの目的に基づいて、このドキュメントの次のいずれかの方法を選択します。
-
このセクションでは、1 つ以上のカスタムラベルをジョブと、ジョブ用に作成された各 GPU、永続ディスク、VM に適用する方法について説明します。ジョブを作成した後に、これらのラベルを使用して、Cloud 請求レポートとプロジェクトのジョブ、永続ディスク、VM のリストにフィルタを適用できます。
-
このセクションでは、1 つ以上のカスタムラベルをジョブに適用する方法について説明します。ジョブを作成した後に、これらのラベルを使用してジョブのプロジェクト リストをフィルタリングできます。
-
このセクションでは、ジョブの 1 つ以上のランナブルに 1 つ以上のカスタムラベルを適用する方法について説明します。ジョブを作成した後に、これらのラベルを使用してジョブのプロジェクト リストをフィルタリングできます。
ジョブとそのリソースのカスタムラベルを定義する
ジョブの割り当てポリシーの labels
フィールドで定義されたラベルが、ジョブおよびジョブ用に作成された各 GPU(存在する場合)、永続ディスク(すべてのブートディスクと任意の新しいストレージ ボリューム)、および VM に適用されます。
gcloud CLI または Batch API を使用してジョブを作成するときに、ジョブとそのリソースのラベルを定義できます。
gcloud
たとえば、ジョブおよびジョブ用に作成されたリソースに適用される 2 つのカスタムラベルを定義する基本的なコンテナジョブを us-central1
で作成するには、以下の手順に沿って操作します:
ジョブの構成の詳細と
allocationPolicy.labels
フィールドを指定する JSON ファイルを作成します。{ "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ], "labels": { "VM_LABEL_NAME1": "VM_LABEL_VALUE1", "VM_LABEL_NAME2": "VM_LABEL_VALUE2" } }, "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world!" ] } } ] } } ] }
以下を置き換えます。
VM_LABEL_NAME1
: ジョブ用に作成された VM に適用する最初のラベルの名前。VM_LABEL_VALUE1
: ジョブ用に作成された VM に適用する最初のラベルの値。VM_LABEL_NAME2
: ジョブ用に作成された VM に適用する 2 番目のラベルの名前。VM_LABEL_VALUE2
: ジョブ用に作成された VM に適用する 2 番目のラベルの値。
gcloud batch jobs submit
コマンドを使用して、us-central1
にジョブを作成します。gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
JSON_CONFIGURATION_FILE
は、前の手順で作成したジョブの構成の詳細を含む JSON ファイルのパスに置き換えます。
API
ジョブおよびジョブ用に作成されたリソースに適用される 2 つのカスタムラベルを定義する基本的なコンテナジョブを us-central1
で作成するには、jobs.create
メソッド に POST
リクエストを行い、allocationPolicy.labels
フィールドを指定します。
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4"
}
}
],
"labels": {
"VM_LABEL_NAME1": "VM_LABEL_VALUE1",
"VM_LABEL_NAME2": "VM_LABEL_VALUE2"
}
},
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello world!"
]
}
}
]
}
}
]
}
以下を置き換えます。
VM_LABEL_NAME1
: ジョブ用に作成された VM に適用する最初のラベルの名前。VM_LABEL_VALUE1
: ジョブ用に作成された VM に適用する最初のラベルの値。VM_LABEL_NAME2
: ジョブ用に作成された VM に適用する 2 番目のラベルの名前。VM_LABEL_VALUE2
: ジョブ用に作成された VM に適用する 2 番目のラベルの値。
Java
Node.js
Python
ジョブのカスタムラベルを定義する
ジョブの labels
フィールドで定義されたラベルは、ジョブにのみ適用されます。
gcloud CLI または Batch API を使用してジョブを作成するときに、ジョブのラベルを定義できます。
gcloud
たとえば、ジョブ自体に適用される 2 つのカスタムラベルを定義する基本的なコンテナジョブを us-central1
に作成するには、次のようにします。
ジョブの構成の詳細と
labels
フィールドを指定する JSON ファイルを作成します。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello World!" ] } } ] } } ], "labels": { "JOB_LABEL_NAME1": "JOB_LABEL_VALUE1", "JOB_LABEL_NAME2": "JOB_LABEL_VALUE2" } }
以下を置き換えます。
JOB_LABEL_NAME1
: ジョブに適用する最初のラベルの名前。JOB_LABEL_VALUE1
: ジョブに適用する最初のラベルの値。JOB_LABEL_NAME2
: ジョブに適用する 2 番目のラベルの名前。JOB_LABEL_VALUE2
: ジョブに適用する 2 番目のラベルの値。
次のフラグを指定して
gcloud batch jobs submit
コマンドを使用して、us-central1
にジョブを作成します。gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
JSON_CONFIGURATION_FILE
は、前の手順で作成したジョブの構成の詳細を含む JSON ファイルのパスに置き換えます。
API
たとえば、ジョブ自体に適用される 2 つのカスタムラベルを定義するコンテナジョブを us-central1
に作成するには、jobs.create
メソッド に POST
リクエストを行い、labels
フィールドを指定します。
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello World!"
]
}
}
]
}
}
],
"labels": {
"JOB_LABEL_NAME1": "JOB_LABEL_VALUE1",
"JOB_LABEL_NAME2": "JOB_LABEL_VALUE2"
}
}
以下を置き換えます。
JOB_LABEL_NAME1
: ジョブに適用する最初のラベルの名前。JOB_LABEL_VALUE1
: ジョブに適用する最初のラベルの値。JOB_LABEL_NAME2
: ジョブに適用する 2 番目のラベルの名前。JOB_LABEL_VALUE2
: ジョブに適用する 2 番目のラベルの値。
Java
Node.js
Python
実行可能ファイルのカスタムラベルを定義する
実行可能ファイルの labels
フィールドで定義されたラベルは、その実行可能ファイルにのみ適用されます。
gcloud CLI または Batch API を使用してジョブを作成するときに、1 つ以上のランナブルのラベルを定義できます。
gcloud
たとえば、2 つのジョブの実行可能ファイルのそれぞれに 1 つずつ、2 つのカスタムラベルを定義するジョブを us-central1
に作成するには、次の操作を行います。
ジョブの構成の詳細と
runnables.labels
フィールドを指定する JSON ファイルを作成します。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello from task ${BATCH_TASK_INDEX}!" ] }, "labels": { "RUNNABLE1_LABEL_NAME1": "RUNNABLE1_LABEL_VALUE1" } }, { "script": { "text": "echo Hello from task ${BATCH_TASK_INDEX}!" }, "labels": { "RUNNABLE2_LABEL_NAME1": "RUNNABLE2_LABEL_VALUE1" } } ] } } ] }
以下を置き換えます。
RUNNABLE1_LABEL_NAME1
: ジョブの最初の実行可能ファイルに適用するラベルの名前。RUNNABLE1_LABEL_VALUE1
: ジョブの最初の実行可能ファイルに適用するラベルの値。RUNNABLE2_LABEL_NAME1
: ジョブの 2 番目の実行可能ファイルに適用するラベルの名前。RUNNABLE2_LABEL_VALUE1
: ジョブの 2 番目の実行可能ファイルに適用するラベルの値。
gcloud batch jobs submit
コマンドを使用して、us-central1
にジョブを作成します。gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
JSON_CONFIGURATION_FILE
は、前の手順で作成したジョブの構成の詳細を含む JSON ファイルのパスに置き換えます。
API
たとえば、2 つのジョブの実行可能ファイルのそれぞれに 1 つずつ、2 つのカスタムラベルを定義するジョブを us-central1
に作成するには、jobs.create
メソッド に POST
リクエストを行い、runnables.labels
フィールドを指定します。
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello from ${BATCH_TASK_INDEX}!"
]
},
"labels": {
"RUNNABLE1_LABEL_NAME1": "RUNNABLE1_LABEL_VALUE1"
}
},
{
"script": {
"text": "echo Hello from ${BATCH_TASK_INDEX}!"
},
"labels": {
"RUNNABLE2_LABEL_NAME1": "RUNNABLE2_LABEL_VALUE1"
}
}
]
}
}
]
}
以下を置き換えます。
RUNNABLE1_LABEL_NAME1
: 最初のジョブの実行可能ファイルに適用するラベルの名前。RUNNABLE1_LABEL_VALUE1
: 最初のジョブの実行可能ファイルに適用するラベルの値。RUNNABLE2_LABEL_NAME1
: 2 番目のジョブの実行可能ファイルに適用するラベルの名前。RUNNABLE2_LABEL_VALUE1
: 2 番目のジョブの実行可能ファイルに適用するラベルの値。
Java
Node.js
Python
次のステップ
ラベルをフィルタとして使用するのは、次の場合に限られます。
ジョブを削除する方法を学習する。