Especifica una red y una subred

En este documento, se explica cómo especificar una red o subred y ambas opciones cuando ejecutas trabajos de Dataflow.

En este documento, se requiere que sepas cómo crear redes y subredes de Google Cloud. En este documento, también se requiere estar familiarizado con los términos de red que se analizan en la siguiente sección.

La red default tiene parámetros de configuración que permiten que se ejecuten trabajos de Dataflow. Sin embargo, otros servicios también pueden usar esta red. Asegúrate de que tus cambios a la red default sean compatibles con todos los servicios. De forma alternativa, crea una red independiente para Dataflow.

Para obtener más información sobre cómo solucionar problemas de red, consulta Soluciona problemas de red de Dataflow.

Terminología de red de Google Cloud

Red y subred para un trabajo de Dataflow

Cuando creas un trabajo de Dataflow, puedes especificar una red, una subred o ambas opciones.

Ten en cuenta los siguientes lineamientos:

  • Si no estás seguro sobre qué parámetro usar, especifica solo el parámetro de subred. El parámetro de red se especifica de forma implícita para ti.

  • Si omites los parámetros de la subred y la red, Google Cloud supone que deseas usar una red de VPC en modo automático llamada default. Si no tienes una red llamada default en tu proyecto, debes especificar una red o subred alternativa.

Lineamientos para especificar un parámetro de red

  • Puedes seleccionar una red de VPC de modo automático en tu proyecto con el parámetro de red.

  • Puedes especificar una red solo con su nombre y no con la URL completa.

  • También puedes usar el parámetro de red para seleccionar una red de VPC compartida solo si se cumplen las dos condiciones siguientes:

    • La red de VPC compartida que seleccionas es una red de modo automático.

    • Eres un administrador de proyectos de servicio con permisos a nivel del proyecto para todo el proyecto host de VPC compartida. Un administrador de VPC compartida te otorgó la Función de usuario de red de Compute para todo el proyecto host, por lo que puedes usar todas sus redes y subredes.

  • Para todos los demás casos, debes especificar una subred.

Lineamientos para especificar un parámetro de subred

  • Si especificas una subred, Dataflow elige la network por ti. Por lo tanto, cuando especificas una subred, puedes omitir el parámetro de red

  • Para seleccionar una subred específica en una red, usa el parámetro de subred.

  • Especifica una subred con una URL completa o una ruta abreviada. Si la subred está ubicada en una red de VPC compartida, debes usar la URL completa.

  • Debes seleccionar una subred que se encuentre en la misma región que la zona donde ejecutas tus trabajadores de Dataflow. Por ejemplo, debes especificar el parámetro de subred en las siguientes situaciones:

    • La subred que necesitas está en una red de VPC de modo personalizado.

    • Eres un administrador de proyectos de servicio con permisos de nivel de subred para una subred específica en un proyecto host de VPC compartida.

  • El tamaño de la subred solo limita la cantidad de instancias según el número de direcciones IP disponibles. Este tamaño no afecta el rendimiento de los Controles del servicio de VPC de Dataflow.

Lineamientos a fin de especificar un parámetro de subred para una VPC compartida

  • Cuando especifiques la URL de la subred para la VPC compartida, asegúrate de que HOST_PROJECT_ID sea el proyecto en el que se aloja la VPC.

  • Si la subred está ubicada en una red de VPC compartida, debes usar la URL completa.

  • Asegúrate de que la subred de la VPC compartida esté compartida con la cuenta de servicio de Dataflow y que tenga el rol de usuario de la red de Compute asignada en la subred especificada. El rol de usuario de la red de Compute debe asignarse a la cuenta de servicio de Dataflow en el proyecto host.

    • En la consola de Google Cloud, ve a la página VPC compartida y busca la subred. En la columna Compartido con, puedes ver si la subred de VPC se comparte con la cuenta de servicio de Dataflow.
    • Si la red no está compartida, aparece el siguiente mensaje de error: Error: Message: Required 'compute.subnetworks.get' permission.

Ejemplo de especificaciones de red y subred

Ejemplo de una URL completa que especifica una subred:

https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION_NAME/subnetworks/SUBNETWORK_NAME

Reemplaza lo siguiente:

  • HOST_PROJECT_ID: el ID del proyecto host
  • REGION_NAME: la región de tu trabajo de Dataflow
  • SUBNETWORK_NAME: el nombre de tu subred de Compute Engine.

La siguiente es una URL de ejemplo, en la que el ID del proyecto host es my-cloud-project, la región es us-central1 y el nombre de la subred es mysubnetwork:

 https://www.googleapis.com/compute/v1/projects/my-cloud-project/regions/us-central1/subnetworks/mysubnetwork

A continuación, se muestra un ejemplo de un formulario corto que especifica una subred:

regions/REGION_NAME/subnetworks/SUBNETWORK_NAME

Reemplaza lo siguiente:

  • REGION_NAME: la región de tu trabajo de Dataflow
  • SUBNETWORK_NAME: el nombre de tu subred de Compute Engine.

Ejecuta tu canalización con la red especificada

