您可以指定具有所需访问权限的网络,从而控制运行作业的虚拟机的连接。例如,您可以指定一个网络,允许作业访问所需资源或限制访问以提高安全性。或者,如果您没有任何网络要求,也不想为作业配置网络,请跳过指定网络,改为使用默认网络配置。
如需详细了解网络概念以及何时配置网络,请参阅批量网络概览。
准备工作
- 如果您之前未使用过 Batch,请查看开始使用 Batch 并完成项目和用户的前提条件,以启用 Batch。
- 
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  如需获得创建在特定网络上运行的作业所需的权限,请让您的管理员为您授予以下 IAM 角色: - 
  
  
    
      项目的 Batch Job Editor  (roles/batch.jobsEditor)
- 
  
  
    
      作业的服务账号(默认情况下为默认 Compute Engine 服务账号)的 Service Account User (roles/iam.serviceAccountUser)
- 
            如需确定网络和子网,您需要拥有以下角色:
              
  
  
    
      项目的 Compute Network Viewer  (roles/compute.networkViewer)
 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 
- 
  
  
    
      项目的 Batch Job Editor  (
- 
确定要用于作业的网络。您为作业指定的网络必须满足以下要求:
- 该网络是与作业位于同一项目中的 Virtual Private Cloud (VPC) 网络,或者是作业项目托管或共享的共享 VPC 网络。
- 网络包含您要运行作业的位置中的子网。
- 
  网络允许您的作业所需的访问权限。例如,如果您的作业需要虚拟机之间的通信(例如,使用 MPI 库在紧密耦合的任务之间进行通信的作业),请确保网络具有允许作业的虚拟机之间建立连接的防火墙规则。
了解如何为常见使用场景配置 VPC 防火墙规则。 
 
- 
如果您希望作业在由其他项目托管的共享 VPC 网络的子网上运行,则必须授予您项目的 Batch 服务代理使用该子网的权限。
  
  
  
  
  
  
  
    
    <0x如需确保项目的 Batch 服务代理具有在共享 VPC 网络的子网上创建作业所需的权限,请让您的管理员向项目的 Batch 服务代理授予共享 VPC 子网的 Compute Network User ( roles/compute.networkUser) IAM 角色。如需了解详情,请参阅为服务账号设置共享 VPC 的相关文档。 
创建在特定网络上运行的作业
在创建作业时指定作业的网络。 具体而言,您需要指定一个 VPC 网络和一个子网,这两个网络和子网位于您要运行此作业的位置。
如果您想在创建此作业时使用虚拟机实例模板,则必须在虚拟机实例模板中指定网络。否则,请按照以下步骤使用 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 网络,请指定宿主项目。
- 否则,请指定当前项目。
 
- NETWORK:当前项目中的 VPC 网络的名称,或由当前项目托管或与当前项目共享的共享 VPC 网络的名称。
- REGION:子网和作业所用虚拟机所在的区域:- 如果您添加 allowedLocations字段来指定作业的虚拟机的允许位置,则必须在此处指定同一区域。
- 否则,该区域必须与您为作业选择的位置 (LOCATION) 相同。
 
- 如果您添加 
- SUBNET:属于 VPC 网络且与作业的虚拟机位于同一区域的子网的名称。
 
使用 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" } }- 替换以下内容: 
- 使用 - 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:您的项目的项目 ID。
- LOCATION:相应作业的位置。
- JOB_NAME:相应作业的名称。
- HOST_PROJECT_ID:您指定的网络所属项目的项目 ID:- 如果您使用的是共享 VPC 网络,请指定宿主项目。
- 否则,请指定当前项目 (PROJECT_ID)。
 
- NETWORK:当前项目中的 VPC 网络的名称,或由当前项目托管或与当前项目共享的共享 VPC 网络的名称。
- REGION:子网和作业所用虚拟机所在的区域:- 如果您添加 allowedLocations字段来指定作业的虚拟机的允许位置,则必须在此处指定同一区域。
- 否则,该区域必须与您为作业选择的位置 (LOCATION) 相同。
 
- 如果您添加 
- SUBNET:属于 VPC 网络且与作业的虚拟机位于同一区域的子网的名称。