Implantar e gerenciar DCM Projects¶
Este tópico descreve como criar e implantar DCM Projects para gerenciar ambientes Snowflake, incluindo contas.
Gerenciar um DCM project envolve as seguintes etapas:
Prepare sua conta Snowflake para um DCM project.
Defina a configuração e os objetos do projeto nos arquivos do projeto.
Crie um objeto de DCM Projects.
Planeje a versão preliminar das alterações propostas antes da implantação.
Implante o projeto.
Mantenha o projeto monitorando, atualizando e repetindo o processo conforme necessário.
Você pode implantar continuamente alterações incrementais em seu projeto, bem como alterações de infraestrutura de conta em grande escala.
A Snowflake recomenda que você implante continuamente alterações e adições incrementais ao seu projeto, em vez de passar de 0 a 100 alterações de infraestrutura de conta em grande escala em uma única implantação.
Preparar-se para um DCM project¶
Para começar a usar DCM Projects, sua conta Snowflake deve atender aos seguintes pré-requisitos:
Um banco de dados e um esquema onde você possa criar seu objeto DCM Projects
Uma função com privilégios para criar um objeto DCM Projects e acesso para executar consultas em um warehouse
Para o Snowflake CLI, uma função com privilégios para criar uma área de preparação temporária
Esta seção descreve as tarefas que você precisa concluir para se preparar para DCM Projects:
Instale as interfaces para usar com DCM Projects se você quiser usar o Snowflake CLI ou o Cortex CLI.
Configure a integração com o Git (recomendado, mas não obrigatório)
Nota
O repositório do DCM snowflake-labs é atualizado continuamente com recursos para ajudar você a começar.
Projetos de demonstração e início rápido: clone o repositório em um espaço de trabalho do Snowflake ou em uma pasta local para testar os comandos de DCM Projects e explorar os recursos de DCM Projects.
GitHub Actions reutilizável: ações compostas para analisar manifestos, testar conexões, planejar e implantar DCM Projects em pipelines CI/CD. Para obter mais informações, consulte Ações do GitHub.
Amostras de fluxos de trabalho: arquivos de fluxo de trabalho prontos para uso que compõem as ações reutilizáveis em pipelines CI/CD completos.
Ferramentas de interface¶
Você tem as seguintes opções de interface disponíveis para DCM Projects.
Ferramenta de interface |
Melhor para |
|---|---|
Snowsight Um espaço de trabalho no Snowsight é um IDE nativo da nuvem Snowflake em sua conta. |
|
IDE local com o Snowflake CLI A interface mais conhecida e personalizada para engenheiros de software. |
|
Cortex Code Uma ferramenta de AI de agente para Snowflake. Consulte Cortex Code para DCM Projects para obter mais informações. |
|
Comandos SQL |
|
Cortex Code para DCM Projects¶
O Cortex Code é uma ferramenta de AI de agente para o Snowflake. Com a habilidade DCM ativada, o Cortex Code pode criar, migrar, depurar e implantar DCM Projects de forma autônoma. Ele também pode trabalhar com você passo a passo.
Nota
O Cortex Code com a habilidade DCM está disponível atualmente apenas por meio do Cortex Code CLI. Ele não está disponível no Snowsight Workspaces.
A habilidade DCM com o Cortex Code permite o seguinte:
Criar um novo DCM project do zero, incluindo o arquivo de manifesto, a estrutura de pastas e os arquivos de definição.
Criar e editar instruções DEFINE, modelos Jinja e macros.
Executar comandos PLAN, DEPLOY, REFRESH, TEST e PREVIEW.
Interpretar a saída do plano, diagnosticar falhas e sugerir correções.
Baixar e inspecionar artefatos de implantação.
Navegar e explicar um DCM project existente.
Para começar a usar a habilidade DCM com o Cortex Code, siga estas etapas:
Instale o Cortex Code CLI conforme descrito em Instalando o Cortex Code.
Inicie o Cortex Code no seu terminal.
Use a referência de habilidade
$dcmou use o termoDCMem seu prompt de linguagem natural para interagir com seus DCM Projects de forma conversacional.
Por exemplo:
«Crie um novo projeto DCM para nosso pipeline de análise»
«Planeje meu projeto em relação à meta PROD»
«Por que meu último plano falhou?»
«Adicione uma nova definição de tabela dinâmica para gastos do cliente»
Snowflake CLI para DCM Projects¶
O Snowflake CLI é uma interface de linha de comando para o Snowflake. É uma ferramenta que você pode usar para interagir com sua conta Snowflake a partir do seu IDE local.
Os projetos DCM exigem a versão 3.16 ou superior do Snowflake CLI. Instale ou atualize o Snowflake CLI conforme descrito em Instalação do Snowflake CLI.
Configure sua conexão com sua conta Snowflake conforme descrito em Configurando o Snowflake CLI e conectando-se ao Snowflake. Confirme se você tem uma conexão funcionando:
Navegue até o diretório local do seu clone do repositório Git. Por exemplo:
Consulte os comandos do Snowflake CLI DCM disponíveis:
Integração com Git¶
Conecte-se ao repositório Git em que seus arquivos de definição de DCM project estão armazenados.
Crie um novo espaço de trabalho a partir de um repositório Git.
Crie ou selecione uma ramificação Git para suas alterações planejadas.
O Snowflake clona os arquivos dessa ramificação para o editor do seu espaço de trabalho.
Navegue até a pasta onde você tem seus arquivos de definição de DCM project ou onde deseja criá-los.
-
A extensão Snowflake para VSCode não é necessária aqui, mas pode ser útil.
Conecte-se ao seu repositório Git.
Conecte seu IDE local ao seu repositório Git remoto.
Crie ou selecione uma ramificação para as alterações planejadas.
Clone essa ramificação para o seu disco local.
Navegue até a pasta onde você tem seus arquivos de definição de DCM Projects ou onde deseja criá-los.
Criar uma DCM project¶
Funções e privilégios necessários¶
A função do usuário que cria um objeto de DCM project deve ter as seguintes funções e privilégios:
O privilégio CREATE DCM PROJECT ON SCHEMA:
Criar uma DCM project¶
Crie um objeto de DCM project usando uma das seguintes opções.
Para criar um projeto para um destino não padrão, use um dos seguintes comandos:
No menu de navegação, selecione Projects » Workspaces.
Na página Workspaces, selecione «+Add new» -> «DCM Project» para criar uma nova pasta de DCM project.
Selecione «Define default target environment» para selecionar ou criar um novo objeto de DCM project para o destino padrão no manifesto.
Ao executar DCM PLAN em um destino que tem um objeto de DCM project definido no manifesto, mas que ainda não existe, a UI solicitará que você confirme a criação desse objeto de DCM project com base no nome definido e na função de proprietário antes de executar o plano.
O Target indica se o objeto de DCM project especificado já existe e pode ser utilizado ou não.
Verde: o objeto de DCM project existe e pode ser utilizado para executar PLAN ou DEPLOY.
Vermelho: o objeto de DCM project não existe e precisa ser criado primeiro.
Controle de acesso e privilégios de função¶
Você pode definir o controle de acesso baseado em função (role-based access control, RBAC) do objeto de DCM project de nível de esquema para privilégios READ, MONITOR ou OWNERSHIP.
Esses privilégios são independentes do controle de acesso para arquivos de definição armazenados em um espaço de trabalho, uma área de preparação ou um repositório.
Privilégio |
Descrição |
Operações permitidas |
|---|---|---|
READ |
|
|
MONITOR |
|
|
OWNERSHIP |
|
|
Nota
Assim como outros comandos do Snowflake, EXECUTE DCM PROJECT respeita quando privilégios de funções secundárias estão habilitados para o usuário que executa o comando. Execute USE SECONDARY ROLES NONE; para que você não esteja utilizando privilégios de outras funções além da função de proprietário do projeto. Isso garante que o comportamento de implantação seja consistente em diferentes ambientes quando executado por diferentes usuários de serviço com a mesma função principal.
Propriedade de objetos gerenciados por DCM¶
A função que implanta um DCM project, por padrão, tem o privilégio OWNERSHIP de todos os objetos implantados.
As definições de projeto podem incluir instruções GRANT OWNERSHIP para outras funções. A Snowflake recomenda que a função de proprietário de DCM project conceda a propriedade de objetos gerenciados por DCM apenas para outra função de nível inferior que ela também tenha. Assim, o projeto pode continuar gerenciando esse objeto, pois a função de proprietário do projeto «herda» os privilégios da nova função proprietária do objeto.
Se a função de proprietário do DCM project conceder a propriedade de objetos gerenciados por DCM para outra função que ela não tenha, o projeto não poderá mais gerenciar esse objeto implantado, pois a função de proprietário do projeto não terá mais a propriedade dele. As implantações subsequentes falharão. A definição do objeto precisa ser removida do projeto ou a propriedade precisa ser concedida de volta à função de proprietário do projeto.
Se você deseja migrar objetos existentes para serem gerenciados por um DCM project, a função que tem o objeto de DCM project também precisa ter privilégios de propriedade (diretos ou herdados por meio de outras funções) no objeto a ser gerenciado pelo DCM project.
Nota
Se for um objeto migrado, recomendamos adicionar a instrução GRANT OWNERSHIP correspondente às definições do projeto também para garantir que o estado atual e as definições do DCM project estejam sincronizados.
Definir um DCM project¶
Um DCM project é baseado em um arquivo de manifesto e um ou mais arquivos de definição de objeto SQL. Esses arquivos normalmente são armazenados e gerenciados em um repositório Git ou em seu espaço de trabalho local.
O arquivo de manifesto
Especifica um ou mais ambientes de destino com identificadores de conta correspondentes, objetos de DCM project, funções de proprietário para esses objetos e configurações de modelo opcionais
Opcionalmente, especifica os padrões de modelo e uma ou mais configurações com valores para variáveis de modelo.
Os arquivos de definição de objeto
Defina um grupo de objetos, concessões e expectativas do Snowflake que você deseja gerenciar juntos neste DCM project.
Consulte Criar uma pasta de DCM project para armazenar seus arquivos de definição para saber como configurar uma pasta de DCM project e os arquivos de definição e como usar modelos para definir seu DCM project.
Planejar um DCM project¶
Planejar um DCM project executa uma simulação para visualizar as alterações antes da implantação. O Snowflake compara seus arquivos de definição de projeto com objetos existentes e mostra quais objetos serão criados, alterados ou descartados. Nenhuma alteração é feita em sua conta.
Use o planejamento para revisar e validar as alterações antes de implantar um projeto DCM. Você pode especificar opções como uma configuração ou um caminho de saída para os resultados do plano.
O comando PLAN imita o comando DEPLOY o máximo possível, exceto que ele não executa nenhuma instrução DDL.
Importante
Sempre execute o comando PLAN em seus projetos antes da implantação para garantir que não haja erros de sintaxe, modelos, dependência de objetos, privilégios de acesso e assim por diante. Revise a saída do plano para depurar quaisquer erros, visualizar o Jinja renderizado com as variáveis fornecidas e visualizar as alterações que serão feitas após a implantação.
O plano executa as seguintes etapas:
Renderiza todos os modelos Jinja com o perfil de configuração selecionado ou os valores fornecidos em tempo de execução.
Compara todas as definições com o estado atual das entidades definidas como parte da última implantação.
Converte todas as instruções definidas em instruções CREATE, ALTER, DROP, GRANT e REVOKE.
Classifica todas as instruções com base em suas interdependências.
Compila todas as instruções.
Nota
Embora PLAN detecte quase todos os erros possíveis que podem ocorrer durante a implantação, ele não garante uma implantação bem-sucedida.
Execução do comando PLAN¶
O comando PLAN recebe as seguintes informações como entrada:
O caminho para o arquivo de manifesto
O CLI lê o destino do manifesto (sinalizador
default_targetou--target). Para comandos SQL, o caminho para o arquivo de manifesto e o nome do projeto devem ser fornecidos.Valores definidos para variáveis Jinja (opcional).
O
templating_configdo destino seleciona automaticamente o perfil de configuração. Para comandos SQL, use a cláusula USING CONFIGURATION para especificar o perfil.Um ou mais valores do perfil de configuração a serem substituídos (opcional).
A seguir, veja exemplos de como executar o comando PLAN.
Execute o comando snow dcm plan em seu terminal IDE local ou como parte de um fluxo de trabalho Git.
Um exemplo de comando CLI para planejar um projeto DCM a partir de um diretório local é:
Um exemplo de comando CLI para planejar um projeto DCM a partir de uma área de preparação do Snowflake ou clone de repositório Git é:
Um exemplo de comando CLI para planejar um projeto DCM com argumentos opcionais é:
As variáveis devem estar entre aspas duplas, com aspas simples adicionais para valores de cadeia de caracteres. As listas de valores devem ficar entre colchetes.
No painel de controle do DCM, na parte superior:
Selecione a pasta do seu projeto no seu espaço de trabalho atual.
Selecione seu destino (se você tiver vários).
(opcional) Substitua parâmetros específicos.
Clique em Plan.
A UI do Snowsight usa automaticamente o objeto do DCM project definido no destino do manifesto. Se o objeto do projeto ainda não existir, você poderá criá-lo pela UI.
Quando o PLAN for concluído, a saída será aberta em uma nova guia. Se você não a vir, clique em Plan novamente para abrir a guia.
Se um plano já existir, você poderá optar por replanejar se tiver alterado suas definições.
A saída do plano é sempre gerada automaticamente na subpasta do projeto out/.
Você pode executar um DCM PLAN em SQL de qualquer lugar onde possa executar comandos SQL, dentro do Snowflake ou conectado ao Snowflake. Use o comando EXECUTE DCM PROJECT com o modo PLAN.
Um exemplo de um comando SQL para planejar um projeto DCM a partir de um caminho de espaço de trabalho é:
Um exemplo de um comando SQL para planejar um projeto DCM ao usar Jinja com perfis de configuração, mas substituindo wh_size e teams é:
Um exemplo de um comando SQL para planejar um DCM project ao usar modelos Jinja sem perfis de configuração é:
Caminho do arquivo de definição¶
Você tem as seguintes opções para referenciar a localização dos arquivos de manifesto e definição.
A partir de um caminho do Workspace
A interface do usuário do Snowsight lista automaticamente todas as definições de DCM project dentro do espaço de trabalho atual. Você pode selecionar um desses caminhos, e os espaços de trabalho o usarão para executar comandos DCM.
Se você quiser executar comandos SQL manualmente em espaços de trabalho, também poderá referenciar o mesmo caminho em qualquer um dos seus espaços de trabalho.
Dica: o menu de três pontos atrás de cada arquivo em seu espaço de trabalho permite copiar o caminho completo para esse arquivo em seu código SQL.
Um exemplo de um comando SQL para planejar um projeto DCM a partir de um caminho de espaço de trabalho é:
A partir de um clone de repositório Git local em seu disco
Selecione o diretório que contém seu arquivo
manifest.ymlantes de executar o comando CLI em seu IDE local. Como alternativa, você pode especificar um diretório local diferente que contenha o manifesto e as definições que deseja usar.Exemplo de um comando CLI para planejar um DCM project a partir do diretório atual de um repositório Git local:
Exemplo de um comando CLI para planejar um DCM project a partir de um diretório diferente em um clone de repositório Git local:
A partir de seu repositório remoto em um fluxo de trabalho
A mesma sintaxe CLI pode ser utilizada quando os comandos DCM são executados em um fluxo de trabalho CI/CD. Você pode chamar a CLI diretamente ou usar o GitHub Actions reutilizável do repositório DCM snowflake-labs, que lidam com a configuração da CLI, autenticação e comandos do DCM internamente.
Um exemplo usando a ação
dcm-planreutilizável:A partir de um clone de repositório Git ou área de preparação no Snowflake
Caso você queira executar um PROCEDURE ou TASK dentro do Snowflake que execute comandos DCM, este comando SQL pode referenciar um caminho absoluto para uma área de preparação do Snowflake ou um clone de repositório Git dentro da conta.
Para clones de repositórios Git, considere executar primeiro ALTER GIT REPOSITORY FETCH para obter a versão mais recente.
Só é possível utilizar os caminhos
'@...' ao executar comandos DCM SQL.Um exemplo de um comando SQL para planejar um projeto DCM a partir de uma área de preparação ou clone de repositório Git no Snowflake é:
Saída do plano¶
Para conferir o formato de saída de PLAN e DEPLOY, incluindo o esquema JSON e exemplos, consulte a seção da saída de PLAN e DEPLOY na referência do comando EXECUTE DCM PROJECT.
Implantar um DCM project¶
Quando você implanta um DCM project, as seguintes ações são realizadas:
Objetos que estão definidos, mas ainda não existem, são criados.
Objetos que já existem, mas diferem da definição atual, são alterados.
Objetos que já existem conforme definidos são ignorados.
Objetos que já existem, mas não estão mais definidos, são descartados.
O mesmo comportamento se aplica a concessões e expectativas de qualidade de dados anexadas definidas no projeto.
Importante
Para evitar qualquer perda de dados não intencional, sempre execute e revise a saída do seu PLAN antes de executar DEPLOY.
Cada DCM project pode ter apenas uma instância implantada por vez. Vários perfis de configuração não podem coexistir. Implantar a configuração B com o mesmo DCM project descartará quaisquer objetos de outras configurações anteriores que não estejam definidos na B.
Crie um DCM project para cada ambiente de destino. O DCM project para cada ambiente pode então apontar para os mesmos arquivos de definição, mas serem implantados independentemente com valores diferentes para cada variável, como suffix => 'DEV_JS', para que possam existir de maneira independente lado a lado na mesma conta Snowflake.
Será possível substituir valores para variáveis selecionadas em tempo de execução se você quiser usar um perfil predefinido com uma pequena variação.
Por exemplo:
Cada tentativa de implantação (bem-sucedida, com falha ou cancelada) tem um número de implantação, por exemplo, DEPLOYMENT$1. Como opção, você pode especificar uma cadeia de caracteres exclusiva como um alias de implantação a fim de nomear implantações individuais para melhor observabilidade no histórico de implantações. Pense no alias de implantação como uma mensagem de commit para sua alteração de código.
Cada comando DEPLOY primeiro executa um PRE-PLAN interno como parte da implantação. Se o PRE-PLAN for bem-sucedido, o DEPLOY é executado imediatamente em seguida. Não há opção para interceptar ou revisar essa etapa do plano interno. O PRE-PLAN é executado para reduzir ainda mais o risco de falha durante a implantação. Se um DEPLOY falhar, você poderá ver na mensagem de erro se a falha ocorreu durante a etapa PRE-PLAN ou DEPLOY. A falha durante a etapa PRE-PLAN é semelhante a PLAN: nenhuma alteração DDL é executada.
Importante
A falha durante a etapa DEPLOY pode resultar na execução parcial das alterações definidas. Isso pode fazer com que alguns dos objetos gerenciados fiquem em um estado indefinido. Na maioria dos casos, corrigir a causa raiz e executar DEPLOY novamente restaura o estado de destino definido.
Não é possível personalizar o caminho de destino para o arquivo de saída DEPLOY. Os artefatos de implantação são sempre armazenados dentro do DCM project.
Execução do comando DEPLOY¶
Para executar o comando DEPLOY, forneça as seguintes entradas:
O caminho para o arquivo de manifesto.
Será preciso nomear um perfil de configuração se perfis de configuração estiverem definidos no manifesto.
Como opção, valores para o perfil de configuração que substituem os valores padrão.
Como opção, um alias de implantação.
A seguir, veja exemplos de como executar o comando DEPLOY.
Um exemplo de comando SQL para implantar um DCM project usando Jinja com perfis de configuração, mas substituindo wh_size e teams, é:
Você pode executar snow dcm deploy em seu terminal IDE local ou como parte de um fluxo de trabalho Git.
Um exemplo de comando CLI para implantar um DCM project a partir de um diretório local é:
Um exemplo de comando CLI para implantar um DCM project direcionado a um ambiente não padrão é:
Um exemplo de comando CLI para implantar um DCM project com argumentos opcionais é:
No menu de navegação, selecione Projects » Workspaces.
Selecione a pasta do seu projeto no espaço de trabalho atual.
Selecione seu destino (se você tiver vários).
Clique em Plan.
A UI usará automaticamente o objeto de DCM project definido no destino do manifesto. Se o objeto do projeto ainda não existir, você poderá criá-lo pela UI.
Assim que o PLAN for concluído, a saída será aberta em uma nova guia. Se você não a vir, clique em Plan novamente para abrir a guia.
Se já existir um plano, você poderá optar por replanejar caso tenha alterado suas definições.
Revise a saída de PLAN para garantir que ela não contenha alterações não intencionais.
Clique em Deploy para executar a implantação com o mesmo destino e valores de PLAN.
Consulte Saída de PLAN e DEPLOY para obter a estrutura de saída padrão do plano.
Gerenciar um DCM project¶
Mostrar todos os objetos gerenciados por um DCM project¶
O comando SHOW ENTITIES IN DCM PROJECT permite que você veja uma lista de todos os objetos Snowflake que estão sendo gerenciados por um DCM project específico. Ele fornece uma lista de nomes totalmente qualificados para todos os objetos. Para ver os resultados, você precisa do privilégio READ no DCM project e dos privilégios para ver o próprio objeto gerenciado.
Nota
O resultado não corresponde necessariamente aos objetos da implantação mais recente. Objetos que foram descartados ou desvinculados manualmente do projeto não são listados no resultado.
Você pode usar LIKE para pesquisar por nome ou utilizar um operador de fluxo para processar ou filtrar ainda mais o conjunto de resultados.
Da mesma forma, você pode usar SHOW GRANTS e SHOW FUTURE GRANTS que estão definidos e implantados com esse projeto.
Exemplos para ver todos os objetos que estão sendo gerenciados por um DCM project:
No menu de navegação, selecione Catalog » Database Explorer.
Navegue até o esquema que contém o objeto de DCM project.
Selecione o objeto de DCM project para ver os detalhes dele.
Selecione a guia Objects para ver uma lista de todos os objetos Snowflake atualmente gerenciados por esse objeto de projeto.
Clique no nome de um objeto para abrir a página de detalhes desse objeto em uma guia nova.
Desvincular objetos de um DCM project¶
Usando o comando ALTER <objeto> com a cláusula UNSET DCM PROJECT, você pode desvincular um objeto que foi implantado e agora é gerenciado por um DCM project. O comando remove a associação entre o objeto e o DCM project sem descartar o objeto. É possível usar esse comando quando você quer começar a gerenciar um objeto por um DCM project diferente.
Remova a instrução DEFINE correspondente dos arquivos de definição do seu projeto antes de implantá-lo novamente. Caso contrário, o objeto será reintegrado ao DCM project.
Um exemplo de comando SQL para desvincular um objeto de um DCM project:
Você não pode desvincular concessões ou execuções implantadas de um projeto DCM.
Descartar um DCM project¶
Quando um objeto DCM project é descartado, todas as entidades, concessões e expectativas gerenciadas permanecem como «não gerenciadas».
Importante
Descartar ou substituir um objeto de DCM project faz com que você perca todos os artefatos do histórico de implantação que o objeto contém.
No menu de navegação, selecione Catalog » Database Explorer.
Navegue até o esquema que contém o DCM project.
Selecione o DCM project para ver a página de detalhes dele.
Clique no menu de três pontos no canto superior direito e selecione Drop.
Automatizar uma implantação de DCM project¶
Práticas recomendadas para CI/CD¶
Siga estas práticas ao automatizar implantações com pipelines de CI/CD:
Um DCM project destinado a um ambiente de não produção deve pertencer a uma função diferente da sua contraparte de produção para evitar implantações acidentais em produção.
Um DCM project destinado a um ambiente de produção deve pertencer a uma função dedicada para implantações de produção com privilégios de acesso especificamente adaptados, suficientes apenas para implantar todos os objetos no projeto.
Evite usar funções de administrador geral para a propriedade de DCM project. Conceda essas funções apenas a usuários de serviço, não a desenvolvedores individuais.
Conceda a função dedicada de implantação de produção apenas a usuários de serviço, não a desenvolvedores individuais.
Restrinja a propriedade à função de implantação de produção para garantir a imutabilidade de infraestrutura crítica ou produtos de dados.
Se a função dedicada de implantação de produção conceder a propriedade de objetos de produção a outras funções, os usuários que receberem essas funções ainda poderão modificar ou descartar os objetos de produção.
Ações do GitHub¶
O repositório DCM snowflake-labs fornece um conjunto do GitHub Actions composto reutilizável que automatiza pipelines de DCM Projects. Cada ação trata de uma etapa do ciclo de vida, e você pode referenciá-las em seus próprios fluxos de trabalho para criar pipelines CI/CD de ponta a ponta. Apenas a sintaxe do fluxo de trabalho difere entre as plataformas; os mesmos conceitos de CI/CD se aplicam ao Azure DevOps, GitLab CI/CD, Bitbucket Pipelines e outros.
Nota
O GitHub Actions no repositório DCM snowflake-labs é fornecido “como está” para fins de avaliação. Ele não é oficialmente compatível com o Snowflake. Use por sua conta e risco.
As seguintes ações reutilizáveis estão disponíveis:
Ação |
Descrição |
|---|---|
|
Analisa o |
|
Testa a conectividade do Snowflake, valida se a função de conexão corresponde ao manifesto |
|
Executa |
|
Implanta o DCM project com detecção opcional de descarte de dados, atualização da tabela dinâmica, teste de expectativa e scripts SQL pós-implantação. Opcionalmente, publica um resumo de implantação na solicitação de pull. |
Para usar uma ação em seu fluxo de trabalho, faça referência a ela com:
Para obter a documentação completa das entradas e saídas de cada ação, consulte as ações README.
Pré-requisitos¶
Antes de usar o GitHub Actions reutilizável, conclua as seguintes etapas de configuração:
Armazene os arquivos de DCM project em um repositório Git.
Crie um ambiente GitHub para cada destino do manifesto (por exemplo,
DCM_STAGE,DCM_PROD_US). O nome do ambiente deve corresponder ao nome do destino em seumanifest.yml.Defina as variáveis ``SNOWFLAKE_USER`` e
DCM_PROJECT_PATHno blocoenvdo fluxo de trabalho ou como variáveis do repositório GitHub.Conceda ao fluxo de trabalho as permissões necessárias:
Autenticação¶
Todas as ações autenticam usando o GitHub Action da Snowflake CLI. OIDC (OpenID Connect) é a abordagem recomendada porque usa os tokens de identidade integrados do GitHub, de modo que nenhuma senha ou chave privada precisa ser armazenada como segredo.
Para configurar a autenticação OIDC, crie um usuário de serviço do Snowflake com uma identidade de carga de trabalho que confie no provedor OIDC do GitHub:
Substitua <owner>/<repo> pelo seu repositório GitHub e <env_name> pelo nome do ambiente GitHub (por exemplo, DCM_STAGE). Se você tiver vários ambientes, crie um usuário de serviço separado para cada um deles ou use a personalização de declaração de assunto. Em seguida, conceda ao usuário de serviço a função especificada como project_owner em seu manifesto.
Se não for possível usar OIDC, as ações também são compatíveis com autenticação por senha, PAT e par de chaves. Consulte a seção de autenticação de README das ações para obter instruções de configuração.
Fluxos de trabalho de amostra¶
O diretório GitHub_workflows no repositório DCM snowflake-labs contém arquivos de fluxo de trabalho prontos para uso que compõem as ações reutilizáveis em pipelines CI/CD completos. Você pode copiá-los para o diretório .github/workflows/ do seu repositório e personalizá-los para o seu projeto. Para obter instruções completas de configuração, consulte o README dos fluxos de trabalho de amostra.
Todos os fluxos de trabalho de amostra leem a função account_identifier e project_owner do Snowflake diretamente dos destinos do manifesto, de modo que a configuração específica do ambiente reside no manifest.yml com controle de versão, em vez de em segredos do GitHub duplicados. Somente as credenciais do usuário do serviço são armazenadas como segredos.
As amostras de fluxos de trabalho demonstram os seguintes padrões aplicáveis a qualquer configuração de DCM Projects CI/CD:
Configuração orientada por manifesto: cada fluxo de trabalho lê
account_identifier,project_ownereproject_namedos destinos do manifesto, mantendo a configuração do ambiente em um único local.Proteção contra descarte de dados: o fluxo de trabalho de implantação detecta operações DROP destrutivas em objetos que contêm dados (bancos de dados, esquemas, tabelas e áreas de preparação) e bloqueia a implantação caso alguma seja encontrada.
Promoção sequencial da área de preparação para a produção: a implantação em produção só começa após a implantação em área de preparação ser concluída com sucesso, as tabelas dinâmicas serem atualizadas e os testes de qualidade de dados serem aprovados.
Comentários da solicitação de pull: os resumos do planejamento e da implantação são publicados como comentários na solicitação de pull original.
Amostra de fluxo de trabalho: Testar conexões¶
Arquivo de configuração do fluxo de trabalho: DCM_1_Test_Connections.yml
Acionador: manual com o evento
workflow_dispatch
Este fluxo de trabalho valida se o usuário do serviço GitHub Actions pode se conectar a todos os ambientes de destino definidos no manifesto. Use-o ao configurar um novo repositório, integrar uma nova conta ou depurar problemas de autenticação. O fluxo de trabalho executa as seguintes etapas:
Analisa todos os nomes de destino de
manifest.ymldinamicamente.Usa uma estratégia de matriz do GitHub Actions para testar cada destino em paralelo.
Para cada destino, verifica a conexão com o Snowflake, relata a conta, o usuário e a função conectados e verifica se a função conectada corresponde ao proprietário do DCM project.
Relata se o objeto de DCM project já existe e se o usuário do serviço tem privilégios de implantação.
Amostra de fluxo de trabalho: Testar PR para o principal¶
Arquivo de configuração do fluxo de trabalho: DCM_2_Test_PR_to_main.yml
Acionador: solicitação de pull aberta, sincronizada ou reaberta na ramificação
main
Este fluxo de trabalho executa um PLAN no destino de produção como um teste de integração para cada solicitação de pull. Ele fornece aos revisores um resumo das alterações planejadas diretamente na solicitação de pull. O fluxo de trabalho executa as seguintes etapas:
Executa
snow dcm planno destino PROD.Analisa
plan_result.jsonpara resumir as operações CREATE, ALTER e DROP agrupadas por domínio de objeto.Carrega artefatos do plano para inspeção posterior.
Publica o resumo do plano como um comentário na solicitação de pull.
Falha na verificação se PLAN falha, bloqueando a mesclagem.
Amostra de fluxo de trabalho: Implantar em produção¶
Arquivo de configuração do fluxo de trabalho: DCM_3_Deploy_to_Prod.yml
Acionador: envie para a ramificação
main(normalmente uma solicitação pull mesclada)
Este fluxo de trabalho planeja e implanta em um único destino de produção. Use-o quando você não precisar de um ambiente de preparação ou quando a preparação for feita separadamente. O fluxo de trabalho executa as seguintes etapas:
Plano: executa
snow dcm plane resume o conjunto de alterações.Detecção de descarte de dados: bloqueia o pipeline se o plano contém operações DROP para bancos de dados, esquemas, tabelas ou áreas de preparação.
Implantar: executa
snow dcm deploy.Pós-scripts (opcional): executa scripts post-hook SQL com injeção de variáveis Jinja.
Atualizar tabelas dinâmicas (opcional): executa
snow dcm refreshpara aplicar qualquer nova lógica de transformação.Testar expectativas (opcional): executa
snow dcm testpara validar as expectativas de qualidade de dados.
Após a implantação, o fluxo de trabalho publica opcionalmente um resumo do status para a solicitação de pull original.
Amostra de fluxo de trabalho: Implantar na área de preparação e depois na produção¶
Arquivo de configuração do fluxo de trabalho: DCM_4_Deploy_to_Stage_then_Prod.yml
Acionador: envie para a ramificação
main(normalmente uma solicitação pull mesclada)
Esse fluxo de trabalho implanta um pipeline de promoção sequencial. As alterações são primeiro implantadas em preparação, validadas de ponta a ponta e somente então promovidas para produção. Se alguma etapa falhar, o pipeline será interrompido e a produção não será afetada.
A sequência de implantação para cada destino (STAGE, depois PROD) inclui:
Plano: executa
snow dcm plane resume o conjunto de alterações.Detecção de descarte de dados: bloqueia o pipeline se o plano contém operações DROP para bancos de dados, esquemas, tabelas ou áreas de preparação.
Implantar: executa
snow dcm deploy.Pós-scripts (opcional): executa scripts post-hook SQL com injeção de variáveis Jinja.
Atualizar tabelas dinâmicas (opcional): executa
snow dcm refreshpara aplicar qualquer nova lógica de transformação.Testar expectativas (opcional): executa
snow dcm testpara validar as expectativas de qualidade de dados.
A implantação em produção começa somente após a aprovação de todas as etapas de preparação. Após a conclusão de todos os trabalhos, o fluxo de trabalho opcionalmente publica um resumo do status final na solicitação de pull original.
Perguntas frequentes (FAQ)¶
- Como renomear um objeto existente?
Execute um comando ALTER fora do projeto DCM.
Altere a definição.
Execute PLAN para verificar se a nova definição corresponde ao novo estado (sem alterações em PLAN).
Execute DEPLOY para salvar o novo estado.
- Como implantar objetos que ainda não são compatíveis com instruções DEFINE?
Você pode executar instruções CREATE IF NOT EXISTS ou CREATE OR REPLACE em um script SQL separado após executar a implantação ou o plano do seu projeto DCM.
Ambas as opções são compatíveis com o uso de modelos Jinja2 e a execução simulada (a execução simulada renderiza o modelo Jinja, mas não verifica a compilação bem-sucedida de SQL).
Por exemplo: