Snowflake DevOps

Snowflake DevOps 는 개발자가 Snowflake 환경을 위한 소프트웨어 개발 라이프사이클을 간소화하고 자동화할 수 있도록 지원합니다. CI/CD, 배포 자동화 및 인프라 관리의 모범 사례에 중점을 둔 Snowflake DevOps 도구와 사례는 개발 작업과 운영 작업 간의 원활한 통합을 보장합니다.

이 가이드에서는 Snowflake의 기능을 활용하여 공동 작업을 개선하고, 품질을 유지하며, Snowflake 프로젝트 전반에서 효율적인 소프트웨어 제공을 달성하는 방법에 대한 인사이트를 제공합니다.

Snowflake DevOps란 무엇입니까?

Snowflake는 개발 라이프사이클을 가속화하고 데이터 팀의 전반적인 생산성을 향상시키는 통합된 접근법을 제공합니다. 이 접근법은 Git 버전 제어, Python APIs, 선언적 오브젝트 관리, 원활한 CI/CD 자동화를 통합합니다.

모든 소스에 대한 Git 리포지토리

데이터 자산, 코드 및 구성을 중앙에서 관리하고 버전 제어하면 일관성을 보장하고, 공동 작업을 간소화하고, 필요한 경우 롤백을 간소화할 수 있습니다.

Snowflake의 Git 리포지토리를 사용하면 이 모든 작업을 Snowflake의 보안 경계 내에서 수행할 수 있으며, 이는 프로덕션 준비 환경에 매우 중요합니다.

선언적 구문

데이터베이스 변경 관리에 대한 선언적 접근법, 즉 Python 또는 SQL을 사용하여 Snowflake 오브젝트를 정의하고 관리하는 방식을 채택하면 가독성을 높이면서 복잡한 스크립트의 필요성을 없앨 수 있습니다.

CI/CD 자동화

기존 CI/CD 도구 또는 Snowflake CLI과 통합하여 자동으로 명령을 실행하고 전체 파이프라인을 오케스트레이션하여 효율적이고 안정적인 배포를 수행할 수 있습니다.

Snowflake DevOps의 빌딩 블록은 무엇입니까?

Snowflake는 DevOps 작업을 더 간단하고 안전하게 수행할 수 있도록 통합된 여러 기능을 제공합니다.

CREATE OR ALTER <오브젝트>

CREATE OR ALTER 명령을 사용하여 Snowflake 오브젝트에 업데이트를 적용하고 Git의 코드로서 계정을 인프라와 동기화할 수 있습니다.

자세한 내용은 선언적 코드 및 버전 관리를 사용한 변경 사항 관리 섹션을 참조하십시오.

EXECUTE IMMEDIATE FROM

EXECUTE IMMEDIATE FROM Snowflake 명령을 사용하면 Snowflake의 Git 리포지토리에서 SQL 을 실행할 수 있습니다. SQL 스크립트는 Jinja2 템플릿일 수 있습니다.

자세한 내용은 Jinja 템플릿을 사용하여 스크립트 매개 변수화 섹션을 참조하십시오.

Snowflake CLI

CI/CD 파이프라인을 구동하는 스크립트에서, 배포를 자동화하고, 버전 관리와 협업하고, 다른 CI/CD 도구와 통합하기 위해 Snowflake CLI 명령을 실행할 수 있습니다.

자세한 내용은 GitHub Actions를 사용한 CI/CD 작업 자동화 섹션을 참조하십시오.

Python API

Snowflake의 Python APIs를 사용하면 데이터베이스, 스키마, 테이블, 작업 등 Snowflake 리소스를 관리할 수 있습니다.

자세한 내용은 Snowflake Python APIs: Python으로 Snowflake 오브젝트 관리하기 섹션을 참조하십시오.

Snowflake의 Git

Git 리포지토리에서 프로젝트 구성 및 데이터 파이프라인(스키마, 테이블, 스크립트)을 가져와서 배포 워크플로를 트리거할 수 있습니다.

자세한 내용은 Snowflake와 연결된 Git 리포지토리에 자산을 유지하여 워크플로를 간소화할 수 있습니다. 섹션을 참조하십시오.

DevOps 워크플로에서 Snowflake 기능 사용하기

