必要なアクセス権を持つネットワークを指定することで、ジョブを実行する VM に対する接続を制御できます。たとえば、ジョブが必要なリソースにアクセスできるようにするネットワークを指定したり、セキュリティを強化するためにアクセスを制限したりできます。また、ネットワーキングの要件がなく、ジョブのネットワーキングを構成しない場合は、ネットワークの指定を省略し、代わりにデフォルトのネットワーキング構成を使用します。
ネットワーキングのコンセプトと、ネットワーキングを構成するタイミングについては、Batch ネットワーキングの概要をご覧ください。
始める前に
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
特定のネットワーク上で実行されるジョブを作成するために必要な権限を取得するには、次の IAM ロールを付与するように管理者へ依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。 -
ネットワークとサブネットを識別するには、プロジェクトに対する Compute ネットワーク閲覧者 (
roles/compute.networkViewer
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
-
プロジェクトのバッチジョブ編集者(
-
ジョブに使用するネットワークを特定します。ジョブに指定するネットワークは、次の要件を満たす必要があります。
- ネットワークは、ジョブと同じプロジェクトにある Virtual Private Cloud(VPC)ネットワークか、ジョブのプロジェクトがホストしているかプロジェクトと共有されている共有 VPC ネットワークである。
- ネットワークには、ジョブを実行するロケーションのサブネットワーク(サブネット)が含まれる。
-
ネットワークにより、ジョブに必要などのアクセスも許可される。たとえば、MPI ライブラリを使用して密結合タスク間で通信するジョブなど、VM 間の通信が必要な場合は、ネットワークにジョブの VM 間の接続を許可するファイアウォール ルールがあることを確認します。
一般的なユースケースに対応した VPC ファイアウォール ルールを構成する方法をご覧ください。
-
別のプロジェクトでホストされている共有 VPC ネットワークのサブネットでジョブを実行する場合は、プロジェクトのBatch サービス エージェントにそのサブネットを使用する権限が与えられている必要があります。
プロジェクトの Batch サービス エージェントに、共有 VPC ネットワークのサブネットで実行されるジョブの作成に必要な権限を付与するには、プロジェクトの Batch サービス エージェントに共有 VPC サブネットに対する Compute ネットワーク ユーザー (
roles/compute.networkUser
)IAM ロールを付与するよう管理者に依頼します。詳細については、サービス アカウントの共有 VPC の設定に関するドキュメントをご覧ください。
特定のネットワークで動作するジョブを作成する
ジョブの作成時に、そのジョブのネットワークを指定します。具体的には、このジョブを実行する場所にある VPC ネットワークとサブネットを指定する必要があります。
このジョブの作成時に VM インスタンス テンプレートを使用する場合は、ネットワークを VM インスタンス テンプレートに指定する必要があります。テンプレートを使用しない場合は、gcloud CLI または Batch API を使用して、ジョブのネットワークを指定します。
gcloud
gcloud CLI を使用して特定のネットワークで実行されるジョブを作成するには、次のいずれかの方法を選択します。
gcloud フラグを使用してジョブのネットワークを指定する
ジョブを作成し、gcloud フラグを使用してジョブのネットワークを指定するには、次の操作を行います。
ジョブの構成の詳細を指定する 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." } } ] }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
gcloud batch jobs submit
コマンドを使用してジョブを作成します。ジョブのネットワークを指定するために、--network
フラグと--subnetwork
フラグを含めます。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE \ --network projects/HOST_PROJECT_ID/global/networks/NETWORK \ --subnetwork projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
以下を置き換えます。
JOB_NAME
: このジョブの名前。LOCATION
: このジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。HOST_PROJECT_ID
: 指定したネットワークのプロジェクトのプロジェクト ID:- 共有 VPC ネットワークを使用している場合は、ホスト プロジェクトを指定します。
- 共有 VPC ネットワークを使用していない場合は、現在のプロジェクトを指定します。
NETWORK
: 現在のプロジェクト内の VPC ネットワークの名前、または現在のプロジェクトでホストまたは共有される共有 VPC ネットワークの名前。REGION
: ジョブのサブネットと VM が配置されているリージョン。allowedLocations
フィールドを追加して、ジョブの VM に対して許可されるロケーションを指定する場合は、ここで同じリージョンを指定する必要があります。- そうしない場合、リージョンはジョブに選択したロケーション(
LOCATION
)と同じでなければなりません。
SUBNET
: VPC ネットワークの一部であり、ジョブの VM と同じリージョンにあるサブネットの名前。
JSON フィールドを使用してジョブのネットワークを指定する
ジョブを作成し、JSON 構成ファイルのフィールドを使用してジョブのネットワークを指定する手順は次のとおりです。
ジョブの構成の詳細を指定する JSON ファイルを作成します。ジョブのネットワークを指定するために、
network
フィールドとsubnetwork
フィールドを含めます。たとえば、特定のネットワークで実行される基本的なスクリプトのジョブを作成するには、次の内容の 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." } } ] }, "taskCount": 3 } ], "allocationPolicy": { "network": { "networkInterfaces": [ { "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET" } ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
以下を置き換えます。
HOST_PROJECT_ID
: 指定したネットワークのプロジェクトのプロジェクト ID:- 共有 VPC ネットワークを使用している場合は、ホスト プロジェクトを指定します。
- 共有 VPC ネットワークを使用していない場合は、現在のプロジェクトを指定します。
NETWORK
: 現在のプロジェクト内の VPC ネットワークの名前、または現在のプロジェクトでホストまたは共有される共有 VPC ネットワークの名前。REGION
: ジョブのサブネットと VM が配置されているリージョン。allowedLocations
フィールドを追加して、ジョブの VM に対して許可されるロケーションを指定する場合は、ここで同じリージョンを指定する必要があります。- そうしない場合、リージョンはジョブに選択したロケーション(
LOCATION
)と同じでなければなりません。
SUBNET
: VPC ネットワークの一部であり、ジョブの VM と同じリージョンにあるサブネットの名前。
gcloud batch jobs submit
コマンドを使用してジョブを作成します。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: このジョブの名前。LOCATION
: このジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
Java
Node.js
Python
API
Batch API を使用してジョブを作成するには、jobs.create
メソッドを使用してジョブの構成の詳細を指定します。ジョブのネットワークを指定するために、network
フィールドと subnetwork
フィールドを含めます。
たとえば、特定のネットワークで実行される基本的なスクリプトのジョブを作成するには、次の POST
リクエストを行います。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy": {
"network": {
"networkInterfaces": [
{
"network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
"subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET"
}
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: このジョブのロケーション。JOB_NAME
: このジョブの名前。HOST_PROJECT_ID
: 指定したネットワークのプロジェクトのプロジェクト ID:- 共有 VPC ネットワークを使用している場合は、ホスト プロジェクトを指定します。
- 共有 VPC ネットワークを使用していない場合は、現在のプロジェクト(
PROJECT_ID
)を指定します。
NETWORK
: 現在のプロジェクト内の VPC ネットワークの名前、または現在のプロジェクトでホストまたは共有される共有 VPC ネットワークの名前。REGION
: ジョブのサブネットと VM が配置されているリージョン。allowedLocations
フィールドを追加して、ジョブの VM に対して許可されるロケーションを指定する場合は、ここで同じリージョンを指定する必要があります。- そうしない場合、リージョンはジョブに選択したロケーション(
LOCATION
)と同じでなければなりません。
SUBNET
: VPC ネットワークの一部であり、ジョブの VM と同じリージョンにあるサブネットの名前。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ネットワーキングの詳細を確認する。
- ジョブの作成の詳細を確認する。
- ジョブとタスクを表示する方法を確認する。