Como configurar modelos Flex

Nesta página, você encontra informações sobre permissões, variáveis de ambiente obrigatórias do Dockerfile e os opções de pipeline compatíveis para os modelos flexíveis do Dataflow.

Para configurar um modelo flexível de amostra, consulte o tutorial de modelo flexível.

Noções básicas sobre as permissões do modelo flexível

Ao trabalhar com modelos flexíveis, há três conjuntos de permissões que você deve conhecer:

  • Permissões para criar recursos
  • Permissões para criar um modelo flexível
  • Permissões para executar um modelo flexível

Permissões para criar recursos

Para desenvolver e executar um pipeline de modelo flexível, é necessário criar vários recursos (por exemplo, um bucket de preparo). Para tarefas únicas de criação de recursos, use o papel de proprietário básico.

Permissões para criar um modelo flexível

Como desenvolvedor de um modelo flexível, é necessário criar o modelo para disponibilizá-lo aos usuários. A criação envolve o upload de uma especificação de modelo em um bucket do Cloud Storage e o provisionamento de uma imagem do Docker com o código e as dependências necessárias para executar o pipeline. Para criar um modelo flexível, é necessário ter acesso de leitura e gravação ao Cloud Storage e acesso de leitura e gravação ao Container Registry. Para conceder essas permissões, atribua o seguinte papel:

  • Administrador do Storage (roles/storage.admin)

Permissões para executar um modelo flexível

Quando você executa um modelo flexível, o Dataflow cria um job para você. Para criar o job, a conta de serviço do Dataflow precisa da seguinte permissão:

  • dataflow.serviceAgent

Quando você usa o Dataflow pela primeira vez, o serviço atribui esse papel para você. Portanto, nenhuma ação é necessária para conceder essa permissão.

Por padrão, a conta de serviço do Compute Engine é usada para VMs de inicializador e de worker. A conta de serviço precisa dos seguintes papéis e capacidades:

  • Administrador de objetos do Storage (roles/storage.objectAdmin)
  • Visualizador (roles/viewer)
  • Worker do Dataflow (roles/dataflow.worker)
  • Acesso de leitura e gravação ao bucket de preparo
  • Acesso de leitura à imagem do modelo flexível

Para conceder acesso de leitura e gravação ao bucket de preparo, use o papel Administrador de objetos do Storage (roles/storage.objectAdmin). Para mais informações, consulte Papéis do IAM para o Cloud Storage.

Para conceder acesso de leitura à imagem do modelo flexível, use o papel Visualizador de objeto do Storage (roles/storage.objectViewer). Para mais informações, consulte Como configurar o controle de acesso.

Como configurar variáveis de ambiente do Dockerfile necessárias

Se quiser criar seu próprio arquivo do Docker para um job de modelo Flex, especifique as seguintes variáveis de ambiente:

Java

Especifique FLEX_TEMPLATE_JAVA_MAIN_CLASS e FLEX_TEMPLATE_JAVA_CLASSPATH no seu Dockerfile.

ENV Descrição Obrigatório
FLEX_TEMPLATE_JAVA_MAIN_CLASS Especifica qual classe Java será executada para iniciar o modelo flexível. SIM
FLEX_TEMPLATE_JAVA_CLASSPATH Especifica o local dos arquivos de classe. SIM
FLEX_TEMPLATE_JAVA_OPTIONS Especifica as opções do Java a serem transmitidas ao iniciar o modelo flexível. NÃO

Python

Especifique FLEX_TEMPLATE_PYTHON_PY_FILE no Dockerfile. Também é possível definir o seguinte no Dockerfile: FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE, FLEX_TEMPLATE_PYTHON_PY_OPTIONS, FLEX_TEMPLATE_PYTHON_SETUP_FILE e FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES

Por exemplo, configuramos as seguintes variáveis de ambiente no tutorial Streaming em modelos flexíveis do Python:

ENV FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE="${WORKDIR}/requirements.txt"
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/streaming_beam.py"
ENV Descrição Obrigatório
FLEX_TEMPLATE_PYTHON_PY_FILE Especifica qual arquivo Python executar para iniciar o modelo flexível. SIM
FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE Especifica o arquivo de requisitos para instalar as dependências do lançamento. Se você especificar FLEX_TEMPLATE_PYTHON_SETUP_FILE, não defina esta variável. NÃO
FLEX_TEMPLATE_PYTHON_SETUP_FILE Especifica o arquivo de configuração para instalar as dependências da inicialização. Para informações sobre como usar os arquivos de configuração, leia Várias dependências de arquivo. NÃO
FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES

Especifica os pacotes que não estão disponíveis publicamente. Para informações sobre como usar pacotes extras, leia Dependências locais ou não PyPI.

NÃO
FLEX_TEMPLATE_PYTHON_PY_OPTIONS Especifica as opções do Python que serão transmitidas ao iniciar o modelo flexível. NÃO

Como escolher a imagem base

É possível usar uma imagem base fornecida pelo Google para empacotar as imagens de contêiner do modelo usando o Docker. Escolha a tag mais recente nas imagens de base dos modelos flexíveis. É recomendável usar uma tag de imagem específica em vez de latest.

Especifique a imagem base no seguinte formato:

gcr.io/dataflow-templates-base/IMAGE_NAME:TAG

Substitua:

Como usar imagens de contêiner personalizadas

Se o pipeline usar uma imagem de contêiner personalizada, recomendamos usá-la como imagem base para a imagem do Docker de modelo flexível. Para fazer isso, copie o binário do inicializador do modelo flexível da imagem do inicializador do modelo fornecido pelo Google para a imagem personalizada. Por exemplo, Dockerfile:

FROM gcr.io/dataflow-templates-base/IMAGE_NAME:TAG as template_launcher
FROM USER_CUSTOM_IMAGE

COPY --from=template_launcher /opt/google/dataflow/python_template_launcher /opt/google/dataflow/python_template_launcher

ARG WORKDIR=/dataflow/template
RUN mkdir -p ${WORKDIR}
WORKDIR ${WORKDIR}

COPY streaming_beam.py .

ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/streaming_beam.py"

ENTRYPOINT ["/opt/google/dataflow/python_template_launcher"]

Crie um novo Dockerfile, especificando a imagem de tela de início do modelo flexível como pai e adicione as personalizações. Para mais informações sobre a gravação de Dockerfiles, consulte Práticas recomendadas para gravar Dockerfiles. Para mais informações, consulte nosso guia sobre como usar contêineres personalizados.

Substitua:

  • IMAGE_NAME: uma imagem de inicializador fornecido pelo Google Os binários são criados para os sistemas operacionais Debian GNU/Linux.
  • TAG: um nome de versão para a imagem do inicializador, encontrado na referência de imagens de inicializadores dos modelos flexíveis. Evite usar latest e fixe em uma tag de versão específica para melhor estabilidade e solução de problemas.
  • USER_CUSTOM_IMAGE: sua imagem de contêiner personalizada

Como especificar opções de pipeline

Para mais informações sobre as opções de pipeline compatíveis diretamente com os modelos flexíveis, leia Opções de pipeline.

Use qualquer opção de pipeline do Apache Beam indiretamente. Se você estiver usando um arquivo metadata.json para o job de modelo flexível, inclua essas opções de pipeline no arquivo. Esse arquivo de metadados precisa seguir o formato em TemplateMetadata. Para ver um exemplo de arquivo metadata.json, consulte a amostra do modelo flexível do SQL de streaming.

Caso contrário, ao iniciar o job de modelo flexível, transmita essas opções de pipeline usando o campo de parâmetros.

API

Inclua opções de pipeline usando o campo parameters.

gcloud

Inclua opções de pipeline usando a sinalização parameters.

Ao transmitir parâmetros do tipo List ou Map, pode ser necessário definir parâmetros em um arquivo YAML e usar o flags-file. Para ver um exemplo dessa abordagem, consulte a etapa "Criar um arquivo com parâmetros..." nesta solução.

A seguir