기존 도구와 함께 Snowflake를 사용하면 다음과 같은 DevOps 목표를 달성할 수 있습니다.

  • Snowflake와 연결된 Git 리포지토리에 자산을 유지하여 워크플로를 간소화 할 수 있습니다.

    Snowflake 계정에 리포지토리를 연결하면 기존 Git에 대한 투자를 활용할 수 있습니다. 이러한 연결이 구축되고 Snowflake 자체에 리포지토리가 로컬로 복제되면 Snowflake에서 직접 코드를 검색하고 실행할 수 있습니다.

  • 개발, 테스트 및 프로덕션 환경을 별도로 유지 하여 위험을 최소화하십시오.

    각 환경에 대해 별도의 Snowflake 데이터베이스를 사용하면 원치 않는 변경이 라이브 시스템에 영향을 미칠 위험을 최소화할 수 있습니다. 배포를 보다 쉽게 관리하려면 배포 프로세스를 매개 변수로 설정하는 스크립트를 사용합니다.

  • 스크립트 및 선언적 코드를 사용하여 개발, 테스트 및 프로덕션을 위해 제어되고 반복 가능한 방식으로 데이터베이스 변경 사항을 관리 합니다.

  • GitHub 작업을 사용하여 코드 및 데이터 배포를 포함한 CI/CD 작업 을 자동화합니다.

참고

Snowflake Extension for Visual Studio Code 를 사용하면 VS 코드에서 직접 Snowflake SQL 문을 작성하고 실행할 수 있습니다. VS Code를 Snowflake에 연결한 리포지토리와 동일한 리포지토리에 연결하면 VS Code에서 로컬로 코드를 개발하고, 작업 내용을 Git 리포지토리에 보관한 다음, Snowflake 내에서 코드에 액세스할 수 있습니다.

Snowflake와 연결된 Git 리포지토리에 자산을 유지하여 워크플로를 간소화할 수 있습니다.

데이터 자산, 코드 및 구성을 Git 리포지토리에서 중앙에서 관리하고, 버전을 제어하고, Snowflake의 리포지토리를 사용하면 일관성을 보장하고, 공동 작업을 간소화하며, 필요한 경우 롤백을 간소화할 수 있습니다.

Snowflake 계정을 Git 리포지토리에 연결하면 Snowflake가 리포지토리에서 복제된 파일의 코드를 실행할 수 있습니다. 그 결과, 리포지토리의 전체 복제본을 나타내는 Git 리포지토리 스테이지가 생성됩니다. Snowflake 내에서 특정 커밋, 분기 또는 태그에서 버전 제어된 파일에 액세스할 수 있습니다.

리포지토리 스테이지에서는 버전이 관리되는 파일에서 Snowpark 함수 또는 프로시저를 생성하고 EXECUTE IMMEDIATE FROM 으로 버전이 관리된 SQL 스크립트를 직접 실행하거나 Snowflake CLI를 사용하여 Python 스크립트를 실행할 수 있습니다. 이렇게 하면 SQL 또는 Python으로 데이터베이스 오브젝트를 선언적으로 정의한 다음, 강력하고 설정하기 쉬운 CI/CD 파이프라인으로 해당 오브젝트를 배포할 수 있습니다.

Git 리포지토리가 개발 도구와 Snowflake와 파일을 교환하는 모습을 보여주는 다이어그램.

개발, 테스트, 프로덕션을 위한 별도의 환경을 유지합니다.

개발, 테스트, 프로덕션을 위한 별도의 환경을 유지함으로써 팀은 개발 활동을 프로덕션 환경에서 분리하여 의도치 않은 결과와 데이터 손상의 가능성을 줄일 수 있습니다.

워크플로를 여러 환경으로 분리하면 각 환경마다 고유한 Snowflake 데이터베이스(일반적으로 동일한 사본)가 생성됩니다.

Jinja 템플릿을 사용하여 스크립트 매개 변수화

개발 및 운영 환경 간에 본질적으로 동일한 방식으로 코드를 배포하고 실행할 수 있도록 환경 세부 정보(예: 배포 중에 사용할 데이터베이스)에 대한 참조를 매개 변수화할 수 있습니다. 이렇게 하면 CI/CD 파이프라인을 활성화하여 환경에 적합한 배포 대상을 선택할 수 있습니다.

스크립트를 매개 변수화하려면 간단한 스크립트 매개 변수화부터 Python과 유사한 언어의 광범위한 모듈식 스크립팅까지 다양한 기능을 갖춘 널리 사용되는 템플릿 언어인 Jinja2를 사용할 수 있습니다. Snowflake는 EXECUTE IMMEDIATE FROM 을 사용하여 템플릿화된 SQL 스크립트의 실행을 지원합니다. 또는 Snowflake CLI 를 사용하면 환경 변수를 Python 스크립트로 전달할 수 있습니다.

예를 들어, 배포 대상을 변경하려면 대상 데이터베이스의 이름을 SQL 스크립트에서는 {{ environment }} 등의 Jinja 변수로, Python 스크립트에서는 환경 변수로 대체하면 됩니다. 이 기술은 다음 SQL 및 Python 코드 예에 나와 있습니다.

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

