Especificar uma rede e sub-rede

Este documento explica como especificar uma rede ou uma sub-rede ou ambas as opções ao executar jobs do Dataflow.

Neste documento, você precisa saber como criar redes e sub-redes do Google Cloud. Neste documento, também é necessário conhecer os termos de rede discutidos na próxima seção.

Observação: a rede default tem configurações que permitem a execução de jobs do Dataflow. No entanto, outros serviços também podem usar essa rede. Certifique-se de que as alterações na rede default sejam compatíveis com todos os seus serviços. Se preferir, crie uma rede separada para o Dataflow.

Para mais informações sobre como solucionar problemas de rede, consulte Resolver problemas de rede do Dataflow.

Terminologia de rede do Google Cloud

  • Rede VPC. Uma rede VPC, algumas vezes chamada apenas de rede, fornece conectividade para recursos em um projeto.

    Para saber mais sobre a VPC, consulte a visão geral da rede VPC.

  • Rede VPC compartilhada. Em uma organização, a rede VPC compartilhada é aquela que existe em um projeto separado, chamado de projeto de host. Caso você tenha sido designado como administrador de projeto de serviço por um administrador de VPC compartilhada, terá a permissão de usar pelo menos algumas das sub-redes nas redes do projeto de host.

    Para saber mais sobre VPC compartilhada, acesse Visão geral da VPC compartilhada.

  • VPC Service Controls. O VPC Service Controls do Dataflow ajuda a proteger os recursos e serviços do pipeline.

    Para saber mais sobre o VPC Service Controls, consulte a visão geral sobre ele. Para saber mais sobre as limitações ao usar o Dataflow com o VPC Service Controls, consulte os produtos e limitações compatíveis.

Rede e sub-rede para um job do Dataflow

Ao criar um job do Dataflow, é possível especificar uma rede, uma sub-rede ou ambas as opções.

Veja as diretrizes abaixo:

  • Quando estiver em dúvida sobre qual parâmetro usar, especifique apenas o parâmetro de sub-rede. O parâmetro de rede é especificado implicitamente para você.

  • Se você omitir os parâmetros de sub-rede e de rede, o Google Cloud presumirá que você pretende usar uma rede VPC de modo automático chamada default. Se você não tiver uma rede chamada default no projeto, especifique uma rede ou sub-rede alternativa.

Diretrizes para especificar um parâmetro de rede

  • É possível selecionar uma rede de modo automático no seu projeto com o parâmetro de rede.

  • Só é possível especificar uma rede usando o nome dela, e não o URL completo.

  • O parâmetro de rede só pode ser usado para selecionar uma rede VPC compartilhada quando as duas condições a seguir são verdadeiras:

    • A rede VPC compartilhada selecionada é uma rede VPC de modo automático.

    • Você é um administrador de projetos de serviços com permissões para envolvidos no projeto em todo o projeto de host da VPC compartilhada. Um administrador de VPC compartilhada concedeu a você o papel de usuário de rede do Compute para todo o projeto host. Sendo assim, você tem permissão para usar todas as respectivas redes e sub-redes.

  • Para os demais casos, você precisa especificar uma sub-rede.

Diretrizes para especificar um parâmetro de sub-rede

  • Caso você especifique uma subnetwork, o Dataflow escolherá a network para você. Portanto, quando você especificar uma subnetwork, omita o parâmetro network.

  • Para selecionar uma sub-rede específica em uma rede, use o parâmetro de sub-rede.

  • Especifique uma sub-rede usando um URL completo ou um caminho abreviado. Caso a sub-rede esteja localizada em uma rede VPC compartilhada, use o URL completo.

  • Você precisa selecionar uma sub-rede na mesma região em que executa os workers do Dataflow. Por exemplo, especifique o parâmetro de sub-rede nas seguintes situações:

    • A sub-rede de que você precisa está em uma rede VPC no modo personalizado.

    • Você é um administrador de projetos de serviços com permissões de nível de sub-rede para uma sub-rede específica, em um projeto de host de VPC compartilhada.

  • O tamanho da sub-rede limita apenas o número de instâncias por número de endereços IP disponíveis. Esse dimensionamento não afeta o desempenho do VPC Service Controls do Dataflow.

