このドキュメントでは、1 つ以上の外部ストレージ ボリュームを使用する Batch ジョブを作成して実行する方法について説明します。 外部ストレージ オプションには、新規または既存の永続ディスク、新しいローカル SSD、既存の Cloud Storage バケット、Filestore ファイル共有などの既存のネットワーク ファイル システム(NFS)があります。
外部ストレージ ボリュームを追加するかどうかにかかわらず、ジョブの各 Compute Engine VM にはブートディスクがあります。このディスクは、ジョブのオペレーティング システム(OS)イメージと指示のストレージを提供します。 ジョブのブートディスクの構成については、VM OS 環境の概要をご覧ください。
準備
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
- 
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。 - 
  
  
    
      プロジェクトに対する Batch ジョブ編集者 (roles/batch.jobsEditor)
- 
  
  
    
      ジョブのサービス アカウントのサービス アカウント ユーザー (roles/iam.serviceAccountUser)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
- 
            Cloud Storage バケットを使用するジョブを作成する:
              
  
  
    
      バケットに対する Storage オブジェクト閲覧者 (roles/storage.objectViewer)
 ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。 
- 
  
  
    
      プロジェクトに対する Batch ジョブ編集者 (
ストレージ ボリュームを使用するジョブを作成する
必要に応じて、ジョブは次のタイプの外部ストレージ ボリュームのいずれかのうちの 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 を使用して作成できます。
コンソール
 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)を選択します。
 
 
- [その他の構成] ページを構成します。 - 左側のペインで [その他の構成] をクリックします。 [その他の構成] ページが開きます。 
- このジョブにマウントする既存のゾーン永続ディスクごとに、次の操作を行います。 - [ストレージ ボリューム] セクションで、[新しいボリュームを追加] をクリックします。 [新しいボリューム] ウィンドウが表示されます。 
- [新しいボリューム] ウィンドウで、次の操作を行います。 - [ボリュームのタイプ] セクションで、[永続ディスク](デフォルト)を選択します。 
- [ディスク] リストで、このジョブにマウントする既存のゾーン永続ディスクを選択します。ディスクは、このジョブと同じゾーンに配置する必要があります。 - たとえば、用意しておいた既存のゾーン永続ディスクを選択します。この永続ディスクは - 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: プロジェクトのプロジェクト ID
- 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という名前の既存の永続ディスクをアタッチする必要があります。
 
- 次のコマンドを実行します。 - 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: プロジェクトのプロジェクト ID
- LOCATION: ジョブのロケーション。
- 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 であるため、この値は- 375GB の倍数である必要があります。たとえば、2 つのローカル SSD の場合、この値を- 750GB に設定します。
 
- このジョブ用の 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: プロジェクトのプロジェクト ID
- LOCATION: ジョブのロケーション。
- JOB_NAME: ジョブの名前。
- MACHINE_TYPE: マシンタイプで、ジョブの VM の事前定義されたもの、またはカスタムのものでありえます。ローカル SSD の許容数は、ジョブの VM のマシンタイプによって異なります。
- LOCAL_SSD_NAME: このジョブ用に作成されたローカル SSD の名前。
- LOCAL_SSD_SIZE: すべてのローカル SSD のサイズ(GB 単位)。各ローカル SSD は 375 GB であるため、この値は- 375GB の倍数である必要があります。たとえば、2 つのローカル SSD の場合、この値を- 750GB に設定します。
 
- このジョブ用の 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。
コンソール
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: プロジェクトのプロジェクト ID
- LOCATION: ジョブのロケーション。
- 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。
コンソール
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: プロジェクトのプロジェクト ID
- LOCATION: ジョブのロケーション。
- 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
次のステップ
- ジョブの作成または実行で問題が発生した場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。