Integração de CI/CD com Snowflake CLI¶
Snowflake CLI integra sistemas e frameworks populares de CI/CD (integração contínua e entrega contínua), como GitHub Actions, para automatizar com eficiência os fluxos de trabalho do Snowflake para SQL, Snowpark, Native Apps ou Notebooks.
A ilustração a seguir mostra um fluxo de trabalho típico de CI/CD no Snowflake CLI.
Etapas do fluxo de trabalho de CI/CD¶
Armazenar: configure um repositório Git remoto para gerenciar seus arquivos do Snowflake com segurança.
Codificar: desenvolva seu código Snowflake usando um IDE ou Snowsight, adaptado às suas preferências.
Instalar: Instale Snowflake CLI e provisione seu provedor preferido de CI/CD, como GitHub Actions.
Implantar: automatize a implementação combinando o Snowflake CLI com sua ferramenta de CI/CD selecionada.
Monitorar: acompanhe o desempenho do código e do fluxo de trabalho no Snowflake usando o Snowflake Trail para obter insights em tempo real.
Iterar: aplique atualizações pequenas e frequentes ao seu projeto para melhoria contínua; mudanças menores simplificam o gerenciamento e a reversão, se necessário.
CI/CD com GitHub Actions¶
Uma ação Snowflake CLI é uma ação do GitHub para integrar Snowflake CLI em pipelines de CI/CD. Você pode usá-la para automatizar a execução de comandos Snowflake CLI nos seus fluxos de trabalho do GitHub. Para mais informações, consulte o repositório snowflake-cli-action.
Usar ações do Snowflake CLI¶
Github Actions simplificam o processo de instalação e uso do Snowflake CLI nos seus fluxos de trabalho de CI/CD. O CLI é instalado de forma isolada, garantindo que não entre em conflito com as dependências do seu projeto. Ele define automaticamente o arquivo de configuração de entrada dentro do diretório ~/.snowflake/.
A ação permite automatizar suas tarefas de CLI do Snowflake, como a implantação de Snowflake Native Apps ou a execução de scripts Snowpark em seu ambiente Snowflake.
Parâmetros de entrada¶
Uma ação do Snowflake CLI usa as seguintes entradas do arquivo YAML do seu fluxo de trabalho do Github, como <repo-name>/.github/workflows/my-workflow.yaml:
cli-version: A versão especificada do CLI do Snowflake, como3.11.0. Se não tiver sido fornecida, será usada a versão mais recente do Snowflake CLI.custom-github-ref: A ramificação, tag ou commit no repositório Github do qual você quer instalar o Snowflake CLI diretamente.Nota
Não é possível usar
cli-versionecustom-github-refjuntos; especifique apenas um desses parâmetros.default-config-file-path: Caminho para o arquivo de configuração (config.toml) em seu repositório. O caminho deve ser relativo à raiz do repositório. O arquivo de configuração não é necessário quando uma conexão temporária (opção-x) é usado. Para mais informações, consulte Gerenciando conexões Snowflake.use-oidc: Sinalizador booliano para habilitar a autenticação OIDC. Quando definido comotrue, a ação configura o CLI para usar o token OIDC do GitHub para autenticação com o Snowflake, eliminando a necessidade de armazenar chaves privadas como segredos. O padrão éfalse.
Instalação do Snowflake CLI a partir de uma ramificação ou tag do GitHub¶
Para instalar o CLI do Snowflake a partir de uma ramificação, tag ou commit específico no repositório do GitHub (por exemplo, para testar recursos não lançados ou uma bifurcação), use a seguinte configuração:
- uses: snowflakedb/snowflake-cli-action@v2.0
with:
custom-github-ref: "feature/my-branch" # or a tag/commit hash
Você também pode incluir outros parâmetros de entrada.
Este recurso está disponível na versão snowflake-cli-action 1.6 ou posterior.
Configurar com segurança a ação em seu fluxo de trabalho de CI/CD¶
É possível configurar a ação no seu fluxos de trabalho CI/CD com segurança usando um dos seguintes métodos:
Usar a autenticação de federação de identidade de carga de trabalho (WIF) OpenID Connect (OIDC )¶
Nota
A autenticação WIF OIDC requer a versão 3.11.0 ou posterior do Snowflake CLI.
A autenticação WIF OIDC é uma maneira segura e moderna de autenticar com o Snowflake sem armazenar chaves privadas como segredos. Essa abordagem usa o OIDC (OpenID Connect) do GitHub para autenticar com o Snowflake.
Para configurar a autenticação WIF OIDC, siga estas etapas:
Configurar WIF OIDC definindo um usuário de serviço com o tipo de identidade de carga de trabalho OIDC:
CREATE USER <username> TYPE = SERVICE WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://token.actions.githubusercontent.com' SUBJECT = '<your_subject>' )
Nota
Por padrão, sua entidade deve ser parecida com
repo:<repository-owner/repository-name>:environment:<environment>.
Para simplificar a geração da entidade, use o comando
gh, em que<environment_name>é o ambiente definido nas configurações do repositório, conforme mostrado no exemplo a seguir:
gh repo view <repository-owner/repository-name> --json nameWithOwner | jq -r '"repo:\(.nameWithOwner):environment:<environment_name>"'Para mais informações sobre a personalização do assunto, consulte a referência sobre OpenID Connect no GitHub.
Armazene seu identificador de conta Snowflake em segredos do GitHub. Para obter mais informações, consulte a documentação de ações GitHub.
Configure a ação Snowflake CLI em seu arquivo YAML de fluxo de trabalho do GitHub, conforme mostrado:
name: Snowflake OIDC on: [push] permissions: id-token: write # Required for OIDC token generation contents: read jobs: oidc-job: runs-on: ubuntu-latest environment: test-env # this should match the environment used in the subject steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Set up Snowflake CLI uses: snowflakedb/snowflake-cli-action@v2.0 with: use-oidc: true cli-version: "3.11" - name: test connection env: SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} run: snow connection test -x
Para mais informações sobre a configuração da autenticação WIF OIDC para sua conta Snowflake e a configuração do provedor de OIDC do GitHub, consulte Federação de identidades de carga de trabalho.
Autenticação de chave privada¶
Para usar a autenticação de chave privada, você precisa armazenar sua chave privada do Snowflake nos segredos do GitHub e configurar a ação Snowflake CLI para usá-la.
Armazene sua chave privada do Snowflake nos segredos do GitHub.
Para obter mais informações, consulte a documentação de ações GitHub.
Configure a ação Snowflake CLI em seu arquivo YAML de fluxo de trabalho do GitHub, conforme mostrado:
name: Snowflake Private Key on: [push] jobs: private-key-job: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Set up Snowflake CLI uses: snowflakedb/snowflake-cli-action@v2.0
Definição de conexões¶
Você pode definir uma ação do GitHub para se conectar ao Snowflake com uma conexão temporária ou com uma conexão definida no seu arquivo de configuração. Para obter mais informações sobre o gerenciamento de conexões, consulte Gerenciando conexões Snowflake.
Use uma conexão temporária¶
Para obter mais informações sobre conexões temporárias, consulte Use uma conexão temporária.
Para configurar suas credenciais do Snowflake para uma conexão temporária, siga estas etapas:
Mapeie os segredos para as variáveis de ambiente no seu fluxo de trabalho do GitHub, no formato
SNOWFLAKE_<key>=<value>, conforme mostrado:env: SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
Configure a ação do CLI do Snowflake.
Se você usar a versão mais recente do Snowflake CLI, não será necessário incluir o parâmetro
cli-version. O exemplo a seguir instrui a ação a usar especificamente a versão 3.11.0 do Snowflake CLI:- uses: snowflakedb/snowflake-cli-action@v2.0 with: cli-version: "3.11.0"
Opcional: Se sua chave privada estiver criptografada, para definir uma senha, defina a variável de ambiente PRIVATE_KEY_PASSPHRASE para a frase secreta da chave privada. O Snowflake usa esta senha para descriptografar a chave privada. Por exemplo:
- name: Execute Snowflake CLI command env: PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
Para usar uma senha em vez de uma chave privada, desfaça a definição da variável de ambiente
SNOWFLAKE_AUTHENTICATORe adicione a variávelSNOWFLAKE_PASSWORD, como segue:- name: Execute Snowflake CLI command env: SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }} SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
Nota
Para melhorar sua experiência ao usar uma senha e MFA, o Snowflake recomenda que você configure o cache de MFA.
Para obter mais informações sobre a configuração de credenciais do Snowflake em variáveis de ambiente, consulte Use variáveis de ambiente para credenciais Snowflake e para obter informações sobre a definição de variáveis de ambiente no seu fluxo de trabalho de CI/CD do GitHub, consulte Definição de variáveis de ambiente para um único fluxo de trabalho.
Adicione os comandos
snowque você deseja executar com a conexão temporária, conforme mostrado:run: | snow --version snow connection test --temporary-connection
O exemplo a seguir mostra um arquivo de amostra concluído <repo-name>/.github/workflows/my-workflow.yaml:
name: deploy
on: [push]
jobs:
version:
name: "Check Snowflake CLI version"
runs-on: ubuntu-latest
steps:
# Snowflake CLI installation
- uses: snowflakedb/snowflake-cli-action@v2.0
# Use the CLI
- name: Execute Snowflake CLI command
env:
SNOWFLAKE_AUTHENTICATOR: SNOWFLAKE_JWT
SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }}
SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }}
PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }} # Passphrase is only necessary if private key is encrypted.
run: |
snow --help
snow connection test -x
Depois de verificar se sua ação pode se conectar ao Snowflake com sucesso, você pode adicionar mais comandos do Snowflake CLI como snow notebook create ou snow git execute. Para obter informações sobre os comandos aceitos, consulte Referência de comando de Snowflake CLI.
Usar um arquivo de configuração¶
Para obter mais informações sobre a definição de conexões, consulte Definição de conexões.
Para configurar suas credenciais do Snowflake para uma conexão específica, siga estas etapas:
Crie um arquivo
config.tomlna raiz do seu repositório Git com uma conexão de configuração vazia, conforme mostrado:default_connection_name = "myconnection" [connections.myconnection]
Esse arquivo serve como um modelo e não deve conter credenciais reais.
Mapeie os segredos para as variáveis de ambiente no seu fluxo de trabalho do GitHub, no formato
SNOWFLAKE_<key>=<value>, conforme mostrado:env: SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
Configure a ação do CLI do Snowflake.
Se você usar a versão mais recente do Snowflake CLI, não será necessário incluir o parâmetro
cli-version. O exemplo a seguir especifica uma versão desejada e o nome do arquivo de configuração padrão:- uses: snowflakedb/snowflake-cli-action@v2.0 with: cli-version: "3.11.0" default-config-file-path: "config.toml"
Opcional: Se sua chave privada estiver criptografada, para definir uma senha, defina a variável de ambiente PRIVATE_KEY_PASSPHRASE para a frase secreta da chave privada. O Snowflake usa esta senha para descriptografar a chave privada. Por exemplo:
- name: Execute Snowflake CLI command env: PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
Para usar uma senha em vez de uma chave privada, desfaça a definição da variável de ambiente
SNOWFLAKE_AUTHENTICATORe adicione a variávelSNOWFLAKE_PASSWORD, como segue:- name: Execute Snowflake CLI command env: SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER: ${{ secrets.SNOWFLAKE_USER }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
Nota
Para melhorar sua experiência ao usar uma senha e MFA, o Snowflake recomenda que você configure o cache de MFA.
Adicione os comandos
Snowque você deseja executar com uma conexão nomeada, conforme mostrado:run: | snow --version snow connection test
O exemplo a seguir mostra um arquivo de amostra config.toml em seu repositório Git e um arquivo de amostra <repo-name>/.github/workflows/my-workflow.yaml concluído:
Arquivo
config.tomlde exemplodefault_connection_name = "myconnection" [connections.myconnection]
Amostra de arquivo de fluxo de trabalho Git:
name: deploy on: [push] jobs: version: name: "Check Snowflake CLI version" runs-on: ubuntu-latest steps: # Checkout step is necessary if you want to use a config file from your repo - name: Checkout repo uses: actions/checkout@v4 with: persist-credentials: false # Snowflake CLI installation - uses: snowflakedb/snowflake-cli-action@v2.0 with: default-config-file-path: "config.toml" # Use the CLI - name: Execute Snowflake CLI command env: SNOWFLAKE_CONNECTIONS_MYCONNECTION_AUTHENTICATOR: SNOWFLAKE_JWT SNOWFLAKE_CONNECTIONS_MYCONNECTION_USER: ${{ secrets.SNOWFLAKE_USER }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }} #Passphrase is only necessary if private key is encrypted. run: | snow --help snow connection test
Depois de verificar se sua ação pode se conectar ao Snowflake com sucesso, você pode adicionar mais comandos do Snowflake CLI como snow notebook create ou snow git execute. Para obter informações sobre os comandos aceitos, consulte Referência de comando de Snowflake CLI.