Configure modelos flexíveis

Esta página documenta várias opções de configuração do modelo flexível do Dataflow, incluindo:

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

Compreenda as autorizações de modelos flexíveis

Quando trabalha com modelos flexíveis, precisa de três conjuntos de autorizações:

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

Autorizações para criar recursos

Para desenvolver e executar um pipeline de modelo flexível, tem de criar vários recursos (por exemplo, um contentor de preparação). Para tarefas de criação de recursos únicas, pode usar a função de proprietário básica.

Autorizações para criar um modelo flexível

Enquanto programador de um modelo flexível, tem de criar o modelo para o disponibilizar aos utilizadores. A criação envolve o carregamento de uma especificação de modelo para um contentor do Cloud Storage e o aprovisionamento de uma imagem Docker com o código e as dependências necessárias para executar o pipeline. Para criar um modelo flexível, precisa de acesso de leitura e gravação ao Cloud Storage e acesso de gravação do Artifact Registry ao seu repositório do Artifact Registry. Pode conceder estas autorizações atribuindo as seguintes funções:

  • Administrador de armazenamento (roles/storage.admin)
  • Editor do Cloud Build (roles/cloudbuild.builds.editor)
  • Escritor do Artifact Registry (roles/artifactregistry.writer)

Autorizações para executar um modelo flexível

Quando executa um modelo flexível, o Dataflow cria uma tarefa para si. Para criar a tarefa, a conta de serviço do Dataflow precisa da seguinte autorização:

  • dataflow.serviceAgent

Quando usa o Dataflow pela primeira vez, o serviço atribui-lhe esta função, pelo que não precisa de conceder esta autorização.

Por predefinição, a conta de serviço do Compute Engine é usada para VMs iniciadoras e VMs de trabalho. A conta de serviço precisa das seguintes funções e capacidades:

  • Administrador de objetos de armazenamento (roles/storage.objectAdmin)
  • Leitor (roles/viewer)
  • Trabalhador do Dataflow (roles/dataflow.worker)
  • Acesso de leitura e escrita ao contentor de preparação
  • Acesso de leitura à imagem do modelo flexível

Para conceder acesso de leitura e escrita ao contentor de preparação, pode usar a função Storage Object Admin (roles/storage.objectAdmin). Para mais informações, consulte o artigo Funções de IAM para o Cloud Storage.

Para conceder acesso de leitura à imagem do modelo flexível, pode usar a função Storage Object Viewer (roles/storage.objectViewer). Para mais informações, consulte Configurar o controlo de acesso.

Defina as variáveis de ambiente do Dockerfile necessárias

Se quiser criar o seu próprio Dockerfile para uma tarefa de modelo flexível, 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ória
FLEX_TEMPLATE_JAVA_MAIN_CLASS Especifica a classe Java a executar para iniciar o modelo flexível. SIM
FLEX_TEMPLATE_JAVA_CLASSPATH Especifica a localização dos ficheiros de classe. SIM
FLEX_TEMPLATE_JAVA_OPTIONS Especifica as opções Java a transmitir durante o lançamento do modelo flexível. NÃO

Python

Especifique FLEX_TEMPLATE_PYTHON_PY_FILE no seu Dockerfile.

Para gerir as dependências do pipeline, defina variáveis no seu Dockerfile, como as seguintes:

  • FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE
  • FLEX_TEMPLATE_PYTHON_PY_OPTIONS
  • FLEX_TEMPLATE_PYTHON_SETUP_FILE
  • FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES

Por exemplo, as seguintes variáveis de ambiente são definidas no Tutorial de streaming no modelo flexível do Python no GitHub:

ENV FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE="${WORKDIR}/requirements.txt"
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/streaming_beam.py"
ENV Descrição Obrigatória
FLEX_TEMPLATE_PYTHON_PY_FILE Especifica o ficheiro Python a executar para iniciar o modelo flexível. SIM
FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE Especifica o ficheiro de requisitos com dependências do pipeline. Para mais informações, consulte a secção Dependências do PyPI na documentação do Apache Beam. NÃO
FLEX_TEMPLATE_PYTHON_SETUP_FILE Especifica o caminho para o ficheiro `setup.py` do pacote de pipeline. Para mais informações, consulte a secção Várias dependências de ficheiros na documentação do Apache Beam. NÃO
FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES

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

NÃO
FLEX_TEMPLATE_PYTHON_PY_OPTIONS Especifica as opções do Python a transmitir durante o lançamento do modelo flexível. NÃO