Snowflake CLI 의 snow git execute 명령으로 매개 변수화된 스크립트를 실행할 수 있습니다. CLI 는 Snowflake 계정의 가드레일과 성능 특성 내에서 리포지토리 단계에서 직접 SQL, Python 또는 이 둘을 혼합한 언어로 된 스크립트를 실행할 수 있습니다.

snow git execute @my_git_repo/branches/main/path/to/my_scripts" \
    -D "environment='preprod'"
Copy

Snowflake CLI 를 사용하면 워크로드 전반에서 Snowflake에서 실행 중인 앱을 생성, 관리, 업데이트 및 확인할 수 있습니다.

선언적 코드 및 버전 관리를 사용한 변경 사항 관리

Git 리포지토리의 재사용 가능한 구성 파일을 사용하면 데이터베이스 리소스의 변경 사항을 더욱 쉽게 관리할 수 있습니다.

데이터베이스 오브젝트는 CREATE OR ALTER <오브젝트> 명령을 사용하여 정의할 수 있으며, 이 명령은 오브젝트를 생성하거나 명령에 지정된 정의와 일치하도록 오브젝트를 변경합니다. 리포지토리에 있는 버전이 관리되는 파일에서 이 명령을 사용하면 이전 버전으로 변경 사항을 더 쉽게 롤백할 수 있으며, 사용자는 파일의 이전 버전을 실행하기만 하면 됩니다.

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;
Copy

참고

또한 Snowflake Python APIsSnowflake CLI 를 사용하여 Snowflake 리소스를 관리할 수도 있습니다. 데이터 엔지니어링 작업을 Python으로 수행하는 것을 선호하는 경우, Snowflake의 최고급 Python API 를 사용하면 가장 생산성이 높은 언어로 동일한 리소스 관리를 수행할 수 있습니다.

GitHub Actions를 사용한 CI/CD 작업 자동화

GitHub Actions 를 사용하여 CI/CD 파이프라인을 구성하는 작업을 자동화할 수 있습니다. GitHub Actions 또는 이와 유사한 CI/CD 러너를 사용하여 빌드, 테스트 및 배포 작업을 자동화하는 워크플로를 정의할 수 있습니다.

이러한 워크플로에서는 Snowflake와 GitHub의 다른 기능을 사용하여 조각을 조합할 수 있습니다. 또는 다음 작업을 수행할 수 있습니다.

  • Snowflake 자격 증명을 GitHub 시크릿 에 저장하여 GitHub Actions가 Snowflake에 연결할 수 있도록 합니다.

  • Snowflake CLI 를 쉽게 설치하고 기본 Snowflake CLI GitHub 작업 의 도움으로 Snowflake에 연결합니다.

  • Snowflake CLI 를 사용하여 Snowflake에서 명령을 실행합니다. 먼저 Git 리포지토리에서 가장 최근의 변경 내용을 Snowflake로 가져옵니다. 그런 다음 선언적 스크립트와 매개 변수화된 스크립트를 실행하여 변경 사항을 원하는 환경에 배포합니다.

다음 예제의 GitHub Actions 워크플로 발췌본은 파이프라인을 배포합니다. 워크플로는 이전에 구성된 시크릿에서 필요한 값을 검색하여 Snowflake에서 인증합니다.

파이프라인을 배포하기 위해 워크플로에서는 다음 snow git 명령을 실행합니다.

  • snow git fetch 는 GitHub 리포지토리의 최신 내용을 Snowflake에서 복제된 my_git_repo Git 리포지토리 스테이지로 가져옵니다.

  • snow git execute 는 리포지토리의 main 브랜치의 /scripts 디렉터리에서 Python 및 SQL 스크립트를 실행합니다.

name: Deploy scripts to preprod

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    env:
      SNOWFLAKE_CONNECTIONS_DEFAULT_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
      SNOWFLAKE_CONNECTIONS_DEFAULT_USER: ${{ secrets.SNOWFLAKE_USER }}
      SNOWFLAKE_CONNECTIONS_DEFAULT_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install snowflake-cli
        uses: Snowflake-Labs/snowflake-cli-action@v1.5
        with:
          cli-version: "latest"
          default-config-file-path: ".snowflake/config.toml"

      - name: Fetch repository changes
        run: snow git fetch my_git_repo

      - name: Deploy scripts to preprod environment
        run: snow git execute @my_git_repo/branches/main/scripts/* \
            -D "environment='preprod'"
Copy

Snowflake DevOps 시작하기

대화형 Snowflake DevOps 사용에 대한 안내는 Snowflake DevOps 시작하기 빠른 시작을 참조하십시오.