Nesta página, explicamos como provisionar recursos para seus pipelines.
Sobre o provisionamento de recursos em Orquestração de Pipelines
A Orquestração de Pipelines usa uma abordagem de infraestrutura como código (IaC) para gerenciar recursosGoogle Cloud usados pelos seus pipelines de dados, o que traz os seguintes benefícios:
- Controle de versão. As mudanças na infraestrutura são rastreadas no Git.
- Repetibilidade: os ambientes podem ser recriados de maneira confiável.
- Colaboração. Os participantes da equipe podem revisar e contribuir com as definições de infraestrutura.
- Automation. Integração aos pipelines de CI/CD.
- Opcionalidade e coexistência: o framework de provisionamento de recursos é opcional. Se você já usa o Terraform ou outras práticas de IaC estabelecidas para provisionamento de recursos, pode continuar fazendo isso. É possível gerenciar um subconjunto de recursos relevantes para um pipeline ou aplicativo específico, coexistindo potencialmente com recursos gerenciados por outras ferramentas.
Em Orquestração de Pipelines, seu projeto pode ter um ou mais ambientes de implantação. A configuração de cada ambiente de implantação define como os pipelines e recursos pertencentes a ele são implantados. Por exemplo, você pode ter um ambiente de implantação para desenvolvimento e outro para produção.
Exemplo de uma configuração de ambiente de implantação. Os recursos provisionados são definidos no mapeamento resources.
environments:
dev:
project: example-dev-project
region: us-central1
variables:
dataset_name: marketing_analytics_dev
secrets:
dts_api_key: "projects/example-dev-project/secrets/dev-dts-key/versions/latest"
resources:
- type: dataproc.cluster
name: example-static-cluster-resource
definition:
clusterName: example-static-cluster
Ao implantar o pipeline, o Orquestração de Pipelines usa um modelo sem estado de "criar ou atualizar" para provisionar os recursos definidos:
Se um recurso for definido, mas não existir, a orquestração de pipelines o criará.
Se um recurso existir:
(Padrão) Atualiza a configuração do recurso para corresponder à definição.
Se você definir esse comportamento na configuração do recurso, a Orquestração de Pipelines poderá ignorar as mudanças ou recriar um recurso.
Se você excluir a definição de um recurso da configuração, isso não vai resultar na exclusão do recurso. Essa abordagem prioriza a segurança e evita a perda acidental de dados.
Se você renomear um recurso existente, a Orquestração de Pipelines cria um novo recurso com o novo nome e mantém o recurso original.
Recursos provisionados em comparação com perfis de recursos
Os perfis de recursos são arquivos de modelo que contêm a definição de um ou mais recursos doGoogle Cloud . Eles são diferentes dos recursos provisionados e podem ser usados em conjunto com eles:
Com recursos provisionados: em vez de definir a mesma configuração de recurso inline em cada ambiente de desenvolvimento no
deployment.yaml, é possível definir uma vez em um perfil e fazer referência a ele. Os recursos provisionados oferecem suporte a uma ampla variedade de tipos de recursos que podem ser definidos em perfis de recursos.Com ações de pipeline: é possível usar perfis de recursos em ações em que os recursos são provisionados durante a ação. Ao usar um perfil de recurso em vez de especificar a configuração do recurso inline, é possível manter a configuração separada da ação do pipeline e reutilizar uma configuração para várias ações de pipeline. As ações de pipeline só aceitam perfis de recursos para recursos do Serviço Gerenciado para Apache Spark, por exemplo, ao executar ações de pipeline em um cluster efêmero.
Ver os tipos de recursos disponíveis
Consulte Tipos de recursos.
Também é possível conferir todos os recursos disponíveis na CLI gcloud com o comando a seguir:
gcloud beta orchestration-pipelines resource-types list
Adicionar um novo recurso
Para adicionar um novo recurso provisionado à configuração do ambiente de implantação, adicione a definição dele da seguinte maneira:
Na configuração do ambiente de implantação, adicione um novo item à lista
environments.DEVELOPMENT_ENVIRONMENT.resources.Especifique as seguintes chaves:
type: o tipo de Google Cloud recurso a ser provisionado. Exemplos:bigquery.dataset,dataform.repository. É possível conferir os tipos de recursos disponíveis usando um comando da CLI gcloud.name: um nome lógico para o recurso no arquivodeployment.yaml.parent: especifica um recurso pai para tipos de recursos que exigem um. Coloque onamedo recurso pai como o valor.updateAction: especifica qual ação deve ser tomada quando uma mudança é detectada na configuração do recurso:(Padrão)
patch: atualize as propriedades do recurso que foram alteradas.A operação de atualização só modifica as propriedades especificadas na configuração (YAML) do recurso, deixando outras propriedades inalteradas. Você pode usar esse comportamento, por exemplo, para gerenciar apenas as propriedades importantes para a execução do pipeline e manter outras propriedades configuradas manualmente.
Se as mudanças afetarem campos imutáveis ou o recurso for imutável, a implantação vai falhar. Nesses casos, recomendamos ajustar a definição para modificar apenas campos mutáveis. Se isso não for possível, mude a ação de atualização para
recreate.skip: ignora as mudanças e não atualiza a configuração do recurso.Recomendamos usar essa opção quando você quiser gerenciar a existência do recurso, mas realizar as mudanças e atualizações de configuração usando outros meios, por exemplo, manualmente.
recreate: se forem detectadas mudanças, exclua o recurso atual e crie um novo com base na definição do recurso atual.Recomendamos usar essa opção para recursos totalmente imutáveis ou quando as mudanças são feitas em campos que não podem ser atualizados no local.
definition: especificação do recurso, como um mapeamento que reflete a estrutura de configuração do recurso na API dele.(Opcional)
metadata: metadados específicos dos pipelines de orquestração. Alguns tipos de recursos usam campos de metadados para configurar o recurso emGoogle Cloud . Por exemplo, o campometadata.locationpode ser usado para criar recursos zonais.
Valide e implante seu pipeline. Orquestração de Pipelines vai provisionar o novo recurso quando o pipeline for implantado.
Exemplo: recursos de longa duração
Este exemplo demonstra a adição de um recurso de longa duração, neste caso, um cluster estático do Serviço Gerenciado para Apache Spark. Depois de provisionado, ele pode ser usado em ações de pipeline. Recomendamos usar essa abordagem geral quando seus pipelines utilizam recursos persistentes.
O exemplo a seguir adiciona um cluster estático do Serviço gerenciado para Apache Spark chamado
example-static-cluster ao ambiente de implantação dev. A definição do recurso
é fornecida com base na API Dataproc.
environments:
dev:
project: "example-project"
region: "us-central1"
# A runner environment for executing pipeline actions
composer_environment: "example-runner-environment"
resources:
- type: dataproc.cluster
name: example-static-cluster
updateAction: patch
definition:
config:
masterConfig:
numInstances: 1
machineTypeUri: n1-standard-4
workerConfig:
numInstances: 3
machineTypeUri: n1-standard-4
Esse cluster pode ser usado em ações de pipeline normalmente. Não há diferença no uso em comparação com, por exemplo, um cluster criado manualmente.
modelVersion: "1.0"
pipelineId: "example-dataproc-pipeline"
...
actions:
- pyspark:
name: "run-pyspark-with-pyfiles-on-existing-cluster"
engine:
dataprocOnGce:
existingCluster:
clusterName: "example-static-cluster"
location: {{ region }}
projectId: {{ project }}
mainFilePath: "scripts/my_spark_job_with_pyfiles.py"
pyFiles:
- "scripts/lib1.py"
Exemplo: processo automatizado de build e lançamento para o Dataform
Este exemplo demonstra um processo automatizado de build e lançamento para o Dataform. No exemplo de cenário:
Um repositório do Dataform é conectado a um repositório do GitHub pelo Developer Connect.
Você envia as mudanças para o repositório do GitHub.
Depois que as mudanças forem enviadas, implante o pipeline.
O Dataform extrai o código do repositório do GitHub, cria um resultado de compilação e o deixa pronto para execução.
Uma configuração de fluxo de trabalho é usada para executar fluxos de trabalho com essa versão compilada automaticamente.
O exemplo de código a seguir define um repositório do Dataform, uma
configuração de lançamento e uma configuração de fluxo de trabalho para ele no ambiente de implantação
dev:
- A linha
gitCommitish: "{{ COMMIT_SHA }}"vincula a configuração de lançamento ao commit específico do Git que está sendo implantado.COMMIT_SHAé uma variável que é resolvida para o SHA do commit do pacote de pipeline implantado. - A chave
codeCompilationConfig.pipelineConfig.pathaponta para uma subpasta que contém recursos de pipeline. Assim, é possível manter vários pipelines do Dataform em um único repositório. Definir
releaseCompilationResultcomoautona definição doreleaseConfiginstrui a Orquestração de Pipelines a acionar uma compilação do Dataform depois que o recursoreleaseConfigé criado ou atualizado com o novogitCommitish:- O framework primeiro faz um upsert (atualiza ou cria) o recurso
releaseConfigpara apontar para o commit especificado. - Em seguida, devido à configuração
auto, ele chama a API Dataform para criar um novo resultado de compilação com base no código desse commit. - O
releaseConfigé atualizado novamente para apontar para o ID do resultado da compilação recém-criado, tornando essa versão a "ativa".
- O framework primeiro faz um upsert (atualiza ou cria) o recurso
environments:
dev:
project: example-project
region: us-central1
composer_environment: example-runner-environment
artifact_storage:
bucket: example-bucket
path_prefix: initialized-artifact-bucket
pipelines:
- source: initialized-pipeline.yaml
- source: dataform_local_pipeline.yaml
- source: dataform_service_pipeline.yaml
resources:
- name: {{ repository_name }}
type: dataform.repository
definition:
labels:
bigquery-deployment: preview
- type: dataform.repository.releaseConfig
name: subfolder-release
parent: {{ repository_name }}
definition:
gitCommitish: {{ COMMIT_SHA }}
releaseCompilationResult: auto
codeCompilationConfig:
pipelineConfig:
pipelineType: DATAFORM
path: weather_dataform
- type: dataform.repository.workflowConfig
name: {{ workflow_config_name }}
parent: {{ repository_name }}
definition:
releaseConfig: subfolder-release
invocationConfig:
serviceAccount: {{ service_account }}
variables:
service_account: example-account@example-project.iam.gserviceaccount.com
network_uri: projects/example-project/global/networks/default
subnetwork_uri: projects/example-project/regions/us-central1/subnetworks/default
region: us-central1
repository_name: weather-aggregation-repo
workflow_config_name: updated-subfolder-workflow
Um exemplo de ação de pipeline que executa um fluxo de trabalho com a configuração criada:
modelVersion: '1.0'
pipelineId: dataform_service_pipeline
description: Updated run Dataform pipeline via Dataform Service
runner: airflow
owner: data-eng-team
defaults:
projectId: {{ project }}
location: {{ region }}
executionConfig:
retries: 1
actions:
- pipeline:
name: run_dataform_service
framework:
dataform:
dataformService:
location: {{ region }}
projectId: {{ project }}
repositoryId: {{ repository_name }}
workflowInvocation:
workflowConfig: projects/{{ project }}/locations/{{ region }}/repositories/{{
repository_name }}/workflowConfigs/{{ workflow_config_name }}
- python:
name: fibonacci_python
mainFilePath: scripts/fibonacci.py
pythonCallable: fibonacciTen
engine:
local: {}
- sql:
name: dummy_bq_query
engine:
bigquery:
location: {{ region }}
query:
inline: 'SELECT COUNT(*) FROM `{{ project }}.weather_data.sensor_readings`'
tags:
- job:datacloud:vscode