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 é uma versão virtual de uma rede física, implementada dentro da rede de produção do Google Às vezes chamada de rede, uma VPC fornece conectividade para recursos em um projeto.

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

  • Rede VPC compartilhada. Quando você usa a VPC compartilhada, precisa designar um projeto como host e anexar um ou mais projetos de serviço a ele. As redes VPC no projeto host são chamadas de redes VPC compartilhadas. 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 Dataflow VPC Service Controls ajuda a proteger contra ações acidentais ou propositais de entidades externas ou internas, o que ajuda a minimizar riscos de exfiltração indesejada de dados. É possível usar o VPC Service Controls para criar perímetros que protejam os recursos e os dados de serviços especificados explicitamente.

    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.

  • Regras de firewall. Use regras de firewall para permitir ou negar o tráfego de e para suas VMs. Para mais informações, consulte Configurar o acesso à Internet e as regras de firewall.

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.