Diretrizes para especificar um parâmetro de sub-rede para VPC compartilhada

  • Ao especificar o URL de sub-rede para VPC compartilhada, verifique se HOST_PROJECT_ID é o projeto em que a VPC está hospedada.

  • Caso a sub-rede esteja localizada em uma rede VPC compartilhada, use o URL completo.

  • Verifique se a sub-rede da VPC compartilhada está compartilhada com a conta de serviço do Dataflow e se tem o papel de usuário da rede do Compute atribuído na sub-rede especificada. O papel de Usuário da rede do Compute precisa ser atribuído à conta de serviço do Dataflow no projeto host.

    • No console do Google Cloud, acesse a página da VPC compartilhada e procure a sub-rede. Na coluna Compartilhada com, você vê se a sub-rede VPC é compartilhada com a conta de serviço do Dataflow.
    • Se a rede não for compartilhada, a seguinte mensagem de erro vai aparecer: Error: Message: Required 'compute.subnetworks.get' permission.

Exemplo de especificações de rede e sub-rede

Exemplo de um URL completo que especifica uma sub-rede:

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

Substitua:

  • HOST_PROJECT_ID: ID do projeto host.
  • REGION_NAME: a região do job do Dataflow
  • SUBNETWORK_NAME: o nome da sub-rede do Compute Engine.

Veja a seguir um URL de exemplo, em que o ID do projeto do host é my-cloud-project, a região é us-central1 e o nome da sub-rede é mysubnetwork:

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

Veja a seguir um exemplo de forma curta que especifica uma sub-rede:

regions/REGION_NAME/subnetworks/SUBNETWORK_NAME

Substitua:

  • REGION_NAME: a região do job do Dataflow
  • SUBNETWORK_NAME: o nome da sub-rede do Compute Engine.

Execute o pipeline com a rede especificada

Se você quiser usar uma rede diferente da rede padrão criada pelo Google Cloud, na maioria dos casos, será necessário especificar a sub-rede. A rede é inferida automaticamente com base na sub-rede que você especificou. Para mais informações, consulte Diretrizes para especificar um parâmetro de rede neste documento.

O exemplo a seguir mostra como executar o pipeline na linha de comando ou usando a API REST. O exemplo especifica uma rede.

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

Se você executar um modelo do Dataflow usando a API REST, adicione network ou subnetwork ou ambos ao 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"
    }
}

Substitua:

  • JOB_NAME: o nome do job do Dataflow (somente API)
  • INPUT_PATH: o caminho para sua origem
  • HOST_PROJECT_ID: ID do projeto host.
  • REGION: uma região do Dataflow, como us-central1
  • STORAGE_BUCKET: o bucket de armazenamento
  • NETWORK_NAME: o nome da sua rede do Compute Engine

Execute o pipeline com a sub-rede especificada

Se você for um administrador de projetos de serviços e tiver permissão apenas para usar sub-redes específicas em uma rede VPC compartilhada, precisa especificar o parâmetro subnetwork com uma sub-rede que você tem permissão para usar.

O exemplo a seguir mostra como executar o pipeline na linha de comando ou usando a API REST. O exemplo especifica uma sub-rede. Também é possível especificar a rede.

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

Se você executar um modelo do Dataflow usando a API REST, adicionar network ou subnetwork ou ambos ao 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"
    }
}

Substitua:

  • JOB_NAME: o nome do job do Dataflow (somente API)
  • INPUT_PATH: o caminho para sua origem
  • HOST_PROJECT_ID: ID do projeto host.
  • REGION: uma região do Dataflow, como us-central1
  • STORAGE_BUCKET: o bucket de armazenamento
  • SUBNETWORK_NAME: o nome da sub-rede do Compute Engine.

Desativar um endereço IP externo

Para desativar um endereço IP externo, consulte Configurar o acesso à Internet e as regras de firewall.