このドキュメントでは、1 つ以上の外部ストレージ ボリュームを使用する Batch ジョブを作成して実行する方法について説明します。 外部ストレージ オプションには、新規または既存の永続ディスク、新しいローカル SSD、既存の Cloud Storage バケット、Filestore ファイル共有などの既存のネットワーク ファイル システム(NFS)があります。
外部ストレージ ボリュームを追加するかどうかにかかわらず、ジョブの各 Compute Engine VM にはブートディスクがあります。このディスクは、ジョブのオペレーティング システム(OS)イメージと指示のストレージを提供します。 ジョブのブートディスクの構成については、VM OS 環境の概要をご覧ください。
準備
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。 - Cloud Storage バケットを使用するジョブを作成する:
バケットに対する Storage オブジェクト閲覧者(
roles/storage.objectViewer
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
プロジェクトのバッチジョブ編集者(
ストレージ ボリュームを使用するジョブを作成する
必要に応じて、ジョブは次のタイプの外部ストレージ ボリュームのいずれかのうちの 1 つ以上を使用できます。すべてのタイプのストレージ ボリュームと、それぞれの相違と制限の詳細については、Compute Engine VM のストレージ オプションのドキュメントをご覧ください。
- 永続ディスク: ゾーンまたはリージョンの永続ブロック ストレージ
- ローカル SSD: 高パフォーマンスかつ一時的なローカル ブロック ストレージ。
- Cloud Storage バケット: 入手可能なオブジェクト ストレージ
- ネットワーク ファイル システム(NFS) : ネットワーク ファイル システム プロトコルに従う分散ファイル システム(たとえば、Filestore ファイル共有)これは、Google Cloud でホストされる高性能 NFS です。
ジョブが各ストレージ ボリュームを使用できるようにするには、ジョブの定義にそれを含めて、実行可能物にマウントパス(mountPath
)を指定します。ストレージ ボリュームを使用するジョブを作成する方法を学習するには、次のセクションの 1 つ以上をご覧ください。
永続ディスクを使用する
永続ディスクを使用するジョブには次の制限があります。
すべての永続ディスク: すべての永続ディスクの制限を確認します。
新規と既存の永続ディスク: ジョブ内の各永続ディスクは新規(ジョブで定義および作成された)と、既存(プロジェクトですでに作成されていて、ジョブで指定された)のいずれかでありえます。永続ディスクを使用するには、ジョブの VM にフォーマットしてマウントする必要があります。VM は永続ディスクと同じ場所に存在する必要があります。 Batch はジョブに含めた永続ディスクをマウントし、新しい永続ディスクをフォーマットしますが、ジョブで使用する既存の永続ディスクをフォーマットしてマウントを解除する必要があります。
サポートされるロケーション オプション、フォーマット オプション、マウント オプションは、次の表に示すように、新規の永続ディスクと既存の永続ディスクの間で異なります。
新規の永続ディスク 既存の永続ディスク 書式設定オプション 永続ディスクは、
ext4
ファイル システムで自動的にフォーマットされます。ext4
ファイル システムをジョブに使用する前に、永続ディスクをフォーマットする必要があります。マウント オプション すべてのオプションがサポートされています。
書き込みを除くすべてのオプションがサポートされています。これは、マルチライター モードの制限によるものです。
永続ディスクをジョブに使用する前に、アタッチされている VM から永続ディスクを切断する必要があります。
ロケーションのオプション ゾーン永続ディスクを作成することのみできます。
ジョブの任意のロケーションを選択できます。永続ディスクは、プロジェクトが実行されているゾーンに作成されます。
ゾーン永続ディスクとリージョン永続ディスクを選択できます。
ジョブのロケーション(または、指定されている場合はジョブの許可されたロケーションのみ)を、ジョブの永続ディスクのすべてを含むロケーションのみに設定する必要があります。たとえば、ゾーン永続ディスクの場合、ジョブのロケーションは、ディスクのゾーンにする必要があります。リージョン永続ディスクの場合、ジョブのロケーションは、ディスクのリージョンと、ゾーンが指定されている場合、リージョン永続ディスクが配置されている特定のゾーンの一方または両方、のいずれかである必要があります。インスタンス テンプレート: このジョブの作成中に VM インスタンス テンプレートを使用する場合は、インスタンス テンプレートで、このジョブ用の任意の永続ディスクをアタッチする必要があります。それ以外で、インスタンス テンプレートを使用しない場合は、ジョブ定義で任意の永続ディスクを直接アタッチする必要があります。
永続ディスクを使用するジョブは、Google Cloud コンソール、gcloud CLI、Batch API、C++、Go、Java、Node.js、Python を使用して作成できます。
Console
次の例では、Google Cloud コンソールを使用して、スクリプトを実行して us-central1-a
ゾーンにある既存のゾーン永続ディスクからファイルを読み取るジョブを作成します。このスクリプトの例は、ジョブにルート ディレクトリに example.txt
という名前のテキスト ファイルを含むゾーン永続ディスクが存在することを前提としています。
(省略可)サンプルゾーン永続ディスクを作成する
サンプル スクリプトの実行に使用できるゾーン永続ディスクを作成する場合は、ジョブを作成する前に次の操作を行います。
example-disk
という名前の新しい空の永続ディスクをus-central1-a
ゾーンの Linux VM にアタッチし、VM に対してコマンドを実行してディスクをフォーマットしてマウントします。手順については、永続ディスクを VM に追加するをご覧ください。まだ VM から切断しないでください。
永続ディスクに
example.txt
を作成するには、VM で次のコマンドを実行します。現在の作業ディレクトリを永続ディスクのルート ディレクトリに変更するには、次のコマンドを入力します。
cd VM_MOUNT_PATH
VM_MOUNT_PATH は、前の手順で永続ディスクがこの VM にマウントされたディレクトリのパスに置き換えます(
/mnt/disks/example-disk
など)。Enter
キーを押します。example.txt
という名前のファイルを作成して定義するには、次のコマンドを入力します。cat > example.txt
Enter
キーを押します。ファイルの内容を入力します。たとえば、「
Hello world!
」と入力します。ファイルを保存するには、
Ctrl+D
(macOS の場合はCommand+D
)を押します。
完了したら、VM から接続できます。
ディスクを VM から切断します。
VM が不要になった場合は、VM を削除できます。これにより、永続ディスクが自動的に切断されます。
それ以外の場合は、永続ディスクを切断します。手順については、ブートディスクの切断と再接続を参照し、VM のブートディスクではなく、
example-disk
永続ディスクを切断します。
既存のゾーン永続ディスクを使用するジョブを作成する
Google Cloud コンソールを使用して既存のゾーン永続ディスクを使用するジョブを作成するには、次の操作を行います。
Google Cloud コンソールで、[ジョブリスト] ページに移動します。
[
作成] をクリックします。[バッチジョブを作成する] ページが開きます。左側のペインで、[ジョブの詳細] ページが選択されています。[ジョブの詳細] ページを構成します。
省略可: [ジョブ名] フィールドで、ジョブ名をカスタマイズします。
たとえば、「
example-disk-job
」と入力します。[タスクの詳細] セクションを構成します。
[新しい実行可能物] ウィンドウで、このジョブを実行するためのスクリプトまたはコンテナを少なくとも 1 つ追加します。
たとえば、
example.txt
という名前で、このジョブで使用する永続ディスクのルート ディレクトリにあるファイルのコンテンツを出力するスクリプトを実行するには、次のようにします。[スクリプト] チェックボックスをオンにします。テキスト ボックスが表示されます。
テキスト ボックスに次のスクリプトを入力します。
echo "Here is the content of the example.txt file in the persistent disk." cat MOUNT_PATH/example.txt
MOUNT_PATH は、このジョブの VM に永続ディスクをマウントするパスに置き換えます(例:
/mnt/disks/example-disk
)。[完了] をクリックします。
[タスク数] フィールドに、このジョブのタスク数を入力します。
たとえば、「
1
」(デフォルト)と入力します。[並列処理] フィールドに、同時に実行するタスクの数を入力します。
たとえば、「
1
」(デフォルト)と入力します。
[リソースの仕様] ページを構成します。
左側のペインで [リソースの仕様] をクリックします。[リソースの仕様] ページが開きます。
このジョブのロケーションを選択します。 既存のゾーン永続ディスクを使用するには、ジョブの VM が同じゾーンに配置されている必要があります。
[リージョン] フィールドでリージョンを選択します。
たとえば、ゾーン永続ディスクの例を使用するには、[
us-central1 (Iowa)
](デフォルト)を選択します。[ゾーン] フィールドでゾーンを選択します。
たとえば、
us-central1-a (Iowa)
を選択します。
[その他の構成] ページを構成します。
左側のペインで [その他の構成] をクリックします。 [その他の構成] ページが開きます。
このジョブにマウントする既存のゾーン永続ディスクごとに、次の操作を行います。
[ストレージ ボリューム] セクションで、[新しいボリュームを追加] をクリックします。 [新しいボリューム] ウィンドウが表示されます。
[新しいボリューム] ウィンドウで、次の操作を行います。
[ボリュームのタイプ] セクションで、[Persistent disk](デフォルト)を選択します。
[ディスク] リストで、このジョブにマウントする既存のゾーン永続ディスクを選択します。ディスクは、このジョブと同じゾーンに配置する必要があります。
たとえば、用意しておいた既存のゾーン永続ディスクを選択します。この永続ディスクは
us-central1-a
ゾーンにあり、example.txt
ファイルを含んでいる必要があります。省略可: このゾーン永続ディスクの名前を変更する場合は、次の操作を行います。
[デバイス名をカスタマイズする] を選択します。
[デバイス名] フィールドに、ディスクの新しい名前を入力します。
[マウントパス] フィールドに、この永続ディスクのマウントパス(MOUNT_PATH)を入力します。
たとえば、次のように入力します。
/mnt/disks/EXISTING_PERSISTENT_DISK_NAME
EXISTING_PERSISTENT_DISK_NAME は、ディスクの名前に置き換えます。ゾーン永続ディスクの名前を変更した場合は、新しい名前を使用します。
たとえば、EXISTING_PERSISTENT_DISK_NAME を
example-disk
に置き換えます。[完了] をクリックします。
省略可: このジョブの他のフィールドを構成します。
省略可: ジョブ構成を確認するには、左側のペインで [プレビュー] をクリックします。
[作成] をクリックします。
[ジョブの詳細] ページに、作成したジョブが表示されます。
gcloud
次の例では、gcloud CLI を使用して、既存の永続ディスクと新しい永続ディスクをアタッチしてマウントするジョブを作成します。ジョブには 3 つのタスクがあり、それぞれが output_task_TASK_INDEX.txt
という名前の新しい永続ディスクにファイルを作成するスクリプトを実行します。ここで TASK_INDEX は、各タスクのインデックス(0、1、2)です。
gcloud CLI を使用して永続ディスクを使用するジョブを作成するには、gcloud batch jobs submit
コマンドを使用します。
ジョブの JSON 構成ファイルで、instances
フィールドに永続ディスクを指定し、volumes
フィールドで永続ディスクをマウントします。
JSON ファイルを作成します。
このジョブにインスタンス テンプレートを使用していない場合は、次の内容の JSON ファイルを作成します。
{ "allocationPolicy": { "instances": [ { "policy": { "disks": [ { "deviceName": "EXISTING_PERSISTENT_DISK_NAME", "existingDisk": "projects/PROJECT_ID/EXISTING_PERSISTENT_DISK_LOCATION/disks/EXISTING_PERSISTENT_DISK_NAME" }, { "newDisk": { "sizeGb": NEW_PERSISTENT_DISK_SIZE, "type": "NEW_PERSISTENT_DISK_TYPE" }, "deviceName": "NEW_PERSISTENT_DISK_NAME" } ] } } ], "location": { "allowedLocations": [ "EXISTING_PERSISTENT_DISK_LOCATION" ] } }, "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> /mnt/disks/NEW_PERSISTENT_DISK_NAME/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "deviceName": "NEW_PERSISTENT_DISK_NAME", "mountPath": "/mnt/disks/NEW_PERSISTENT_DISK_NAME", "mountOptions": "rw,async" }, { "deviceName": "EXISTING_PERSISTENT_DISK_NAME", "mountPath": "/mnt/disks/EXISTING_PERSISTENT_DISK_NAME" } ] }, "taskCount":3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDEXISTING_PERSISTENT_DISK_NAME
: 既存の永続ディスクの名前。EXISTING_PERSISTENT_DISK_LOCATION
: 既存の永続ディスクのロケーション。既存のゾーン永続ディスクの場合、ジョブのロケーションは、ディスクのゾーンにする必要があります。既存のリージョン永続ディスクごとに、ジョブのロケーションは、ディスクのリージョンと、ゾーンが指定されている場合、リージョン永続ディスクが配置されている特定のゾーンの一方または両方、のいずれかである必要があります。既存の永続ディスクを指定しない場合は、任意のロケーションを選択できます。allowedLocations
フィールドの詳細。NEW_PERSISTENT_DISK_SIZE
: 新規の永続ディスクのサイズ(GB)。許可されるサイズは永続ディスクのタイプによって異なりますが、最小値はたいてい 10 GB(10
)、最大値はたいてい 64 TB(64000
)です。NEW_PERSISTENT_DISK_TYPE
: ディスクタイプ新しい永続ディスクのpd-standard
、pd-balanced
、pd-ssd
、またはpd-extreme
のいずれかです。 ブート以外の永続ディスクのデフォルトのディスクタイプはpd-standard
です。NEW_PERSISTENT_DISK_NAME
: 新規の永続ディスクの名前。
このジョブ用の VM インスタンス テンプレートを使用している場合、前述のとおり JSON ファイルを作成しますが、ただし
instances
フィールドは次のように置き換えます。"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ],
ここで、
INSTANCE_TEMPLATE_NAME
は、このジョブ用のインスタンス テンプレートの名前です。永続ディスクを使用するジョブの場合、このインスタンス テンプレートで、ジョブで使用する永続ディスクを定義してアタッチする必要があります。この例の場合、テンプレートでNEW_PERSISTENT_DISK_NAME
という名前の新規の永続ディスクを定義してアタッチし、EXISTING_PERSISTENT_DISK_NAME
という名前の既存の永続ディスクをアタッチする必要があります。
次のコマンドを実行します。
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
API
次の例では、Batch API を使用して、既存の永続ディスクと新しい永続ディスクをアタッチしてマウントするジョブを作成します。ジョブには 3 つのタスクがあり、それぞれが output_task_TASK_INDEX.txt
という名前の新しい永続ディスクにファイルを作成するスクリプトを実行します。ここで TASK_INDEX は、各タスクのインデックス(0、1、2)です。
Batch API を使用して永続ディスクを使用するジョブを作成するには、jobs.create
メソッドを使用します。リクエストで、instances
フィールドに永続ディスクを指定し、volumes
フィールドで永続ディスクをマウントします。
このジョブにインスタンス テンプレートを使用していない場合は、次のリクエストを送信します。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME { "allocationPolicy": { "instances": [ { "policy": { "disks": [ { "deviceName": "EXISTING_PERSISTENT_DISK_NAME", "existingDisk": "projects/PROJECT_ID/EXISTING_PERSISTENT_DISK_LOCATION/disks/EXISTING_PERSISTENT_DISK_NAME" }, { "newDisk": { "sizeGb": NEW_PERSISTENT_DISK_SIZE, "type": "NEW_PERSISTENT_DISK_TYPE" }, "deviceName": "NEW_PERSISTENT_DISK_NAME" } ] } } ], "location": { "allowedLocations": [ "EXISTING_PERSISTENT_DISK_LOCATION" ] } }, "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> /mnt/disks/NEW_PERSISTENT_DISK_NAME/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "deviceName": "NEW_PERSISTENT_DISK_NAME", "mountPath": "/mnt/disks/NEW_PERSISTENT_DISK_NAME", "mountOptions": "rw,async" }, { "deviceName": "EXISTING_PERSISTENT_DISK_NAME", "mountPath": "/mnt/disks/EXISTING_PERSISTENT_DISK_NAME" } ] }, "taskCount":3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。EXISTING_PERSISTENT_DISK_NAME
: 既存の永続ディスクの名前。EXISTING_PERSISTENT_DISK_LOCATION
: 既存の永続ディスクのロケーション。既存のゾーン永続ディスクの場合、ジョブのロケーションは、ディスクのゾーンにする必要があります。既存のリージョン永続ディスクごとに、ジョブのロケーションは、ディスクのリージョンと、ゾーンが指定されている場合、リージョン永続ディスクが配置されている特定のゾーンの一方または両方、のいずれかである必要があります。既存の永続ディスクを指定しない場合は、任意のロケーションを選択できます。allowedLocations
フィールドの詳細。NEW_PERSISTENT_DISK_SIZE
: 新規の永続ディスクのサイズ(GB)。許可されるサイズは永続ディスクのタイプによって異なりますが、最小値はたいてい 10 GB(10
)、最大値はたいてい 64 TB(64000
)です。NEW_PERSISTENT_DISK_TYPE
: ディスクタイプ新しい永続ディスクのpd-standard
、pd-balanced
、pd-ssd
、またはpd-extreme
のいずれかです。 ブート以外の永続ディスクのデフォルトのディスクタイプはpd-standard
です。NEW_PERSISTENT_DISK_NAME
: 新規の永続ディスクの名前。
このジョブ用の VM インスタンス テンプレートを使用している場合、前述のとおり JSON ファイルを作成しますが、ただし
instances
フィールドは次のように置き換えます。"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ], ...
ここで、
INSTANCE_TEMPLATE_NAME
は、このジョブ用のインスタンス テンプレートの名前です。永続ディスクを使用するジョブの場合、このインスタンス テンプレートで、ジョブで使用する永続ディスクを定義してアタッチする必要があります。この例の場合、テンプレートでNEW_PERSISTENT_DISK_NAME
という名前の新規の永続ディスクを定義してアタッチし、EXISTING_PERSISTENT_DISK_NAME
という名前の既存の永続ディスクをアタッチする必要があります。
C++
C++ 用 Cloud クライアント ライブラリを使用して新規または既存の永続ディスクを使用する Batch ジョブを作成するには、CreateJob
関数を使用します。また、これには次の内容を含めます。
- ジョブの VM に永続ディスクをアタッチするには、次のいずれかを追加します。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
set_remote_path
メソッドを使用します。 - このジョブに VM インスタンス テンプレートを使用する場合は、
set_instance_template
メソッドを使用します。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
- 永続ディスクをジョブにマウントするには、
deviceName
フィールドとmountPath
フィールドとともにvolumes
フィールドを使用します。新しい永続ディスクの場合は、mountOptions
フィールドも使用して書き込みを有効にします。
同様のユースケースのコードサンプルについては、Cloud Storage バケットを使用するをご覧ください。
Go
Go 用 Cloud クライアント ライブラリを使用して新規または既存の永続ディスクを使用する Batch ジョブを作成するには、CreateJob
関数を使用します。また、次の内容を含めます。
- ジョブの VM に永続ディスクをアタッチするには、次のいずれかを追加します。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
AllocationPolicy_AttachedDisk
タイプを含めます。 - このジョブに VM インスタンス テンプレートを使用している場合は、
AllocationPolicy_InstancePolicyOrTemplate_InstanceTemplate
タイプを含めます。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
- 永続ディスクをジョブにマウントするには、
Volume
タイプをVolume_DeviceName
タイプとMountPath
フィールドとともにを使用します。新しい永続ディスクの場合は、MountOptions
フィールドも使用して書き込みを有効にします。
Java
Java 用 Cloud クライアント ライブラリを使用して新規または既存の永続ディスクを使用する Batch ジョブを作成するには、CreateJobRequest
クラスを使用します。また、次の内容を含めます。
- ジョブの VM に永続ディスクをアタッチするには、次のいずれかを追加します。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
setDisks
メソッドを使用します。 - このジョブに VM インスタンス テンプレートを使用している場合は、
setInstanceTemplate
メソッドを使用します。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
- 永続ディスクをジョブにマウントするには、
Volume
クラスをsetDeviceName
メソッド とsetMountPath
メソッドとともに使用します。新しい永続ディスクの場合は、setMountOptions
メソッドも使用して書き込みを有効にします。
たとえば、次のコードサンプルを使用します。
Node.js
Node.js 用 Cloud クライアント ライブラリを使用して新規または既存の永続ディスクを使用する Batch ジョブを作成するには、createJob
メソッドを使用します。また、次の内容を含めます。
- ジョブの VM に永続ディスクをアタッチするには、次のいずれかを追加します。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
AllocationPolicy.AttachedDisk
クラスを含めます。 - このジョブに VM インスタンス テンプレートを使用している場合は、
instanceTemplate
プロパティを含めます。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
- 永続ディスクをジョブにマウントするには、
Volume
クラスをdeviceName
プロパティとmountPath
プロパティとともに使用します。新しい永続ディスクの場合は、mountOptions
プロパティも使用して書き込みを有効にします。
Python
Python 用 Cloud クライアント ライブラリを使用して新規または既存の永続ディスクを使用する Batch ジョブを作成するには、CreateJob
関数を使用します。また、次の内容を含めます。
- ジョブの VM に永続ディスクをアタッチするには、次のいずれかを追加します。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
AttachedDisk
クラスを含めます。 - このジョブに VM インスタンス テンプレートを使用している場合は、
instance_template
属性を含めます。
- このジョブに VM インスタンス テンプレートを使用していない場合は、
- 永続ディスクをジョブにマウントするには、
Volume
クラスをdevice_name
属性とmount_path
属性とともにを使用します。新しい永続ディスクの場合は、mount_options
属性も使用して書き込みを有効にします。
たとえば、次のコードサンプルを使用します。
ローカル SSD を使用する
ローカル SSD を使用するジョブには次の制限があります。
- すべてのローカル SSD すべてのローカル SSD の制限を確認します。
- インスタンス テンプレート: このジョブの作成中に VM インスタンス テンプレートを指定する場合は、インスタンス テンプレートで、このジョブ用の任意の永続ディスクをアタッチする必要があります。それ以外で、インスタンス テンプレートを使用しない場合は、ジョブ定義で任意の永続ディスクを直接アタッチする必要があります。
ローカル SSD を使用するジョブは、gcloud CLI、Batch API、Java、または Python を使用して作成できます。次の例は、ローカル SSD を作成、アタッチ、マウントするジョブを作成する方法を示しています。このジョブには、次の 3 つのタスクがあります。各タスクはスクリプトを実行して output_task_TASK_INDEX.txt
というローカル SSD にファイルを作成します。TASK_INDEX
は各タスクのインデックスです: 0
、1
、および 2
。
gcloud
gcloud CLI を使用してローカル SSD を使用するジョブを作成するには、gcloud batch jobs submit
コマンドを使用します。ジョブの JSON 構成ファイルで、instances
フィールドにローカル SSD を作成してアタッチし、volumes
フィールドにローカル SSD をマウントします。
JSON ファイルを作成します。
このジョブにインスタンス テンプレートを使用していない場合は、次の内容の JSON ファイルを作成します。
{ "allocationPolicy": { "instances": [ { "policy": { "machineType": MACHINE_TYPE, "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ] } } ] }, "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> /mnt/disks/LOCAL_SSD_NAME/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "deviceName": "LOCAL_SSD_NAME", "mountPath": "/mnt/disks/LOCAL_SSD_NAME", "mountOptions": "rw,async" } ] }, "taskCount":3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
以下を置き換えます。
MACHINE_TYPE
: マシンタイプで、ジョブの VM の事前定義されたもの、またはカスタムのものでありえます。ローカル SSD の許容数は、ジョブの VM のマシンタイプによって異なります。LOCAL_SSD_NAME
: このジョブ用に作成されたローカル SSD の名前。LOCAL_SSD_SIZE
: すべてのローカル SSD のサイズ(GB)。各ローカル SSD は 375 GB であるため、この値は375
GB の倍数である必要があります。たとえば、2 つのローカル SSD の場合、この値を750
GB に設定します。
このジョブ用の VM インスタンス テンプレートを使用している場合、前述のとおり JSON ファイルを作成しますが、ただし
instances
フィールドは次のように置き換えます。"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ],
ここで、
INSTANCE_TEMPLATE_NAME
は、このジョブ用のインスタンス テンプレートの名前です。ローカル SSD を使用するジョブの場合、このインスタンス テンプレートで、ジョブで使用するローカル SSD を定義してアタッチする必要があります。この例の場合、テンプレートでLOCAL_SSD_NAME
という名前のローカル SSD を定義し、アタッチする必要があります。
次のコマンドを実行します。
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
API
Batch API を使用してローカル SSD を使用するジョブを作成するには、jobs.create
メソッドを使用します。リクエストでは、instances
フィールドにローカル SSD を作成してアタッチし、volumes
フィールドにローカル SSD をマウントします。
このジョブにインスタンス テンプレートを使用していない場合は、次のリクエストを送信します。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME { "allocationPolicy": { "instances": [ { "policy": { "machineType": MACHINE_TYPE, "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ] } } ] }, "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> /mnt/disks/LOCAL_SSD_NAME/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "deviceName": "LOCAL_SSD_NAME", "mountPath": "/mnt/disks/LOCAL_SSD_NAME", "mountOptions": "rw,async" } ] }, "taskCount":3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。MACHINE_TYPE
: マシンタイプで、ジョブの VM の事前定義されたもの、またはカスタムのものでありえます。ローカル SSD の許容数は、ジョブの VM のマシンタイプによって異なります。LOCAL_SSD_NAME
: このジョブ用に作成されたローカル SSD の名前。LOCAL_SSD_SIZE
: すべてのローカル SSD のサイズ(GB)。各ローカル SSD は 375 GB であるため、この値は375
GB の倍数である必要があります。たとえば、2 つのローカル SSD の場合、この値を750
GB に設定します。
このジョブ用の VM インスタンス テンプレートを使用している場合、前述のとおり JSON ファイルを作成しますが、ただし
instances
フィールドは次のように置き換えます。"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ], ...
ここで、
INSTANCE_TEMPLATE_NAME
は、このジョブ用のインスタンス テンプレートの名前です。ローカル SSD を使用するジョブの場合、このインスタンス テンプレートで、ジョブで使用するローカル SSD を定義してアタッチする必要があります。この例の場合、テンプレートでLOCAL_SSD_NAME
という名前のローカル SSD を定義し、アタッチする必要があります。
Go
Java
Node.js
Python
Cloud Storage バケットを使用する
既存の Cloud Storage バケットを使用するジョブを作成するには、次のいずれかの方法を選択します。
- 推奨: このセクションに示すように、ジョブの定義でバケットを指定することで、ジョブの VM にバケットを直接マウントします。ジョブを実行すると、Cloud Storage FUSE を使用してバケットがジョブの VM に自動的にマウントされます。
- gcloud CLI または Cloud Storage API のクライアント ライブラリを使用して、Cloud Storage バケットに直接アクセスするタスクを含むジョブを作成します。VM から Cloud Storage バケットに直接アクセスする方法については、Cloud Storage バケットからのデータの書き込みと読み取りについての Compute Engine のドキュメントをご覧ください。
バケットを使用するジョブを作成する前に、バケットを作成するか、既存のバケットを特定します。詳しくは、バケットを作成するとバケットを一覧表示するをご覧ください。
Cloud Storage バケットを使用するジョブは、Google Cloud コンソール、gcloud CLI、Batch API、C++、Go、Java、Node.js、Python を使用して作成できます。
次の例は、Cloud Storage バケットをマウントするジョブを作成する方法を示しています。このジョブには以下の 3 つのタスクがあります。各タスクはスクリプトを実行して、output_task_TASK_INDEX.txt
というバケット内にファイルを作成します。ここで TASK_INDEX
は各タスクのインデックスです: 0
、1
、および 2
。
Console
Google Cloud コンソールを使用して Cloud Storage バケットを使用するジョブを作成するには、次の操作を行います。
Google Cloud コンソールで、[ジョブリスト] ページに移動します。
[
作成] をクリックします。[バッチジョブを作成する] ページが開きます。左側のペインで、[ジョブの詳細] ページが選択されています。[ジョブの詳細] ページを構成します。
省略可: [ジョブ名] フィールドで、ジョブ名をカスタマイズします。
たとえば、「
example-bucket-job
」と入力します。[タスクの詳細] セクションを構成します。
[新しい実行可能物] ウィンドウで、このジョブを実行するためのスクリプトまたはコンテナを少なくとも 1 つ追加します。
たとえば、次の操作を行います。
[スクリプト] チェックボックスをオンにします。テキスト ボックスが表示されます。
テキスト ボックスに次のスクリプトを入力します。
echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt
MOUNT_PATH は、このジョブの実行可能物が既存の Cloud Storage バケットへのアクセスに使用するマウントパスに置き換えます。パスは
/mnt/disks/
で始まり、選択したディレクトリまたはパスがそれに続く必要があります。たとえば、my-bucket
という名前のディレクトリでこのバケットを表す場合は、マウントパスを/mnt/disks/my-bucket
に設定します。[完了] をクリックします。
[タスク数] フィールドに、このジョブのタスク数を入力します。
たとえば、「
3
」と入力します。[並列処理] フィールドに、同時に実行するタスクの数を入力します。
たとえば、「
1
」(デフォルト)と入力します。
[その他の構成] ページを構成します。
左側のペインで [その他の構成] をクリックします。 [その他の構成] ページが開きます。
このジョブにマウントする Cloud Storage バケットごとに、次の操作を行います。
[ストレージ ボリューム] セクションで、[新しいボリュームを追加] をクリックします。 [新しいボリューム] ウィンドウが表示されます。
[新しいボリューム] ウィンドウで、次の操作を行います。
[ボリュームのタイプ] セクションで、[Cloud Storage バケット] を選択します。
[ストレージのバケット名] フィールドに、既存のバケットの名前を入力します。
たとえば、このジョブの実行可能物に指定したバケットを入力します。
[マウントパス] フィールドに、実行可能物で指定したバケットのマウントパス(MOUNT_PATH)を入力します。
[完了] をクリックします。
省略可: このジョブの他のフィールドを構成します。
省略可: ジョブ構成を確認するには、左側のペインで [プレビュー] をクリックします。
[作成] をクリックします。
[ジョブの詳細] ページに、作成したジョブが表示されます。
gcloud
gcloud CLI を使用して Cloud Storage バケットを使用するジョブを作成するには、gcloud batch jobs submit
コマンドを使用します。
ジョブの JSON 構成ファイルで、volumes
フィールドでバケットをマウントします。
たとえば、Cloud Storage にファイルを出力するジョブを作成するには、次のようにします。
JSON ファイルを作成し、次の内容を追加します。
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "gcs": { "remotePath": "BUCKET_PATH" }, "mountPath": "MOUNT_PATH" } ] }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
以下を置き換えます。
BUCKET_PATH
: このジョブがアクセスするバケット ディレクトリのパスで、バケットの名前で始まる必要があります。たとえば、BUCKET_NAME
という名前のバケットの場合、パスBUCKET_NAME
はバケットのルート ディレクトリ、そしてパスBUCKET_NAME/subdirectory
はsubdirectory
サブディレクトリです。MOUNT_PATH
: ジョブの実行可能物がこのバケットにアクセスするのに使用するマウントパス。パスは/mnt/disks/
で始まり、選択したディレクトリまたはパスがそれに続く必要があります。たとえば、my-bucket
という名前のディレクトリでこのバケットを表す場合は、マウントパスを/mnt/disks/my-bucket
に設定します。
次のコマンドを実行します。
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
API
Batch API を使用して Cloud Storage バケットを使用するジョブを作成するには、jobs.create
メソッドを使用し、volumes
フィールドでバケットをマウントします。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt"
}
}
],
"volumes": [
{
"gcs": {
"remotePath": "BUCKET_PATH"
},
"mountPath": "MOUNT_PATH"
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。BUCKET_PATH
: このジョブがアクセスするバケット ディレクトリのパスで、バケットの名前で始まる必要があります。たとえば、BUCKET_NAME
という名前のバケットの場合、パスBUCKET_NAME
はバケットのルート ディレクトリ、そしてパスBUCKET_NAME/subdirectory
はsubdirectory
サブディレクトリです。MOUNT_PATH
: ジョブの実行可能物がこのバケットにアクセスするのに使用するマウントパス。パスは/mnt/disks/
で始まり、選択したディレクトリまたはパスがそれに続く必要があります。たとえば、my-bucket
という名前のディレクトリでこのバケットを表す場合は、マウントパスを/mnt/disks/my-bucket
に設定します。
C++
C++
詳細については、Batch C++ API のリファレンス ドキュメントをご覧ください。
Batch への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
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 への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
ネットワーク ファイル システムを使用する
Google Cloud コンソール、gcloud CLI、または Batch API を使用して、Filestore ファイル共有などの既存のネットワーク ファイル システム(NFS)を使用するジョブを作成できます。
NFS を使用するジョブを作成する前に、ジョブの VM と NFS の間のトラフィックを許可するようにネットワークのファイアウォールが適切に構成されていることを確認してください。詳細については、Filestore のファイアウォール ルールの構成をご覧ください。
次の例では、NFS を指定してマウントするジョブを作成する方法を示しています。このジョブには以下の 3 つのタスクがあります。各タスクはスクリプトを実行して、output_task_TASK_INDEX.txt
という NFS 内にファイルを作成します。ここで TASK_INDEX
は各タスクのインデックスです: 0
、1
、および 2
。
Console
Google Cloud コンソールを使用して NFS を使用するジョブを作成するには、次の操作を行います。
Google Cloud コンソールで、[ジョブリスト] ページに移動します。
[
作成] をクリックします。[バッチジョブを作成する] ページが開きます。左側のペインで、[ジョブの詳細] ページが選択されています。[ジョブの詳細] ページを構成します。
省略可: [ジョブ名] フィールドで、ジョブ名をカスタマイズします。
たとえば、「
example-nfs-job
」と入力します。[タスクの詳細] セクションを構成します。
[新しい実行可能物] ウィンドウで、このジョブを実行するためのスクリプトまたはコンテナを少なくとも 1 つ追加します。
たとえば、次の操作を行います。
[スクリプト] チェックボックスをオンにします。テキスト ボックスが表示されます。
テキスト ボックスに次のスクリプトを入力します。
echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt
MOUNT_PATH は、ジョブの実行可能物がこの NFS へのアクセスに使用するマウントパスに置き換えます。パスは
/mnt/disks/
で始まり、選択したディレクトリまたはパスがそれに続く必要があります。たとえば、my-nfs
という名前のディレクトリでこの NFS を表す場合は、マウントパスを/mnt/disks/my-nfs
に設定します。[完了] をクリックします。
[タスク数] フィールドに、このジョブのタスク数を入力します。
たとえば、「
3
」と入力します。[並列処理] フィールドに、同時に実行するタスクの数を入力します。
たとえば、「
1
」(デフォルト)と入力します。
[その他の構成] ページを構成します。
左側のペインで [その他の構成] をクリックします。 [その他の構成] ページが開きます。
このジョブにマウントする Cloud Storage バケットごとに、次の操作を行います。
[ストレージ ボリューム] セクションで、[新しいボリュームを追加] をクリックします。 [新しいボリューム] ウィンドウが表示されます。
[新しいボリューム] ウィンドウで、次の操作を行います。
[ボリュームのタイプ] セクションで、[ネットワーク ファイル システム] を選択します。
[ファイル サーバー] フィールドに、このジョブの実行可能物で指定した NFS が配置されているサーバーの IP アドレスを入力します。
たとえば、NFS が Filestore ファイル共有の場合は、Filestore インスタンスの IP アドレスを指定します。これは、Filestore インスタンスを記述することで取得できます。
[リモートパス] フィールドに、前の手順で指定した NFS にアクセスできるパスを入力します。
NFS ディレクトリのパスは、
/
で始まり、その後に NFS のルート ディレクトリが続く必要があります。[マウントパス] フィールドに、前の手順で指定した NFS のマウントパス(MOUNT_PATH)を入力します。
[完了] をクリックします。
省略可: このジョブの他のフィールドを構成します。
省略可: ジョブ構成を確認するには、左側のペインで [プレビュー] をクリックします。
[作成] をクリックします。
[ジョブの詳細] ページに、作成したジョブが表示されます。
gcloud
gcloud CLI を使用して NFS を使用するジョブを作成するには、gcloud batch jobs submit
コマンドを使用します。
ジョブの JSON 構成ファイルで、volumes
フィールドで NFS をマウントします。
JSON ファイルを作成し、次の内容を追加します。
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "nfs": { "server": "NFS_IP_ADDRESS", "remotePath": "NFS_PATH" }, "mountPath": "MOUNT_PATH" } ] }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
以下を置き換えます。
NFS_IP_ADDRESS
: NFS の IP アドレス。たとえば、NFS が Filestore ファイル共有の場合は、Filestore インスタンスの IP アドレスを指定します。これは、Filestore インスタンスを記述することで取得できます。NFS_PATH
: このジョブがアクセスする NFS ディレクトリのパスであり、/
で始まり、NFS のルート ディレクトリがそれに続く必要があります。たとえば、FILE_SHARE_NAME
という名前の Filestore ファイル共有の場合、パス/FILE_SHARE_NAME
は、ファイル共有のルート ディレクトリ、そしてパス/FILE_SHARE_NAME/subdirectory
はsubdirectory
サブディレクトリを表します。MOUNT_PATH
: ジョブの実行可能物がこの NFS にアクセスするのに使用するマウントパス。パスは/mnt/disks/
で始まり、選択したディレクトリまたはパスがそれに続く必要があります。たとえば、my-nfs
という名前のディレクトリでこの NFS を表す場合は、マウントパスを/mnt/disks/my-nfs
に設定します。
次のコマンドを実行します。
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
API
Batch API を使用して NFS を使用するジョブを作成するには、jobs.create
メソッドを使用し、volumes
フィールドで NFS をマウントします。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt"
}
}
],
"volumes": [
{
"nfs": {
"server": "NFS_IP_ADDRESS",
"remotePath": "NFS_PATH"
},
"mountPath": "MOUNT_PATH"
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。NFS_IP_ADDRESS
: ネットワーク ファイル システムの IP アドレス。たとえば、NFS が Filestore ファイル共有の場合は、Filestore インスタンスの IP アドレスを指定します。これは、Filestore インスタンスを記述することで取得できます。NFS_PATH
: このジョブがアクセスする NFS ディレクトリのパスであり、/
で始まり、NFS のルート ディレクトリがそれに続く必要があります。たとえば、FILE_SHARE_NAME
という名前の Filestore ファイル共有の場合、パス/FILE_SHARE_NAME
はファイル共有のルート ディレクトリ、そしてパス/FILE_SHARE_NAME/subdirectory
はサブディレクトリを表します。MOUNT_PATH
: ジョブの実行可能物がこの NFS にアクセスするのに使用するマウントパス。パスは/mnt/disks/
で始まり、選択したディレクトリまたはパスがそれに続く必要があります。たとえば、my-nfs
という名前のディレクトリでこの NFS を表す場合は、マウントパスを/mnt/disks/my-nfs
に設定します。
Java
Node.js
Python
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。