En la mayoría de los casos, si quieres usar una red distinta de la predeterminada que creó Google Cloud, debes especificar la subred. La red se infiere de manera automática desde la subred que especifiques. Si deseas obtener más información, consulta los Lineamientos para especificar un parámetro de red en este documento.

En el siguiente ejemplo, se muestra cómo ejecutar la canalización desde la línea de comandos o mediante la API de REST. En el ejemplo, se especifica una red.

Java

mvn compile exec:java \
    -Dexec.mainClass=INPUT_PATH \
    -Dexec.args="--project=HOST_PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --output=gs://STORAGE_BUCKET/output \
        --region=REGION \
        --runner=DataflowRunner \
        --network=NETWORK_NAME"

Python

python -m INPUT_PATH \
    --project HOST_PROJECT_ID \
    --region=REGION \
    --runner DataflowRunner \
    --staging_location gs://STORAGE_BUCKET/staging \
    --temp_location gs://STORAGE_BUCKET/temp \
    --output gs://STORAGE_BUCKET/output \
    --network NETWORK_NAME

Go

wordcount
    --project HOST_PROJECT_ID \
    --region HOST_GCP_REGION \
    --runner dataflow \
    --staging_location gs://STORAGE_BUCKET/staging \
    --temp_location gs://STORAGE_BUCKET/temp \
    --input INPUT_PATH \
    --output gs://STORAGE_BUCKET/output \
    --network NETWORK_NAME

API

Si ejecutas una plantilla de Dataflow mediante la API de REST, agrega network o subnetwork, o ambas, al objeto environment.

POST https://dataflow.googleapis.com/v1b3/projects/[YOUR_PROJECT_ID]/templates:launch?gcsPath=gs://dataflow-templates/wordcount/template_file
{
    "jobName": "JOB_NAME",
    "parameters": {
       "inputFile" : "INPUT_PATH",
       "output": "gs://STORAGE_BUCKET/output"
    },
    "environment": {
       "tempLocation": "gs://STORAGE_BUCKET/temp",
       "network": "NETWORK_NAME",
       "zone": "us-central1-f"
    }
}

Reemplaza lo siguiente:

  • JOB_NAME: el nombre de tu trabajo de Dataflow (solo la API)
  • INPUT_PATH: la ruta de acceso a tu origen
  • HOST_PROJECT_ID: el ID del proyecto host
  • REGION: Es una región de Dataflow, como us-central1
  • STORAGE_BUCKET: el bucket de almacenamiento
  • NETWORK_NAME: el nombre de tu red de Compute Engine.

Ejecuta tu canalización con la subred especificada

Si eres un administrador de proyectos de servicio que solo tiene permiso para usar subredes específicas en una red de VPC compartida, debes especificar el parámetro de subnetwork con una subred que tengas permiso para usar.

En el siguiente ejemplo, se muestra cómo ejecutar la canalización desde la línea de comandos o mediante la API de REST. En el ejemplo, se especifica una subred. También puedes especificar la red.

Java

mvn compile exec:java \
    -Dexec.mainClass=INPUT_PATH \
    -Dexec.args="--project=HOST_PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --output=gs://STORAGE_BUCKET/output \
        --region=REGION \
        --runner=DataflowRunner \
        --subnetwork=https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME"

Python

python -m INPUT_PATH \
    --project HOST_PROJECT_ID \
    --region=REGION \
    --runner DataflowRunner \
    --staging_location gs://STORAGE_BUCKET/staging \
    --temp_location gs://STORAGE_BUCKET/temp \
    --output gs://STORAGE_BUCKET/output \
    --subnetwork https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME

Go

wordcount
    --project HOST_PROJECT_ID \
    --region HOST_GCP_REGION \
    --runner dataflow \
    --staging_location gs://STORAGE_BUCKET/staging \
    --temp_location gs://STORAGE_BUCKET/temp \
    --input INPUT_PATH \
    --output gs://STORAGE_BUCKET/output \
    --subnetwork https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME

API

Si ejecutas una plantilla de Dataflow mediante la API de REST, agrega network o subnetwork, o ambos, a la environment.

POST https://dataflow.googleapis.com/v1b3/projects/[YOUR_PROJECT_ID]/templates:launch?gcsPath=gs://dataflow-templates/wordcount/template_file
{
    "jobName": "JOB_NAME",
    "parameters": {
       "inputFile" : "INPUT_PATH",
       "output": "gs://STORAGE_BUCKET/output"
    },
    "environment": {
       "tempLocation": "gs://STORAGE_BUCKET/temp",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME",
       "zone": "us-central1-f"
    }
}

Reemplaza lo siguiente:

  • JOB_NAME: el nombre de tu trabajo de Dataflow (solo la API)
  • INPUT_PATH: la ruta de acceso a tu origen
  • HOST_PROJECT_ID: el ID del proyecto host
  • REGION: Es una región de Dataflow, como us-central1
  • STORAGE_BUCKET: el bucket de almacenamiento
  • SUBNETWORK_NAME: el nombre de tu subred de Compute Engine.

Desactiva una dirección IP externa

Para desactivar una dirección IP externa, consulta Configura el acceso a Internet y las reglas de firewall.