Dependências de pacotes para Python

Quando um pipeline Python do Dataflow usa dependências adicionais, pode ter de configurar o modelo flexível para instalar dependências adicionais em VMs de trabalho do Dataflow.

Quando executa uma tarefa do Dataflow Python que usa modelos flexíveis num ambiente que restringe o acesso à Internet, tem de pré-criar pacotes das dependências quando cria o modelo.

Use uma das seguintes opções para pré-embalar dependências do Python.

Para ver instruções sobre como gerir dependências de pipelines em pipelines Java e Go, consulte o artigo Faça a gestão das dependências de pipelines no Dataflow.

Use um ficheiro de requisitos e pré-embale as dependências com o modelo

Se estiver a usar o seu próprio Dockerfile para definir a imagem do modelo flexível, siga estes passos:

  1. Crie um ficheiro requirements.txt que liste as dependências da sua pipeline.

    COPY requirements.txt /template/
    ENV FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE="/template/requirements.txt"
    
  2. Instale as dependências na imagem do modelo flexível.

    RUN pip install --no-cache-dir -r $FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE
    
  3. Transfira as dependências para a cache de requisitos local, que é preparada para os trabalhadores do Dataflow quando o modelo é iniciado.

    RUN pip download --no-cache-dir --dest /tmp/dataflow-requirements-cache -r $FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE
    

Quando usa esta abordagem, as dependências do ficheiro requirements.txt são instaladas nos trabalhadores do Dataflow em tempo de execução. Uma estatística no separador de recomendações da Google Cloud consola pode indicar este comportamento. Para evitar a instalação de dependências no tempo de execução, use uma imagem de contentor personalizada.

Segue-se um exemplo de código que usa um ficheiro de requisitos no FlexTemplate.

# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

FROM gcr.io/dataflow-templates-base/python3-template-launcher-base

# Configure the Template to launch the pipeline with a --requirements_file option.
# See: https://beam.apache.org/documentation/sdks/python-pipeline-dependencies/#pypi-dependencies
ENV FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE="/template/requirements.txt"
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="/template/streaming_beam.py"

COPY . /template

