En este documento se explica cómo especificar una red, una subred o ambas opciones al ejecutar trabajos de Dataflow.
Para seguir los pasos, debes saber cómo crear redes y subredes de Google Cloud Platform. También debes familiarizarte con los términos de redes que se explican en la siguiente sección.
La red default
tiene configuraciones que permiten ejecutar tareas de Dataflow. Sin embargo, es posible que otros servicios también usen esta red. Asegúrate de que los cambios que hagas en la red default
sean compatibles con todos tus servicios. También puedes crear una red independiente para Dataflow.
Para obtener más información sobre cómo solucionar problemas de red, consulta el artículo Solucionar problemas de red de Dataflow.
Terminología de redes de Google Cloud Platform
Red de VPC. Una red de VPC es una versión virtual de una red física que se implementa en la red de producción de Google. Una VPC, a veces denominada red, proporciona conectividad a los recursos de un proyecto.
Para obtener más información sobre las VPC, consulta Redes de VPC.
Red de VPC compartida. Cuando usas la VPC compartida, designas un proyecto como proyecto host y le adjuntas uno o varios proyectos de servicio. Las redes de VPC del proyecto del host se denominan redes de VPC compartidas. Si un administrador de VPC compartida te define como administrador de proyecto de servicio, tienes permiso para usar al menos algunas de las subredes de las redes del proyecto host.
Para obtener más información sobre la VPC compartida, consulta VPC compartida.
Controles de Servicio de VPC. Controles de Servicio de VPC de Dataflow ayuda a protegerse contra acciones accidentales o dirigidas por entidades externas o internas, lo que ayuda a minimizar los riesgos de filtración externa de datos no deseada. Puedes usar Controles de Servicio de VPC para crear perímetros que protejan los recursos y los datos de los servicios que especifiques explícitamente.
Para obtener más información sobre Controles de Servicio de VPC, consulta la información general sobre Controles de Servicio de VPC. Para obtener información sobre las limitaciones al usar Dataflow con Controles de Servicio de VPC, consulta Productos admitidos y limitaciones.
Reglas de cortafuegos. Usa reglas de cortafuegos para permitir o denegar el tráfico hacia y desde tus VMs. Para obtener más información, consulta el artículo Configurar el acceso a Internet y las reglas de cortafuegos.
Red y subred de una tarea de Dataflow
Cuando creas una tarea de Dataflow, puedes especificar una red, una subred o ambas opciones.
Ten en cuenta las siguientes directrices:
Si no sabes qué parámetro usar, especifica solo el parámetro de subred. El parámetro de red se especifica implícitamente.
Si omites los parámetros de subred y de red, Google Cloud asume que quieres usar una red VPC de modo automático llamada
default
. Si no tienes ninguna red llamadadefault
en tu proyecto, debes especificar una red o subred alternativa.
Directrices para especificar un parámetro de red
Para seleccionar una red de VPC de modo automático en tu proyecto, usa el parámetro de red. Para obtener más información, consulta el artículo Crear una red de VPC automática.
Puedes especificar una red usando solo su nombre, no la URL completa.
Solo puede usar el parámetro de red para seleccionar una red de VPC compartida si se cumplen las dos condiciones siguientes:
La red de VPC compartida que selecciones será una red de VPC de modo automático.
Eres administrador de proyectos de servicio con permisos a nivel de proyecto para todo el proyecto de host de VPC compartida. Un administrador de VPC compartida te ha concedido el rol Usuario de red de Compute para todo el proyecto del host, por lo que puedes usar todas sus redes y subredes.
En todos los demás casos, debe especificar una subred.
Directrices para especificar un parámetro de subred
Si especificas una subred, Dataflow elige la red por ti. Por lo tanto, al especificar una subred, puedes omitir el parámetro de red.
Para seleccionar una subred específica de una red, usa el parámetro subnetwork.
Especifica una subred mediante 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 en la misma región que la zona en la que ejecutas tus trabajadores de Dataflow.
Debe especificar el parámetro de subred en las siguientes situaciones:
La subred que especifiques está en una red VPC de modo personalizado.
Eres administrador de un proyecto de servicio con permisos a nivel de subred en una subred específica de un proyecto del host de una VPC compartida.
El número de direcciones IP disponibles limita el número de trabajadores de Dataflow que se pueden crear. Por ejemplo, si el intervalo IPv4 de la subred es 10.0.0.0/24, se proporcionan 252 direcciones IP utilizables para las VMs de trabajador. Asegúrate de que el espacio de direcciones IP sea lo suficientemente grande para tus cargas de trabajo previstas, incluido el escalado automático horizontal. Usa las pruebas de carga para validar tus suposiciones.
Directrices para especificar un parámetro de subred en una VPC compartida
Cuando especifiques la URL de la subred de 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. Consulta un ejemplo de una URL completa que especifica una subred.
Asegúrate de que la subred de VPC compartida se haya compartido con la cuenta de servicio de Dataflow y de que tenga asignado el rol Usuario de red de Compute en la subred especificada. El rol Usuario de red de Compute debe asignarse a la cuenta de servicio de Dataflow en el proyecto host.
En la Google Cloud consola, ve a la página VPC compartida.
Selecciona un proyecto host.
En la sección Acceso a subredes concretas, selecciona tu subred. En el panel Permisos de nivel de subred se muestran los permisos de esta subred. Puedes ver si la subred de VPC tiene asignado el rol Usuario de red de Compute.
Para conceder permisos, en el panel Permisos de nivel de subred, haz clic en Añadir principal.
Si la red no se comparte, cuando intentes ejecutar el trabajo, aparecerá el siguiente mensaje de error:
Error: Message: Required 'compute.subnetworks.get' permission
. Para obtener más información, consulta la sección Permiso "compute.subnetworks.get" obligatorio del artículo "Solucionar problemas de permisos de Dataflow".
Ejemplo de especificaciones de red y subred
En el siguiente ejemplo se muestra una URL completa que especifica una subred:
https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION_NAME/subnetworks/SUBNETWORK_NAME
Haz los cambios siguientes:
HOST_PROJECT_ID
: el ID del proyecto hostREGION_NAME
: la región de tu tarea de DataflowSUBNETWORK_NAME
: el nombre de tu subred de Compute Engine
A continuación, se muestra un ejemplo de URL en el 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 abreviado que especifica una subred:
regions/REGION_NAME/subnetworks/SUBNETWORK_NAME
Haz los cambios siguientes:
REGION_NAME
: la región de tu tarea de DataflowSUBNETWORK_NAME
: el nombre de tu subred de Compute Engine
Ejecutar el flujo de procesamiento con la red especificada
Si quieres usar una red que no sea la predeterminada creada porGoogle Cloud, en la mayoría de los casos, debes especificar la subred. La red se deduce automáticamente de la subred que especifiques. Para obtener más información, consulta las directrices para especificar un parámetro de red en este documento.
En el siguiente ejemplo se muestra cómo ejecutar una canalización desde la línea de comandos o mediante la API REST. En este 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
con la API REST,
añade network
o subnetwork
, o ambos, 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"
}
}
Haz los cambios siguientes:
JOB_NAME
: el nombre de tu tarea de Dataflow (solo API)INPUT_PATH
: la ruta a tu fuenteHOST_PROJECT_ID
: el ID del proyecto hostREGION
: una región de Dataflow, comous-central1
STORAGE_BUCKET
: el segmento de almacenamientoNETWORK_NAME
: el nombre de tu red de Compute Engine
Ejecuta tu flujo de procesamiento con la subred especificada
Si eres administrador de un proyecto de servicio y solo tienes permiso para usar subredes específicas en una red de VPC compartida, debes especificar el parámetro subnetwork
con una subred para la que tengas permiso de uso.
En el siguiente ejemplo se muestra cómo ejecutar una canalización desde la línea de comandos o mediante la API 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 REST, añade network
o subnetwork
, o ambos, 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",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK_NAME",
"zone": "us-central1-f"
}
}
Haz los cambios siguientes:
JOB_NAME
: el nombre de tu tarea de Dataflow (solo API)INPUT_PATH
: la ruta a tu fuenteHOST_PROJECT_ID
: el ID del proyecto hostREGION
: una región de Dataflow, comous-central1
STORAGE_BUCKET
: el segmento de almacenamientoSUBNETWORK_NAME
: el nombre de tu subred de Compute Engine
Desactivar una dirección IP externa
Para desactivar una dirección IP externa, consulta Configurar el acceso a Internet y las reglas de cortafuegos.