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 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.

CREATE OR ALTER TABLE vacation_spots (
  city VARCHAR,
  airport VARCHAR,
  avg_temperature_air_f FLOAT,
  avg_relative_humidity_pct FLOAT,
  avg_cloud_cover_pct FLOAT,
  precipitation_probability_pct FLOAT
) data_retention_time_in_days = 1;

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:

snow dcm plan --target PROD

Ou usando SQL:

EXECUTE DCM PROJECT my_db.my_schema.my_project
  PLAN
  USING CONFIGURATION PROD
FROM
  '@my_stage/my_project/';

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

snow dcm plan

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

snow dcm deploy

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

snow dcm refresh

Aciona uma atualização das tabelas dinâmicas após a implantação para garantir que os dados downstream estejam atualizados.

Testar expectativas

snow dcm test

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:

CREATE USER github_deployer
  TYPE = SERVICE
  DEFAULT_ROLE = deployer_role
  WORKLOAD_IDENTITY = (
    TYPE = OIDC
    ISSUER = 'https://token.actions.githubusercontent.com'
    SUBJECT = 'repo:<owner>/<repo>:environment:<environment_name>'
  );

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:

name: Deploy DCM project to production

on:
  push:
    branches:
      - main

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Set up Snowflake CLI
        uses: snowflakedb/snowflake-cli-action@v2
        with:
          use-oidc: true
          cli-version: "3.11"

      - name: Plan DCM project
        env:
          SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
        run: snow dcm plan --target PROD --save-output -x

      - name: Deploy DCM project
        env:
          SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
        run: snow dcm deploy --target PROD -x

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.

targets:
  DEV:
    account_identifier: MYORG-MYACCOUNT_DEV
    project_name: MY_DB.MY_SCHEMA.MY_PROJECT_DEV
    project_owner: DEV_DEPLOYER
    templating_config: DEV

  PROD:
    account_identifier: MYORG-MYACCOUNT_PROD
    project_name: MY_DB.MY_SCHEMA.MY_PROJECT_PROD
    project_owner: PROD_DEPLOYER
    templating_config: PROD

templating:
  configurations:
    DEV:
      wh_size: "X-SMALL"
    PROD:
      wh_size: "LARGE"

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:

CREATE OR ALTER TASK {{ environment }}.my_schema.my_task
  WAREHOUSE = my_warehouse
  SCHEDULE = '60 minute'
  AS select pi();

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.