ジョブのネットワークを指定する

このドキュメントでは、ジョブを実行する VM のネットワークを指定する方法について説明します。

必要なアクセス権を持つネットワークを指定することで、ジョブを実行する VM に対する接続を制御できます。たとえば、必要なリソースへのアクセスを許可するジョブや、セキュリティ強化のためにアクセスを制限するネットワークを指定できます。また、ネットワーキングの要件がなく、ジョブのネットワーキングを構成しない場合は、ネットワークの指定を省略し、代わりにデフォルトのネットワーキング構成を使用します。

ネットワーキングのコンセプトと、ネットワーキングを構成するタイミングについては、Batch ネットワーキングの概要をご覧ください。

始める前に

特定のネットワークで動作するジョブを作成する

ジョブの作成時に、そのジョブのネットワークを指定します。具体的には、このジョブを実行する VPC ネットワークとサブネットを指定する必要があります。

このジョブの作成時に VM インスタンス テンプレートを使用する場合は、VM インスタンス テンプレートでネットワークを指定する必要があります。テンプレートを使用しない場合は、gcloud CLI または Batch API を使用して、ジョブのネットワークを指定します。

gcloud

gcloud CLI を使用して特定のネットワークで実行するジョブを作成するには、次のいずれかのオプションを選択します。

gcloud フラグを使用してジョブのネットワークを指定する

ジョブを作成し、gcloud フラグを使用してジョブのネットワークを指定するには、次の手順を行います。

  1. ジョブの構成の詳細を指定する 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"
      }
    }
    
  2. 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 構成ファイルのフィールドを使用してジョブのネットワークを指定するには、次の手順を行います。

  1. ジョブの構成の詳細を指定する 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 と同じリージョンにあるサブネットの名前。
  2. 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: プロジェクトのプロジェクト ID
  • LOCATION: このジョブのロケーション
  • JOB_NAME: このジョブの名前。
  • HOST_PROJECT_ID: 指定したネットワークのプロジェクトのプロジェクト ID:
    • 共有 VPC ネットワークを使用している場合は、ホスト プロジェクトを指定します。
    • 共有 VPC ネットワークを使用していない場合は、現在のプロジェクト(PROJECT_ID)を指定します。
  • NETWORK: 現在のプロジェクト内の VPC ネットワークの名前、または現在のプロジェクトでホストまたは共有される共有 VPC ネットワークの名前。
  • REGION: ジョブのサブネットと VM が配置されているリージョン
    • allowedLocations フィールドを追加して、ジョブの VM に対して許可されるロケーションを指定する場合は、ここで同じリージョンを指定する必要があります。
    • そうしない場合、リージョンはジョブに選択したロケーションLOCATION)と同じでなければなりません。
  • SUBNET: VPC ネットワークの一部であり、ジョブの VM と同じリージョンにあるサブネットの名前。

次のステップ