Criar e executar um modelo Flex


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. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

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

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. Instale a CLI do Google Cloud.
  3. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  4. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Ative a API Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build:

    gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
  7. Crie as credenciais de autenticação para sua Conta do Google:

    gcloud auth application-default login
  8. Atribua os papéis à sua Conta do Google. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Substitua PROJECT_ID pela ID do seu projeto.
    • Substitua EMAIL_ADDRESS pelo seu endereço de e-mail.
    • Substitua ROLE por cada papel individual.
  9. Instale a CLI do Google Cloud.
  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  12. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  13. Ative a API Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build:

    gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
  14. Crie as credenciais de autenticação para sua Conta do Google:

    gcloud auth application-default login
  15. Atribua os papéis à sua Conta do Google. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Substitua PROJECT_ID pela ID do seu projeto.
    • Substitua EMAIL_ADDRESS pelo seu endereço de e-mail.
    • Substitua ROLE por cada papel individual.
  16. 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.reader
    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 projeto
    • SERVICE_ACCOUNT_ROLE: cada papel individual

Prepare o ambiente

Instale o SDK e os requisitos do ambiente de desenvolvimento.

Java

  1. Faça o download e instale a versão 11 do Kit de desenvolvimento para Java (JDK, na sigla em inglês). Confirme se a variável de ambiente JAVA_HOME está definida e aponta para a instalação do JDK.

  2. 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

  1. Clone o repositório java-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  2. Navegue até o exemplo de código deste tutorial.

    cd java-docs-samples/dataflow/flex-templates/getting_started
    
  3. 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

  1. Clone o repositório python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Navegue até o exemplo de código deste tutorial.

    cd python-docs-samples/dataflow/flex-templates/getting_started
    

Go

  1. Clone o repositório golang-samples.

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    
  2. Navegue até o exemplo de código deste tutorial.

    cd golang-samples/dataflow/flex-templates/wordcount
    
  3. Compile o binário Go.

    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.

  1. 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.
  2. 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.
  • 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.

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 JAVA11 \
 --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 projeto do Google Cloud
  • 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 projeto do Google Cloud
  • REPOSITORY: o nome do repositório do Artifact Registry que você criou anteriormente

Go

  1. 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 projeto do Google Cloud
    • REPOSITORY: o nome do repositório do Artifact Registry que você criou anteriormente
  2. Use o comando gcloud dataflow flex-template build para criar um modelo Flex chamado wordcount-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

  1. 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-" \
     --region "REGION"

    Substitua:

    • BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
    • REGION: a região
  2. Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.

    Acessar "Jobs"

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

  1. 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-" \
     --region "REGION"
    

    Substitua:

    • BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
    • REGION: a região
  2. Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.

    Acessar "Jobs"

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

  1. 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" \
     --region "REGION"
    

    Substitua:

    • BUCKET_NAME: o nome do bucket do Cloud Storage criado anteriormente
    • REGION: a região
  2. Para ver o status do job do Dataflow no console do Google Cloud, acesse a página Jobs do Dataflow.

    Acessar "Jobs"

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.

Exclua o projeto

    Exclua um projeto do Google Cloud:

    gcloud projects delete PROJECT_ID

Excluir recursos individuais

  1. Exclua o bucket do Cloud Storage e todos os objetos nele.
    gcloud storage rm gs://BUCKET_NAME --recursive
  2. Exclua o repositório do Artifact Registry.
    gcloud artifacts repositories delete REPOSITORY \
        --location=LOCATION
  3. 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.reader
    gcloud projects remove-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=SERVICE_ACCOUNT_ROLE
  4. Opcional: revogue as credenciais de autenticação que você criou e exclua o arquivo de credenciais local:

    gcloud auth application-default revoke
  5. Opcional: revogar credenciais da CLI gcloud.

    gcloud auth revoke

A seguir