Os modelos Flex do Dataflow permitem que você empacote um pipeline do Dataflow para implementação. Neste tutorial, mostramos como criar um modelo Flex do Dataflow e executar um job do Dataflow usando esse modelo.
Objetivos
- Criar um modelo Flex do Dataflow.
- Use o modelo para executar um job do Dataflow.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build API:
gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build API:
gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Conceda papéis à conta de serviço padrão do Compute Engine. Execute uma vez o comando a seguir para cada um dos seguintes papéis do IAM:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.writer
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
Substitua:
PROJECT_ID
: ID do projeto;PROJECT_NUMBER
: o número do projetoSERVICE_ACCOUNT_ROLE
: cada papel individual
Prepare o ambiente
Instale o SDK e os requisitos do ambiente de desenvolvimento.
Java
Faça o download e instale a versão 17 do Kit de desenvolvimento para Java (JDK). Confirme se a variável de ambiente
JAVA_HOME
está definida e aponta para a instalação do JDK.Faça o download e instale o Apache Maven seguindo o guia de instalação do Maven (links em inglês) para seu sistema operacional específico.
Python
Use o SDK do Apache Beam para Python.
Go
Use o Guia de download e instalação do Go para fazer o download e instalar o Go no seu sistema operacional específico. Para saber quais ambientes de execução do Go são compatíveis com o Apache Beam, consulte Suporte ao ambiente de execução do Apache Beam.
Faça o download do exemplo de código.
Java
Clone o repositório
java-docs-samples
.git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Navegue até o exemplo de código deste tutorial.
cd java-docs-samples/dataflow/flex-templates/getting_started
Crie o projeto Java em um arquivo Uber JAR.
mvn clean package
Esse arquivo Uber JAR tem todas as dependências incorporadas. É possível executar esse arquivo como um aplicativo autônomo sem dependências externas em outras bibliotecas.
Python
Clone o repositório
python-docs-samples
.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Navegue até o exemplo de código deste tutorial.
cd python-docs-samples/dataflow/flex-templates/getting_started
Go
Clone o repositório
golang-samples
.git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Navegue até o exemplo de código deste tutorial.
cd golang-samples/dataflow/flex-templates/wordcount
Compile o binário Go.
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wordcount .
crie um bucket do Cloud Storage
Use o comandogcloud storage buckets create
para criar um bucket do Cloud Storage:
gcloud storage buckets create gs://BUCKET_NAME
Substitua BUCKET_NAME
por um nome para o
bucket do Cloud Storage. Os nomes dos buckets do Cloud Storage precisam ser
globalmente exclusivos e atender aos
requisitos de nomenclatura de buckets.
Crie um repositório do Artifact Registry
Crie um repositório do Artifact Registry para enviar a imagem do contêiner do Docker para o modelo.
Use o comando
gcloud artifacts repositories create
para criar um novo repositório do Artifact Registry.gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=LOCATION
Substitua:
- REPOSITORY: um nome para o repositório. Os nomes dos repositórios precisam ser exclusivos para cada local de repositório em um projeto.
- LOCATION: é o local regional ou multirregional do repositório.
Use o comando
gcloud auth configure-docker
para configurar o Docker e autenticar solicitações para o Artifact Registry. Esse comando atualiza a configuração do Docker para que você possa se conectar ao Artifact Registry para enviar imagens.gcloud auth configure-docker LOCATION-docker.pkg.dev
Os modelos Flex também podem usar imagens armazenadas em registros privados. Para mais informações, acesse Usar uma imagem de um registro particular.
Crie o modelo Flex
Nesta etapa, você usa o
comando gcloud dataflow flex-template build
para criar o modelo Flex.
Um modelo Flex consiste nos seguintes componentes:
- Uma imagem de contêiner do Docker que empacota o código do pipeline. Para modelos flexíveis
de Java e Python, a imagem Docker é criada e enviada ao repositório do Artifact Registry
quando você executa o comando
gcloud dataflow flex-template build
. - Um arquivo de especificação de modelo. Esse arquivo é um documento JSON que contém o local da imagem do contêiner, além dos metadados sobre o modelo, como parâmetros de pipeline.
O repositório de amostra no GitHub contém o arquivo metadata.json
.
Para estender seu modelo com outros metadados, crie seu próprio arquivo metadata.json
.
Java
gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-java.json \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-java:latest" \ --sdk-language "JAVA" \ --flex-template-base-image JAVA17 \ --metadata-file "metadata.json" \ --jar "target/flex-template-getting-started-1.0.jar" \ --env FLEX_TEMPLATE_JAVA_MAIN_CLASS="com.example.dataflow.FlexTemplateGettingStarted"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- LOCATION: o local
- PROJECT_ID: o ID do Google Cloud projeto
- REPOSITORY: o nome do repositório do Artifact Registry que você criou anteriormente
Python
gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-py.json \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-python:latest" \ --sdk-language "PYTHON" \ --flex-template-base-image "PYTHON3" \ --metadata-file "metadata.json" \ --py-path "." \ --env "FLEX_TEMPLATE_PYTHON_PY_FILE=getting_started.py" \ --env "FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE=requirements.txt"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- LOCATION: o local
- PROJECT_ID: o ID do Google Cloud projeto
- REPOSITORY: o nome do repositório do Artifact Registry que você criou anteriormente
Go
Use o comando
gcloud builds submit
para criar a imagem Docker usando um Dockerfile com o Cloud Build. Esse comando cria o arquivo e o envia para o repositório do Artifact Registry.gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest .
Substitua:
- LOCATION: o local
- PROJECT_ID: o ID do Google Cloud projeto
- REPOSITORY: o nome do repositório do Artifact Registry que você criou anteriormente
Use o comando
gcloud dataflow flex-template build
para criar um modelo Flex chamadowordcount-go.json
no bucket do Cloud Storage.gcloud dataflow flex-template build gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json \ --image "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest" \ --sdk-language "GO" \ --metadata-file "metadata.json"
Substitua BUCKET_NAME pelo nome do bucket do Cloud Storage criado anteriormente.
Executar o modelo Flex
Nesta etapa, você vai usar o modelo para executar um job do Dataflow.
Java
Use o comando
gcloud dataflow flex-template run
para executar um job do Dataflow que usa o modelo Flex.gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/getting_started-java.json" \ --parameters output="gs://BUCKET_NAME/output-" \ --additional-user-labels "LABELS" \ --region "REGION"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- REGION: a região
- LABELS: opcional. Rótulos anexados ao job usando o formato
<key1>=<val1>,<key2>=<val2>,...
Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.
Se o job for executado com êxito, ele gravará a saída em um arquivo chamado gs://BUCKET_NAME/output--00000-of-00001.txt
no bucket do Cloud Storage.
Python
Use o comando
gcloud dataflow flex-template run
para executar um job do Dataflow que usa o modelo Flex.gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/getting_started-py.json" \ --parameters output="gs://BUCKET_NAME/output-" \ --additional-user-labels "LABELS" \ --region "REGION"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- REGION: a região
- LABELS: opcional. Rótulos anexados ao job usando o formato
<key1>=<val1>,<key2>=<val2>,...
Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.
Se o job for executado com êxito, ele gravará a saída em um arquivo chamado gs://BUCKET_NAME/output--00000-of-00001.txt
no bucket do Cloud Storage.
Go
Use o comando
gcloud dataflow flex-template run
para executar um job do Dataflow que usa o modelo Flex.gcloud dataflow flex-template run "wordcount-go-`date +%Y%m%d-%H%M%S`" \ --template-file-gcs-location "gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json" \ --parameters output="gs://BUCKET_NAME/samples/dataflow/templates/counts.txt" \ --additional-user-labels "LABELS" \ --region "REGION"
Substitua:
- BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
- REGION: a região
- LABELS: opcional. Rótulos anexados ao job usando o formato
<key1>=<val1>,<key2>=<val2>,...
Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.
Se o job for executado com êxito, ele gravará a saída em um arquivo chamado gs://BUCKET_NAME/samples/dataflow/templates/count.txt
no bucket do Cloud Storage.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
-
Exclua o bucket do Cloud Storage e todos os objetos nele.
gcloud storage rm gs://BUCKET_NAME --recursive
-
Exclua o repositório do Artifact Registry.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION
-
Revogar os papéis concedidos à conta de serviço padrão do Compute Engine. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.writer
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=SERVICE_ACCOUNT_ROLE
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
A seguir
- Saiba como configurar modelos Flex.
- Confira a lista de modelos fornecidos pelo Google.