Nesta página, descrevemos o processo de criação de configurações de ambiente de implantação para seus pipelines de orquestração.
Sobre ambientes de implantação
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 esse ambiente são implantados. Por exemplo, é possível ter um ambiente de implantação para desenvolvimento e outro para produção. Esses ambientes de implantação podem ter conjuntos separados de pipelines e ser executados em ambientes de execução diferentes.
Cada ambiente de implantação precisa ter um ambiente de execução. O Airflow Gerenciado é o mecanismo de orquestração que executa seus pipelines depois que eles são implantados. Na versão prévia, o único ambiente de execução de runner compatível é um ambiente do Airflow gerenciado que você atribuiu ao seu ambiente de implantação.
É possível especificar um bucket de artefatos para um ambiente de implantação. Esse bucket armazenará recursos de pipeline com controle de versões que o pipeline executa e resultados de algumas ações que são enviadas para o bucket de artefatos.
Sobre pacotes de pipelines
Os pipelines de orquestração são implantados em pacotes de pipeline. Um pacote de pipeline contém um ou mais pipelines e recursos de pipeline que compartilham um ciclo de implantação comum.
Cada pacote pode ter várias versões:
- Ao implantar um pacote, todos os pipelines e scripts acompanhantes no pacote de uma versão específica são implantados juntos.
- Há exatamente uma versão atual do pacote (a que foi implantada como a mais recente), enquanto as execuções individuais do pipeline que foram acionadas com a versão anterior do código continuam a execução sem interrupções.
- Não é possível acionar manualmente o pipeline em versões diferentes da atual.
- Se um pipeline for excluído de um pacote e a nova versão do pacote for implantada, o pipeline não será executado na nova versão, mas as execuções ativas anteriores continuarão.
Antes de começar
- Verifique se você já criou um ambiente de execução.
Inicializar o scaffolding do pacote de pipeline
O Orquestração de Pipelines fornece um comando da CLI gcloud para inicializar um scaffolding para pipelines de orquestração no seu repositório.
O scaffolding contém o seguinte:
orchestration-pipeline.yaml: um exemplo de definição de pipeline que contém uma programação, mas nenhuma ação definida.deployment.yaml: um exemplo de configuração de implantação de pipeline que define como o pipeline precisa ser implantado. Contém a configuração do ambiente do executor, do bucket de artefatos e de outros recursos usados pelas ações do pipeline..github/workflows/validate.yaml: um exemplo de ação do GitHub que valida seu pipeline quando uma solicitação de envio para a ramificaçãomainé criada..github/workflows/deploy.yaml: um exemplo de ação do GitHub que implanta seu pipeline quando você mescla mudanças na ramificaçãomaindo seu repositório do GitHub.
Para inicializar um pipeline de orquestração:
Navegue até o diretório do repositório ou do projeto. O comando vai criar novos arquivos no diretório em que você o executa.
Execute o seguinte comando da CLI gcloud:
gcloud beta orchestration-pipelines init PIPELINE_NAME \ --environment DEPLOYMENT_ENVIRONMENT \ --composer-environment RUNNER_ENVIRONMENT \ --artifacts-bucket ARTIFACTS_BUCKET_NAME \ --project PROJECT_ID \ --region REGION \ --service-account SERVICE_ACCOUNTSubstitua:
PIPELINE_NAME: nome do pipeline inicial.DEPLOYMENT_ENVIRONMENT: nome do ambiente de implantação inicial.RUNNER_ENVIRONMENT: nome do ambiente de execução.ARTIFACTS_BUCKET_NAME: um bucket do Cloud Storage que será usado para armazenar artefatos de ação do pipeline, sem o prefixogs://.PROJECT_ID: o ID do projeto de um projeto Google Cloud em que o ambiente do executor está localizado.REGION: a região em que o ambiente do executor está localizado.SERVICE_ACCOUNT: a conta de serviço que será predefinida como uma variável. Defina esse valor como a conta de serviço do ambiente do executor. É possível usar essa variável em definições de pipeline e perfis de recursos. Por exemplo, como um valor para o parâmetroimpersonationChainem ações que usam uma cadeia de representação.Para conferir a conta de serviço do ambiente de execução, consulte os detalhes do ambiente. Na CLI gcloud, a conta de serviço do ambiente é fornecida na chave
nodeConfig.serviceAccount.
Exemplo:
gcloud beta orchestration-pipelines init example-pipeline \ --environment development \ --composer-environment production-runner-us-central1 \ --artifacts-bucket production-artifacts \ --project example-production-project \ --region us-central1 \ --service-account example-account@example-project.iam.gserviceaccount.com
Adicionar configuração do ambiente do executor
O ambiente do executor é especificado na chave composer_environment de um
ambiente de implantação. Se você usa vários ambientes de implantação, pode
especificar um ambiente de execução separado para cada um deles.
O nome do ambiente do executor na chave composer_environment, junto com as chaves project e region na configuração do ambiente de desenvolvimento, especifica o ambiente do executor em que o pipeline é implantado.
O exemplo a seguir demonstra como adicionar um ambiente de execução com o nome
example-runner-environment localizado na região us-central1, no projeto
example-development-project:
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "example-runner-environment"
...
Ajustar a configuração do ambiente do executor
É possível configurar o ambiente do runner como qualquer outro ambiente do Serviço gerenciado para Apache Airflow:
- Instale dependências do Python, por exemplo, para executar os scripts Python do seu pipeline localmente no ambiente do executor.
- Escalone os ambientes para fornecer mais ou menos recursos ou mude a forma como o ambiente de execução escalona os workers do Airflow.
- Substitua as opções de configuração do Airflow para configurar o Airflow.
Adicionar recursos de pipeline e configurar ações
Edite o arquivo de definição do pipeline para incluir ações e recursos do pipeline:
- Consulte Referência da DSL de Orquestração de Pipelines para exemplos de código e descrições de parâmetros de ação.
- Para um exemplo de tutorial mais longo, consulte Criar pipelines de engenharia de dados na documentação da extensão do Google Cloud Data Agent Kit.
Exemplo de ação "Hello World"
Confira um exemplo de ação de pipeline minimalista: Você pode usar esse recurso para testar a configuração do ambiente de implantação.
Adicione a seguinte ação ao seu pipeline de scaffolding, substituindo
actions: []:actions: - python: name: "hello_world_script_run" executionTimeout: "30m" mainFilePath: "scripts/hello_world.py" pythonCallable: "main" engine: local: {}Crie um novo subdiretório chamado
scriptsno seu repositório e salve o arquivo a seguir como/scripts/hello_world.py:def main(): print("Hello, World!")
Validar pipelines
O comando de validação verifica a sintaxe e a correção de tipo dos arquivos de definição de pipeline e também realiza verificações semânticas para recursos como o projetoGoogle Cloud e o ambiente do Serviço gerenciado para Apache Airflow nos arquivos de configuração de implantação e de definição de pipeline.
Por padrão, a validação completa de todos os ambientes de implantação é realizada, incluindo o contato com ambientes de execução remota. É possível validar partes específicas da configuração de implantação com os seguintes parâmetros:
--mode: defina comosyntax-onlypara não alcançar ambientes de execução remota. O padrão éfull.--environment: valida apenas um ambiente específico.--pipeline-paths: lista separada por vírgulas de caminhos para arquivos de definição de pipeline a serem validados.--substitutionse--substitutions-file: substitua parâmetros de configuração de implantação durante a validação.
É possível executar esse comando como uma verificação rápida antes de implantar versões locais do pipeline e como uma ação do GitHub como parte do fluxo de trabalho de CI/CD.
Execute o seguinte comando no repositório para validar os pipelines:
gcloud beta orchestration-pipelines validate
Implantar um pacote de pipeline
Nesta seção, descrevemos diferentes maneiras de implantar seus pipelines.
Orquestração de Pipelines oferece duas maneiras de implantar seus pacotes de pipeline. Essas abordagens foram projetadas para funcionar juntas durante diferentes estágios do fluxo de trabalho de desenvolvimento e lançamento:
Implante uma versão do pacote local: implante as versões atuais de recursos e definições de pipeline e a configuração de implantação. O novo ID do pacote será gerado automaticamente com base no nome do espaço de trabalho e no md5 dos arquivos no pacote.
Esse tipo de implantação é destinado a fins de desenvolvimento. Também recomendamos criar uma configuração de implantação separada que implante os pipelines em um ambiente de execução de teste.
Implante as mudanças confirmadas: depois de confirmar mudanças nos recursos, nas definições e na configuração de implantação do pipeline, é possível implantar uma nova versão do pacote no ambiente de execução. O ID do novo pacote será vinculado ao SHA do commit do git no seu repositório.
Esse tipo de implantação foi projetado para ser executado como parte do CI/CD, por exemplo, por uma ação do GitHub. Também é possível implantar mudanças confirmadas de um repositório Git local.
A Orquestração de Pipelines oferece várias maneiras de substituir parâmetros nos arquivos de definição de pipeline e configuração de implantação, o que pode ser útil ao implantar pipelines para desenvolvimento local e para comandos executados em ações do GitHub. Por exemplo, é possível
substituir parâmetros
usando o argumento --substitutions em
comandos da CLI gcloud, ou
definindo uma variável de ambiente ou
obtendo o valor dos secrets do GitHub.
Executar comandos de implantação
Local
Para implantar uma versão do pacote local, use o argumento --local:
gcloud beta orchestration-pipelines deploy \
--environment DEPLOYMENT_ENVIRONMENT \
--local
Substitua:
DEPLOYMENT_ENVIRONMENT: ambiente de implantação do pipeline.
Exemplo:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local
O exemplo de saída contém o nome e a versão do pacote de pipeline e o status da implantação:
Bundle ID: bundle-local-example-orchestrationpipelines
Version ID: local-14776d43ebba
...
--- Pipeline Deployment Status ---
Pipeline 'example-pipeline': [OK] (Status: HEALTHY)
--- Pipeline Deployment full details ---
...
Comprometido
Para implantar as mudanças, confirme se elas foram enviadas no repositório. Execute o seguinte comando na CLI gcloud:
gcloud beta orchestration-pipelines deploy \
--environment DEPLOYMENT_ENVIRONMENT
Substitua:
DEPLOYMENT_ENVIRONMENT: ambiente de implantação do pipeline.
Exemplo:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment
O exemplo de saída contém o nome e a versão do pacote de pipeline e o status da implantação:
Bundle ID: bundle-local-example-orchestrationpipelines
Version ID: local-14776d43ebba
...
--- Pipeline Deployment Status ---
Pipeline 'example-pipeline': [OK] (Status: HEALTHY)
--- Pipeline Deployment full details ---
...
Ação do GitHub
O scaffolding do pipeline tem dois exemplos de ações do GitHub que podem ajudar você a começar a implantar e validar seus pipelines usando uma ação do GitHub. Quando você faz upload desses arquivos para o GitHub, seu repositório é configurado com essas ações. Para informações sobre como configurar ações mais complexas do GitHub, consulte Como implantar com o GitHub Actions na documentação do GitHub.
Para usar o exemplo de ações do GitHub:
Crie uma conta de serviço separada que vai executar comandos da CLI gcloud nas ações do GitHub.
Atribua papéis que permitam executar comandos de implantação e validação a essa conta de serviço.
Crie uma chave de conta de serviço para essa conta.
Adicione o secret
GCP_SA_KEYao seu repositório do GitHub e defina o valor dele como a chave da conta de serviço criada. Para mais informações sobre como adicionar secrets, consulte Como usar secrets no GitHub Actions.
Configuração da implantação
Esta seção fornece configurações adicionais que podem ser aplicadas a um ambiente de implantação.
Adicionar ou remover outro pipeline
Para adicionar outro pipeline a um ambiente de implantação atual:
- Adicione um arquivo de definição de pipeline e recursos de pipeline ao repositório.
- Na configuração de implantação, adicione uma nova chave
sourcecom o valor apontando para o novo arquivo de definição de pipeline.
Exemplo:
environments:
dev:
...
pipelines:
- source: example-pipeline.yaml
- source: another-pipeline.yaml
Para remover um pipeline:
- Na configuração da implantação, remova a chave
sourcedo pipeline. - Remova o arquivo de definição do pipeline e os recursos do pipeline para o repositório.
- Implante a nova versão do pipeline. O pipeline não estará presente na nova versão do pacote.
Adicionar outro ambiente de implantação
Para adicionar outro ambiente de implantação:
- Na configuração de implantação, adicione uma nova chave ao mapeamento
environments. - Verifique se a configuração de implantação e as definições de pipeline usam variáveis e variáveis de configuração de implantação para executar ações de pipeline que exigem diferenciação entre recursos do Google Cloudque pertencem a cada ambiente.
Exemplo:
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "development-runner-us-central1"
...
variables:
service_account: "another-service-account@example-development-project.iam.gserviceaccount.com"
...
example-production-environment:
project: "example-production-project"
region: "us-central1"
composer_environment: "production-runner-us-central1"
...
variables:
service_account: "example-account@example-project.iam.gserviceaccount.com"
Variáveis, secrets e substituição
Depois de definir variáveis na configuração de implantação, você pode usá-las em definições de pipeline e perfis de recursos.
Adicionar variáveis personalizadas
É possível adicionar suas próprias variáveis à chave variables na configuração de implantação:
- No ambiente de configuração da implantação, adicione a chave
variables. - Adicione um mapeamento de nomes e valores de variáveis.
- Para extrair o valor da variável nas definições de pipeline e nos perfis de recursos, coloque o nome da variável entre chaves duplas:
{{ example_variable }}.
O exemplo a seguir define as mesmas variáveis em dois ambientes de implantação.
environments:
example-development-environment:
project: "example-development-project"
region: "us-central1"
composer_environment: "development-runner-us-central1"
artifact_storage:
bucket: "development-artifacts"
path_prefix: pipelines
pipelines:
- source: example-pipeline.yaml
variables:
service_account: "another-service-account@example-development-project.iam.gserviceaccount.com"
network_uri: projects/example-development-project/global/networks/default
example-production-environment:
project: "example-production-project"
region: "us-central1"
composer_environment: "production-runner-us-central1"
artifact_storage:
bucket: "production-artifacts"
path_prefix: pipelines
pipelines:
- source: example-pipeline.yaml
variables:
service_account: "example-account@example-project.iam.gserviceaccount.com"
network_uri: projects/example-production-project/global/networks/vpc-main
Confira a seguir um perfil de recurso do Serviço Gerenciado para Apache Spark que lê essas variáveis. As ações no arquivo de definição do pipeline
(example-pipeline.yaml) podem usar o mesmo perfil de recurso, e não é necessário
ajustá-las entre ambientes de produção e desenvolvimento.
profileId: serverless-standard
type: dataproc.session
definition:
environmentConfig:
execution_config:
service_account: "{{ service_account }}"
network_uri: "{{ network_uri }}"
Acessar parâmetros de configuração de implantação
Alguns parâmetros da configuração de implantação também estão disponíveis como variáveis:
projectregioncomposer_environmentCOMMIT_SHA: o SHA do commit atual do repositório Git. É possível usar essa variável, por exemplo, substituindo o valor dela ao implantar uma versão do pacote de pipeline local. Dessa forma, as ações que dependem do valor SHA do commit ainda vão operar no conteúdo correto do arquivo.
No exemplo a seguir, a definição do pipeline define padrões para ações
com base nos parâmetros de configuração de implantação project e region.
pipelineId: example-pipeline
description: Example pipeline
runner: 'airflow'
owner: 'data-eng-team'
modelVersion: '1.0'
defaults:
projectId: {{ project }}
location: {{ region }}
executionConfig:
retries: 1
Acessar secrets do GitHub Actions
É possível usar secrets do GitHub nos arquivos de configuração de implantação e definição de pipeline. Quando um pipeline é implantado por uma ação do GitHub, os valores desses secrets são transmitidos para as definições de pipeline e para a configuração de implantação.
Para criar um secret que será acessível durante a implantação:
No GitHub, adicione um secret com o prefixo
DEPLOY_VAR_. Exemplo:DEPLOY_VAR_API_KEY.Para mais informações sobre como criar segredos, consulte Usar segredos no GitHub Actions na documentação do GitHub.
Adicione a mesma variável de ambiente ao fluxo de trabalho do GitHub. Leia o valor dessa variável dos secrets do GitHub.
Exemplo:
jobs: deploy: runs-on: ubuntu-latest env: DEPLOY_VAR_API_KEY: ${{ secrets.API_KEY }} steps: ...Para mais informações sobre como adicionar variáveis de ambiente aos fluxos de trabalho, consulte Armazenar informações em variáveis na documentação do GitHub.
Use o nome da variável (sem o prefixo
DEPLOY_VAR_) nos arquivos de definição do pipeline e na configuração de implantação. Por exemplo:{{ API_KEY }}.(Opcional) Para implantar uma versão local de um pipeline que usa secrets do GitHub, você pode substituir as variáveis de ambiente
DEPLOY_VAR_*do secret usando parâmetros de linha de comando ou definindo-as no ambiente em que você executa comandos de implantação.
Substituir variáveis por parâmetros de linha de comando
Os comandos de implantação da CLI gcloud são compatíveis com o argumento
--substitutions, que pode ser usado para substituir ou definir variáveis para
as definições de pipeline e a configuração de implantação.
Para substituir variáveis usando parâmetros de linha de comando, forneça a lista de variáveis e os valores delas na linha de comando:
Exemplo:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local \
--substitutions=VARIABLE_NAME_1=value_1,VARIABLE_NAME_2=value_2
Como alternativa, você pode armazenar substituições em um arquivo YAML e especificá-lo no
argumento --substitutions-file:
gcloud beta orchestration-pipelines deploy \
--environment example-deployment-environment \
--local \
--substitutions-file=substitutions.yaml
No arquivo de substituições, forneça um mapeamento de variáveis:
VARIABLE_NAME_1: value_1
VARIABLE_NAME_2: value_2
É possível usar o nome da variável nos arquivos de definição de pipeline e na configuração de implantação. Exemplo: {{ VARIABLE_NAME_1 }}.
Fornecer e substituir variáveis por variáveis de ambiente
As definições de pipeline e a configuração de implantação podem usar variáveis de ambiente com o prefixo DEPLOY_VAR_.
Defina uma variável de ambiente:
export DEPLOY_VAR_VARIABLE_NAME_1=value_1É possível usar o nome da variável (sem o prefixo
DEPLOY_VAR_) nos arquivos de definição de pipeline e na configuração de implantação. Por exemplo:{{ VARIABLE_NAME_1 }}.