Este documento explica como especificar uma rede ou uma sub-rede ou ambas as opções ao executar jobs do Dataflow.
Para seguir as etapas, você precisa saber como criar redes e sub-redes do Google Cloud. Você também precisa 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 Redes 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 a VPC compartilhada, consulte VPC compartilhada.
VPC Service Controls. O Dataflow VPC Service Controls ajuda a proteger contra ações acidentais ou direcionadas de entidades externas ou internas, o que ajuda a minimizar riscos de exfiltração de dados não justificados. É 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 do VPC Service Controls. Para saber mais sobre as limitações ao usar o Dataflow com o VPC Service Controls, consulte 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 chamadadefault
no projeto, especifique uma rede ou sub-rede alternativa.
Diretrizes para especificar um parâmetro de rede
Para selecionar uma rede VPC de modo automático no seu projeto, use o parâmetro de rede. Para mais informações, consulte Criar uma rede VPC de modo automático.
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.
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 o número de instâncias pelo 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. Veja um exemplo de URL completo que especifica uma sub-rede.
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 VPC compartilhada.
Selecione um projeto hospedeiro.
Na seção Acesso individual à sub-rede, selecione sua sub-rede. O painel Permissões no nível da sub-rede exibe as permissões para esta sub-rede. Você pode ver se a sub-rede VPC está atribuída à função de usuário da rede do Compute.
Para conceder permissões, no painel Permissões no nível da sub-rede, clique em Adicionar principal.
Se a rede não for compartilhada, quando você tentar executar o job, a seguinte mensagem de erro será exibida:
Error: Message: Required 'compute.subnetworks.get' permission
. Para mais informações, consulte Permissão 'compute.subnetworks.get' necessária em "Solucionar problemas de permissões do Dataflow".
Exemplo de especificações de rede e sub-rede
O exemplo a seguir mostra 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 DataflowSUBNETWORK_NAME
: o nome da sub-rede do Compute Engine.
Confira a seguir um exemplo de URL em que o ID do projeto 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 DataflowSUBNETWORK_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. Este 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 origemHOST_PROJECT_ID
: ID do projeto host.REGION
: uma região do Dataflow, comous-central1
STORAGE_BUCKET
: o bucket de armazenamentoNETWORK_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 origemHOST_PROJECT_ID
: ID do projeto host.REGION
: uma região do Dataflow, comous-central1
STORAGE_BUCKET
: o bucket de armazenamentoSUBNETWORK_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.