DevOps com Snowflake¶
O Snowflake fornece ferramentas e práticas para gerenciar seus ambientes Snowflake como código, validar alterações antes que cheguem à produção e automatizar implantações por meio de pipelines CI/CD.
O que é DevOps com Snowflake?¶
O DevOps com Snowflake leva as melhores práticas de engenharia de software para o gerenciamento de infraestrutura de dados. Os princípios fundamentais são:
Definir como código. declare o estado desejado dos seus objetos Snowflake em arquivos com controle de versão. O Snowflake determina e aplica as alterações necessárias (criar, alterar ou descartar) para atingir esse estado.
Validar antes de implantar. visualize as alterações propostas em uma etapa do plano antes de aplicá-las à sua conta. Revise as criações, alterações e descartes e, em seguida, implante quando tiver certeza de que as alterações estão corretas.
Automatizar com CI/CD. Integre o Snowflake aos seus pipelines CI/CD existentes para que as implantações sejam acionadas por solicitações de pull, mesclagens ou execuções agendadas, em vez de etapas manuais.
A abordagem recomendada é usar projetos DCM (projetos de gerenciamento de alterações de banco de dados), que unificam o gerenciamento declarativo de objetos, a validação de planejamento e implantação, o direcionamento a múltiplos ambientes e a automação CI/CD em um único fluxo de trabalho.
Definir seus objetos Snowflake como código¶
Projetos DCM (recomendado)¶
Os Projetos DCM (projetos de gerenciamento de alterações de banco de dados) fornecem uma abordagem declarativa de infraestrutura como código para gerenciar seu ambiente Snowflake. Em vez de escrever scripts imperativos que especificam cada etapa, você define o estado de destino desejado para seus objetos. O Snowflake compara essas definições com o estado atual e determina as alterações necessárias.
Um projeto DCM consiste em:
Um arquivo de manifesto (
manifest.yml) que especifica os destinos de implantação, as funções de proprietário e as configurações de modelo para cada ambiente.Arquivos de definição (arquivos SQL em
sources/definitions/) que contêm instruções DEFINE para seus objetos Snowflake, GRANT para controle de acesso e ATTACH para expectativas de qualidade de dados.
O exemplo a seguir mostra um arquivo de definição que cria infraestrutura para várias equipes usando o modelo Jinja2:
Para obter a documentação completa sobre projetos DCM, incluindo como configurar seus arquivos de projeto, gerenciar vários ambientes e automatizar implantações, consulte Snowflake DCM Projects.
Projetos dbt no Snowflake¶
Os projetos dbt no Snowflake permitem que você implante e execute projetos dbt Core como objetos Snowflake nativos. Você define transformações SQL em modelos dbt, as implanta como um objeto DBT PROJECT com controle de versão e as executa com o Snowflake SQL ou a Snowflake CLI. Você pode agendar execuções com tarefas do Snowflake e integrar a implantação em pipelines CI/CD.
Para obter mais informações, consulte Projetos dbt no Snowflake.
Alternativa: CREATE OR ALTER com scripts com controle de versão¶
Para alterações de objetos individuais fora de um projeto DCM, você pode usar o comando CREATE OR ALTER <objeto>, que cria o objeto ou o altera para corresponder à definição especificada pelo comando. Ao usar este comando a partir de um arquivo com controle de versão em um repositório remoto, você pode reverter as alterações para uma versão anterior executando uma versão anterior do arquivo.
Nota
Você também pode usar o Snowflake Python APIs e Snowflake CLI para gerenciar os recursos do Snowflake. Se você preferir realizar seu trabalho de engenharia de dados em Python, a API Python de primeira classe do Snowflake permite que você faça o mesmo gerenciamento de recursos na linguagem em que você é mais produtivo.
Validar e visualizar alterações¶
Antes de implantar alterações em sua conta Snowflake, você pode visualizar as modificações propostas para verificar se elas correspondem à sua intenção.
Planejar com projetos DCM¶
Os projetos DCM usam um modelo de planejamento e implantação. O comando PLAN compara seus arquivos de definição com o estado atual de sua conta e produz uma lista de alterações propostas sem modificar nada.
É possível executar um plano usando a Snowflake CLI:
Ou usando SQL:
Revise a saída para confirmar as criações, alterações e descartes esperados antes de prosseguir com a implantação.
Automatizar a implantação com CI/CD¶
Você pode integrar o Snowflake aos seus pipelines CI/CD para que as implantações sejam acionadas automaticamente por eventos como mesclagem de solicitações de pull, envios para ramificações ou execuções agendadas.
A tabela a seguir mapeia trabalhos comuns de pipeline CI/CD para os comandos correspondentes da Snowflake CLI:
Trabalho de pipeline |
Comando CLI |
Descrição |
|---|---|---|
Planejar na solicitação de pull |
|
Gera um plano que visualiza as alterações que seriam aplicadas ao ambiente de destino. Você pode publicar a saída do plano como um comentário PR para revisão. |
Implantar na mesclagem |
|
Aplica as alterações planejadas ao ambiente de destino. Normalmente, é executado após a mesclagem de um PR à ramificação principal. |
Atualizar tabelas dinâmicas |
|
Aciona uma atualização das tabelas dinâmicas após a implantação para garantir que os dados downstream estejam atualizados. |
Testar expectativas |
|
Executa verificações de expectativas definidas em seu projeto DCM para conferir se a implantação produziu os resultados esperados. |
Ações do GitHub¶
Você pode usar o GitHub Actions para automatizar os trabalhos que constituem um pipeline CI/CD.
Para autenticar com segurança, a Snowflake recomenda o uso da federação de identidade de carga de trabalho (workload identity federation, WIF) com o OpenID Connect (OIDC) em vez de credenciais estáticas, como senhas ou chaves privadas. Com o WIF OIDC, o GitHub Actions solicita um token de curta duração do provedor OIDC do GitHub, e o Snowflake verifica o token diretamente. Nenhum segredo de longa duração é armazenado em seu repositório.
Para configurar o WIF OIDC, crie um usuário de serviço do Snowflake que confie no provedor OIDC do GitHub:
Para obter mais informações sobre como configurar a declaração do assunto e a WIF em geral, consulte Federação de identidades de carga de trabalho.
O exemplo a seguir mostra um fluxo de trabalho que usa o WIF OIDC e os projetos DCM para planejar e implantar alterações no push para a ramificação main:
Para obter mais informações sobre como configurar CI/CD com a Snowflake CLI, incluindo métodos alternativos de autenticação, consulte Integração de CI/CD com Snowflake CLI.
Gerenciar ambientes¶
Ao manter ambientes separados para desenvolvimento, teste e produção, suas equipes podem isolar as atividades de desenvolvimento do ambiente de produção, reduzindo a chance de consequências não intencionais e corrupção de dados.
Perfis de conexão para direcionamento de ambiente¶
Com os projetos DCM, você pode definir vários destinos de implantação em seu arquivo manifest.yml. Cada destino mapeia para uma conta (ou banco de dados) Snowflake, objeto de projeto, função de proprietário e configuração de modelo específicos. É possível implantar os mesmos arquivos de definição em todos os ambientes com configurações específicas do ambiente aplicadas por meio de perfis de configuração.
Para padrões corporativos, como configurações de vários projetos e colaboração em equipe, consulte Casos de uso corporativos dos DCM Projects.
Avançado: parametrização Jinja para scripts personalizados¶
Os projetos DCM têm compatibilidade nativa com modelos Jinja2 em arquivos de definição. É possível usar variáveis de modelo, loops, condições, macros e dicionários para tornar suas definições reutilizáveis em diferentes ambientes. Os valores das variáveis vêm de perfis de configuração no manifest.yml ou de substituições em tempo de execução.
Para obter detalhes sobre modelos de DCM, consulte Arquivos e modelos dos DCM Projects.
Você também pode parametrizar scripts SQL independentes (fora de projetos DCM) usando Jinja2 com EXECUTE IMMEDIATE FROM. A Snowflake CLI também permite que você passe variáveis de ambiente para scripts Python.
Para alterar um destino de implantação, por exemplo, você substitui o nome do banco de dados de destino por uma variável Jinja, como {{ environment }} em scripts SQL ou uma variável de ambiente em scripts Python. Essa técnica é mostrada nos exemplos de código SQL e Python a seguir:
Introdução¶
Para começar a usar projetos DCM, consulte Snowflake DCM Projects para obter uma visão geral completa do recurso, incluindo como configurar seus arquivos de projeto, definir ambientes e implantar alterações.
Para projetos de amostra, modelos CI/CD e guias de início rápido, consulte o repositório DCM snowflake-labs.
Para seguir um tutorial passo a passo, experimente o guia de início rápido Introdução aos projetos DCM do Snowflake.