必要なアクセス権を持つネットワークを指定することで、ジョブを実行する 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 ファイルへのパス。
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 と同じリージョンにあるサブネットの名前。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ネットワーキングの詳細を確認する。
- ジョブの作成の詳細を確認する。
- ジョブとタスクを表示する方法を確認する。