RUN apt-get update \
    # Install any apt packages if required by your template pipeline.
    && apt-get install -y libffi-dev git \
    && rm -rf /var/lib/apt/lists/* \
    # Upgrade pip and install the requirements.
    && pip install --no-cache-dir --upgrade pip \
    # Install dependencies from requirements file in the launch environment.
    && pip install --no-cache-dir -r $FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE \
    # When FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE  option is used,
    # then during Template launch Beam downloads dependencies
    # into a local requirements cache folder and stages the cache to workers.
    # To speed up Flex Template launch, pre-download the requirements cache
    # when creating the Template.
    && pip download --no-cache-dir --dest /tmp/dataflow-requirements-cache -r $FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE

# Set this if using Beam 2.37.0 or earlier SDK to speed up job submission.
ENV PIP_NO_DEPS=True

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

Estruture o pipeline como um pacote e use pacotes locais

Quando usa vários ficheiros ou módulos locais do Python, estruture a sua pipeline como um pacote. A estrutura do ficheiro pode ter o seguinte aspeto:

main.py
pyproject.toml
setup.py
src/
  my_package/
    __init__.py
    my_custom_dofns_and_transforms.py
    my_pipeline_launcher.py
    other_utils_and_helpers.py
  1. Coloque o ponto de entrada de nível superior, por exemplo, o ficheiro main.py, no diretório raiz. Coloque os restantes ficheiros numa pasta separada no diretório src, por exemplo, my_package.

  2. Adicione os ficheiros de configuração do pacote ao diretório raiz com os detalhes e os requisitos do pacote.

    pyproject.toml

    [project]
    name = "my_package"
    version = "package_version"
    dependencies = [
      # Add list of packages (and versions) that my_package depends on.
      # Example:
      "apache-beam[gcp]==2.54.0",
    ]
    

    setup.py

      """An optional setuptools configuration stub for the pipeline package.
    
      Use pyproject.toml to define the package. Add this file only if you must
      use the --setup_file pipeline option or the
      FLEX_TEMPLATE_PYTHON_SETUP_FILE configuration option.
      """
    
      import setuptools
      setuptools.setup()
    

    Para mais informações sobre como configurar o seu pacote local, consulte o artigo Criar pacotes de projetos Python.

  3. Quando importa módulos ou ficheiros locais para o seu pipeline, use o nome do pacote my_package como o caminho de importação.

    from my_package import word_count_transform
    
  4. Instale o pacote de pipeline na imagem do modelo flexível. O Dockerfile do modelo flexível pode incluir conteúdo semelhante ao seguinte exemplo:

    Ficheiro Docker

    ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/main.py"
    ENV FLEX_TEMPLATE_PYTHON_SETUP_FILE="${WORKDIR}/setup.py"
    
    # Copy pipeline, packages and requirements.
    WORKDIR ${WORKDIR}
    COPY main.py .
    COPY pyproject.toml .
    COPY setup.py .
    COPY src src
    
    # Install local package.
    RUN pip install -e .
    

Quando usa esta abordagem, as dependências do ficheiro requirements.txt são instaladas nos trabalhadores do Dataflow em tempo de execução. Uma estatística no separador de recomendações da Google Cloud consola pode indicar este comportamento. Para evitar a instalação de dependências no tempo de execução, use uma imagem de contentor personalizada.

Para ver um exemplo que segue a abordagem recomendada, consulte o tutorial Modelo flexível para um pipeline com dependências e uma imagem de contentor personalizada no GitHub.

Use um contentor personalizado que pré-instale todas as dependências

Para evitar a instalação de dependências no tempo de execução, use contentores personalizados. Esta opção é preferível para pipelines executados em ambientes sem acesso à Internet.

Siga estes passos para usar um contentor personalizado:

  1. Crie uma imagem de contentor personalizada que pré-instale as dependências necessárias.

  2. Pré-instale as mesmas dependências no Dockerfile do modelo flexível.

    Para impedir a instalação de dependências no tempo de execução, não use as opções FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE ou FLEX_TEMPLATE_PYTHON_SETUP_FILE na configuração do modelo flexível.

    Um modelo flexível modificado Dockerfile pode ter o seguinte aspeto:

    FROM gcr.io/dataflow-templates-base/python3-template-launcher-base
    ENV FLEX_TEMPLATE_PYTHON_PY_FILE="/template/main.py"
    COPY . /template
    # If you use a requirements file, pre-install the requirements.txt.
    RUN pip install --no-cache-dir -r /template/requirements.txt
    # If you supply the pipeline in a package, pre-install the local package and its dependencies.
    RUN pip install -e /template
    

    Quando usa esta abordagem, faz o seguinte:

    • criar a imagem do modelo flexível
    • criar a imagem de contentor do SDK personalizado
    • instalar as mesmas dependências em ambas as imagens

    Em alternativa, para reduzir o número de imagens a manter, use a sua imagem de contentor personalizada como imagem de base para o modelo flexível.

  3. Se usar a versão 2.49.0 ou anterior do SDK do Apache Beam, adicione a opção de pipeline --sdk_location=container no iniciador de pipeline. Esta opção indica ao seu pipeline para usar o SDK do seu contentor personalizado em vez de transferir o SDK.

    options = PipelineOptions(beam_args, save_main_session=True, streaming=True, sdk_location="container")
    
  4. Defina o parâmetro sdk_container_image no comando flex-template run. Por exemplo:

    gcloud dataflow flex-template run $JOB_NAME \
       --region=$REGION \
       --template-file-gcs-location=$TEMPLATE_PATH \
       --parameters=sdk_container_image=$CUSTOM_CONTAINER_IMAGE \
       --additional-experiments=use_runner_v2
    

    Para mais informações, consulte o artigo Use contentores personalizados no Dataflow.

Escolha uma imagem base

Pode usar uma imagem base fornecida pela Google para criar pacotes de imagens de contentores de modelos com o Docker. Escolha a etiqueta mais recente das imagens base dos modelos flexíveis. Recomendamos que use uma etiqueta de imagem específica em vez de latest. As imagens base estão alojadas em gcr.io/dataflow-templates-base.

Especifique a imagem de base no seguinte formato:

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

Substitua o seguinte:

Use imagens de contentores personalizadas

Se o seu pipeline usar uma imagem de contentor personalizada, recomendamos que use a imagem personalizada como imagem base para a imagem Docker do modelo flexível. Para tal, copie o ficheiro binário do iniciador do modelo flexível da imagem base do modelo fornecida pela Google para a sua imagem personalizada.

Um exemplo Dockerfile de uma imagem que pode ser usada como imagem do contentor do SDK personalizado e como modelo flexível pode ter o seguinte aspeto:

FROM gcr.io/dataflow-templates-base/IMAGE_NAME:TAG as template_launcher
FROM apache/beam_python3.10_sdk:2.68.0

# RUN <...Make image customizations here...>
# See: https://cloud.google.com/dataflow/docs/guides/build-container-image

# Configure the Flex Template here.
COPY --from=template_launcher /opt/google/dataflow/python_template_launcher /opt/google/dataflow/python_template_launcher
COPY my_pipeline.py /template/
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="/template/my_pipeline.py"

Substitua o seguinte:

  • IMAGE_NAME: uma imagem base fornecida pela Google. Por exemplo: python311-template-launcher-base.
  • TAG: uma etiqueta de versão para a imagem base encontrada na referência de imagens base de modelos flexíveis. Para uma melhor estabilidade e resolução de problemas, evite usar latest. Em alternativa, afixe-o a uma etiqueta de versão específica.

Para ver um exemplo que segue esta abordagem, consulte o tutorial Modelo flexível para um pipeline com dependências e uma imagem de contentor personalizada.

Use uma imagem de um registo privado

Pode criar uma imagem de modelo flexível armazenada num registo do Docker privado, se o registo privado usar HTTPS e tiver um certificado válido.

Para usar uma imagem de um registo privado, especifique o caminho para a imagem e um nome de utilizador e uma palavra-passe para o registo. O nome de utilizador e a palavra-passe têm de ser armazenados no Secret Manager. Pode fornecer o segredo num dos seguintes formatos:

  • projects/{project}/secrets/{secret}/versions/{secret_version}
  • projects/{project}/secrets/{secret}

Se usar o segundo formato, uma vez que não especifica a versão, o Dataflow usa a versão mais recente.

Se o registo usar um certificado autoassinado, também tem de especificar o caminho para o certificado autoassinado no Cloud Storage.

A tabela seguinte descreve as opções da CLI gcloud que pode usar para configurar um registo privado.

Parâmetro Descrição
image A morada do registo. Por exemplo: gcp.repository.example.com:9082/registry/example/image:latest.
image-repository-username-secret-id O ID do segredo do Secret Manager para o nome de utilizador a autenticar no registo privado. Por exemplo: projects/example-project/secrets/username-secret.
image-repository-password-secret-id O ID do Secret do Secret Manager para a palavra-passe para autenticar no registo privado. Por exemplo: projects/example-project/secrets/password-secret/versions/latest.
image-repository-cert-path O URL completo do Cloud Storage para um certificado autoassinado para o registo privado. Este valor só é necessário se o registo usar um certificado autossinado. Por exemplo: gs://example-bucket/self-signed.crt.

Segue-se um exemplo de um comando da CLI gcloud que cria um modelo flexível com uma imagem num registo privado com um certificado autoassinado.

gcloud dataflow flex-template build gs://example-bucket/custom-pipeline-private-repo.json
--sdk-language=JAVA
--image="gcp.repository.example.com:9082/registry/example/image:latest"
--image-repository-username-secret-id="projects/example-project/secrets/username-secret"
--image-repository-password-secret-id="projects/example-project/secrets/password-secret/versions/latest"
--image-repository-cert-path="gs://example-bucket/self-signed.crt"
--metadata-file=metadata.json

Para criar o seu próprio modelo flexível, tem de substituir os valores de exemplo e pode ter de especificar opções diferentes ou adicionais. Para saber mais, consulte os seguintes recursos:

Especifique as opções de tubagem

Para obter informações sobre as opções de pipeline suportadas diretamente pelos modelos flexíveis, consulte Opções de pipeline.

Também pode usar quaisquer opções de pipeline do Apache Beam indiretamente. Se estiver a usar um ficheiro metadata.json para o seu trabalho de modelo flexível, inclua estas opções de pipeline no ficheiro. Este ficheiro de metadados tem de seguir o formato indicado em TemplateMetadata.

Caso contrário, quando iniciar a tarefa de modelo flexível, transmita estas opções do pipeline através do campo de parâmetros.

Para opções experimentais de tempo de execução ou opções comuns da pipeline de tempo de execução que não são expostas explicitamente nos metadados do modelo, transmita estas opções através dos campos additional-experiments ou additional-pipeline-options.

API

O exemplo seguinte mostra como incluir opções de pipeline, experiências e opções adicionais num corpo do pedido:

{
  "jobName": "my-flex-template-job",
  "parameters": {
    "option_defined_in_metadata": "value"
  },
  "environment": {
    "additionalExperiments": [
      "use_runner_v2"
    ],
    "additionalPipelineOptions": {
      "common_pipeline_option": "value"
    }
  }
}

gcloud

Quando transmite parâmetros do tipo List ou Map, pode ter de definir parâmetros num ficheiro YAML e usar a flag flags-file.

Quando usa modelos flexíveis, pode configurar algumas opções do pipeline durante a inicialização do pipeline, mas não pode alterar outras opções do pipeline. Se os argumentos da linha de comandos exigidos pelo modelo flexível forem substituídos, a tarefa pode ignorar, substituir ou rejeitar as opções da pipeline transmitidas pelo iniciador de modelos. A tarefa pode não ser iniciada ou pode ser iniciada uma tarefa que não use o modelo flexível. Para mais informações, consulte o artigo Falha ao ler o ficheiro de tarefa.

Durante a inicialização do pipeline, não altere as seguintes opções do pipeline:

Java

  • runner
  • project
  • jobName
  • templateLocation
  • region

Python

  • runner
  • project
  • job_name
  • template_location
  • region

Go

  • runner
  • project
  • job_name
  • template_location
  • region

Bloqueie as chaves SSH do projeto em VMs que usam chaves SSH baseadas em metadados

Pode impedir que as VMs aceitem chaves SSH armazenadas nos metadados do projeto bloqueando as chaves SSH do projeto nas VMs. Use o sinalizador additional-experiments com a opção de serviço block_project_ssh_keys:

--additional-experiments=block_project_ssh_keys

Para mais informações, consulte as opções de serviço do Dataflow.

Metadados

Pode expandir o modelo com metadados adicionais para que os parâmetros personalizados sejam validados quando o modelo é executado. Se quiser criar metadados para o seu modelo, siga estes passos:

  1. Crie um ficheiro metadata.json usando os parâmetros em Parâmetros de metadados.

    Para ver um exemplo, consulte o ficheiro de metadados de exemplo.

  2. Armazene o ficheiro de metadados no Cloud Storage na mesma pasta que o modelo.

Parâmetros de metadados

Chave do parâmetro Obrigatória Descrição do valor
name Sim O nome do modelo.
description Não Um breve parágrafo de texto que descreve o modelo.
streaming Não Se for true, este modelo suporta streaming. O valor predefinido é false.
supportsAtLeastOnce Não Se true, este modelo suporta o processamento pelo menos uma vez. O valor predefinido é false. Defina este parâmetro como true se o modelo for concebido para funcionar com o modo de streaming, pelo menos, uma vez.
supportsExactlyOnce Não Se true, este modelo suporta o processamento exatamente uma vez. O valor predefinido é true.
defaultStreamingMode Não O modo de streaming predefinido para modelos que suportam o modo pelo menos uma vez e o modo exatamente uma vez. Use um dos seguintes valores: "AT_LEAST_ONCE", "EXACTLY_ONCE". Se não for especificado, o modo de streaming predefinido é exatamente uma vez.
parameters Não Uma matriz de parâmetros adicionais que o modelo usa. Por predefinição, é usado um array vazio.
name Sim O nome do parâmetro usado no seu modelo.
label Sim Uma string legível que é usada na Google Cloud consola para etiquetar o parâmetro.
helpText Sim Um breve parágrafo de texto que descreve o parâmetro.
isOptional Não false se o parâmetro for obrigatório e true se o parâmetro for opcional. A menos que seja definido com um valor, isOptional tem como predefinição false. Se não incluir esta chave de parâmetro para os metadados, os metadados tornam-se um parâmetro obrigatório.
regexes Não Uma matriz de expressões regulares POSIX-egrep em formato de string que é usada para validar o valor do parâmetro. Por exemplo, ["^[a-zA-Z][a-zA-Z0-9]+"] é uma única expressão regular que valida se o valor começa com uma letra e, em seguida, tem um ou mais carateres. Por predefinição, é usado um conjunto vazio.

Exemplo de ficheiro de metadados

Java

{
  "name": "Streaming Beam SQL",
  "description": "An Apache Beam streaming pipeline that reads JSON encoded messages from Pub/Sub, uses Beam SQL to transform the message data, and writes the results to a BigQuery",
  "parameters": [
    {
      "name": "inputSubscription",
      "label": "Pub/Sub input subscription.",
      "helpText": "Pub/Sub subscription to read from.",
      "regexes": [
        "[a-zA-Z][-_.~+%a-zA-Z0-9]{2,}"
      ]
    },
    {
      "name": "outputTable",
      "label": "BigQuery output table",
      "helpText": "BigQuery table spec to write to, in the form 'project:dataset.table'.",
      "isOptional": true,
      "regexes": [
        "[^:]+:[^.]+[.].+"
      ]
    }
  ]
}

Python

{
  "name": "Streaming beam Python flex template",
  "description": "Streaming beam example for python flex template.",
  "parameters": [
    {
      "name": "input_subscription",
      "label": "Input PubSub subscription.",
      "helpText": "Name of the input PubSub subscription to consume from.",
      "regexes": [
        "projects/[^/]+/subscriptions/[a-zA-Z][-_.~+%a-zA-Z0-9]{2,}"
      ]
    },
    {
      "name": "output_table",
      "label": "BigQuery output table name.",
      "helpText": "Name of the BigQuery output table name.",
      "isOptional": true,
      "regexes": [
        "([^:]+:)?[^.]+[.].+"
      ]
    }
  ]
}

Pode transferir ficheiros de metadados para os modelos fornecidos pela Google a partir do Dataflow diretório de modelos.

Compreenda a localização de preparação e a localização temporária

A CLI do Google Cloud oferece opções --staging-location e --temp-location quando executa um modelo flexível. Da mesma forma, a API REST do Dataflow fornece campos stagingLocation e tempLocation para FlexTemplateRuntimeEnvironment.

Para modelos flexíveis, a localização de preparação é o URL do Cloud Storage para o qual os ficheiros são escritos durante o passo de preparação do lançamento de um modelo. O fluxo de dados lê estes ficheiros preparados para criar o gráfico de modelos. O temp location é o URL do Cloud Storage para o qual os ficheiros temporários são escritos durante o passo de execução.

Atualize uma tarefa de modelo flexível

O pedido de exemplo seguinte mostra como atualizar uma tarefa de streaming de modelos através do método projects.locations.flexTemplates.launch. Se quiser usar a CLI gcloud, consulte o artigo Atualize um pipeline existente.

Se quiser atualizar um modelo clássico, use projects.locations.templates.launch em alternativa.

  1. Siga os passos para criar uma tarefa de streaming a partir de um modelo flexível. Envie o seguinte pedido HTTP POST com os valores modificados:

    POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/flexTemplates:launch
    {
        "launchParameter": {
          "update": true
          "jobName": "JOB_NAME",
          "parameters": {
            "input_subscription": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME",
            "output_table": "PROJECT_ID:DATASET.TABLE_NAME"
          },
        "containerSpecGcsPath": "STORAGE_PATH"
        },
    }
    
    • Substitua PROJECT_ID pelo ID do seu projeto.
    • Substitua REGION pela região do Dataflow do trabalho que está a atualizar.
    • Substitua JOB_NAME pelo nome exato da tarefa que quer atualizar.
    • Defina parameters para a sua lista de pares de chave-valor. Os parâmetros indicados são específicos deste exemplo de modelo. Se estiver a usar um modelo personalizado, modifique os parâmetros conforme necessário. Se estiver a usar o modelo de exemplo, substitua as seguintes variáveis.
      • Substitua SUBSCRIPTION_NAME pelo nome da sua subscrição do Pub/Sub.
      • Substitua DATASET pelo nome do seu conjunto de dados do BigQuery.
      • Substitua TABLE_NAME pelo nome da tabela do BigQuery.
    • Substitua STORAGE_PATH pela localização do ficheiro de modelo no Cloud Storage. A localização deve começar por gs://.
  2. Use o parâmetro environment para alterar as definições do ambiente. Para mais informações, consulte FlexTemplateRuntimeEnvironment.

  3. Opcional: para enviar o seu pedido através do curl (Linux, macOS ou Cloud Shell), guarde o pedido num ficheiro JSON e, em seguida, execute o seguinte comando:

    curl -X POST -d "@FILE_PATH" -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)"  https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/flexTemplates:launch
    

    Substitua FILE_PATH pelo caminho para o ficheiro JSON que contém o corpo do pedido.

  4. Use a interface de monitorização do fluxo de dados para verificar se foi criada uma nova tarefa com o mesmo nome. Esta tarefa tem o estado Atualizado.

Limitações

Aplicam-se as seguintes limitações aos trabalhos de modelos flexíveis:

  • Tem de usar uma imagem de base fornecida pela Google para criar pacotes dos seus contentores através do Docker. Para ver uma lista das imagens aplicáveis, consulte o artigo Imagens base do modelo flexível.
  • O programa que cria o pipeline tem de terminar após a chamada de run para que o pipeline seja iniciado.
  • O waitUntilFinish (Java) e o wait_until_finish (Python) não são suportados.

O que se segue?