CI/CD 와 Snowflake CLI 통합하기¶
Snowflake CLI 는 GitHub Actions 와 같이 인기 있는 CI/CD (지속적 통합 및 지속적 전달) 시스템과 프레임워크를 통합하여 SQL, Snowpark, Native Apps 또는 Notebooks에 대한 Snowflake 워크플로를 효율적으로 자동화합니다.
다음 그림은 Snowflake CLI 의 일반적인 CI/CD 워크플로를 보여줍니다.
CI/CD 워크플로 단계¶
저장: Snowflake 파일을 안전하게 관리하기 위한 원격 Git 리포지토리를 구성합니다.
코드: 기본 설정에 맞게 IDE 또는 Snowsight를 사용하여 Snowflake 코드를 개발합니다.
설치: Snowflake CLI 를 설치 하고 원하는 CI/CD 공급자(예:GitHubActions)를 프로비저닝합니다.
배포: Snowflake CLI 와 선택한 CI/CD 도구를 결합하여 배포를 자동화합니다.
모니터링: Snowflake의 Snowflake Trail 을 사용하여 코드 및 워크플로 성능을 추적하여 실시간 인사이트를 얻습니다.
반복: 지속적인 개선을 위해 프로젝트에 소규모 업데이트를 자주 적용하고, 변경 사항이 작을수록 관리가 간편해지고 필요한 경우 롤백할 수 있습니다.
GitHub Actions를 사용한 CI/CD¶
Snowflake CLI 동작은 |sf-cli|를 CI/CD 파이프라인에 통합하도록 설계된 GitHub 작업입니다. 이를 사용하여 GitHub 워크플로 내에서 |sf-cli| 명령의 실행을 자동화할 수 있습니다. 자세한 내용은 `snowflake-cli-action<https://github.com/snowflakedb/snowflake-cli-action>`_ 리포지토리 섹션을 참조하세요.
Snowflake CLI 작업 사용하기¶
Github Actions는 CI/CD 워크플로에서 |sf-cli|를 설치하고 사용하는 프로세스를 간소화합니다. CLI는 프로젝트의 종속성과 충돌하지 않도록 격리된 방식으로 설치됩니다. ~/.snowflake/ 디렉터리 내에 입력 구성 파일을 자동으로 설정합니다.
이 작업은 Snowflake 환경 내에서 Snowflake Native Apps 배포 또는 Snowpark 스크립트 실행 등의 Snowflake CLI 작업을 자동화할 수 있습니다.
입력 매개 변수¶
Snowflake CLI 작업은 Github 워크플로 YAML 파일(예: <repo-name>/.github/workflows/my-workflow.yaml)에서 다음 입력을 사용합니다.
cli-version: 지정된 Snowflake CLI 버전(예: 지정된 Snowflake CLI 버전(예:3.11.0)입니다. 이 버전을 입력하지 않으면 |sf-cli|의 최신 버전이 사용됩니다.custom-github-ref: |sf-cli|를 직접 설치할 Github 리포지토리의 분기, 태그 또는 커밋입니다.참고
cli-version및 :codenowrap:`custom-github-ref`를 함께 사용할 수 없습니다. 해당 매개 변수 중 하나만 지정하세요.default-config-file-path: 리포지토리에 있는 구성 파일(config.toml)의 경로입니다. 경로는 리포지토리의 루트를 기준으로 해야 합니다. 임시 연결(-x옵션)을 사용하는 경우에는 구성 파일이 필요하지 않습니다. 자세한 내용은 Snowflake 연결 관리하기 섹션을 참조하세요.use-oidc: OIDC 인증을 활성화하기 위한 부울 플래그입니다.true`로 설정된 경우 해당 작업은 Snowflake 인증을 위해 CLI이 GitHub의 OIDC 토큰을 사용하도록 구성하여 개인 키를 시크릿으로 저장할 필요가 없습니다. 기본값은 :codenowrap:`false입니다.
GitHub 분기 또는 태그에서 Snowflake CLI 설치¶
GitHub 리포지토리의 특정 분기, 태그 또는 커밋에서 Snowflake CLI를 설치하려면(예: 릴리스되지 않은 기능 또는 포크를 테스트하기 위해) 다음 구성을 사용합니다.
- uses: snowflakedb/snowflake-cli-action@v2.0
with:
custom-github-ref: "feature/my-branch" # or a tag/commit hash
다른 :ref:`입력 매개 변수<label-cli_cicd_inputs>`를 포함할 수도 있습니다.
이 기능은 snowflake-cli-action 버전 1.6 이상에서 사용할 수 있습니다.
CI/CD 워크플로에서 작업을 안전하게 구성하기¶
다음 방법 중 하나를 사용하여 CI/CD 워크플로에서 작업을 안전하게 구성할 수 있습니다.
워크로드 ID 페더레이션(WIF) OpenID Connect(OIDC) 인증 사용¶
참고
WIF OIDC 인증에는 Snowflake CLI 버전 3.11.0 이상이 필요합니다.
WIF OIDC 인증은 개인 키를 시크릿으로 저장하지 않고 Snowflake로 인증하는 안전하고 현대적인 방법을 제공합니다. 이 접근 방식에서는 GitHub의 OIDC(OpenIDConnect) 토큰을 사용하여 Snowflake에 인증합니다.
WIF OIDC 인증을 설정하려면 다음 단계를 따릅니다.
OIDC 워크로드 ID 유형으로 서비스 사용자를 설정하여 WIF OIDC를 구성합니다.
CREATE USER <username> TYPE = SERVICE WORKLOAD_IDENTITY = ( TYPE = OIDC ISSUER = 'https://token.actions.githubusercontent.com' SUBJECT = '<your_subject>' )
참고
기본적은 제목은 :codenowrap:`repo:<repository-owner/repository-name>:environment:<environment>`와 같아야 합니다.
주체 생성을 단순화하려면 use
gh명령을 사용합니다. 여기서, :codenowrap:`<environment_name>`은 다음 예와 같이 리포지토리 설정에 정의된 환경입니다.
gh repo view <repository-owner/repository-name> --json nameWithOwner | jq -r '"repo:\(.nameWithOwner):environment:<environment_name>"'주체의 사용자 지정에 대한 자세한 내용은 GitHub에 대한 `OpenID Connect<https://docs.github.com/en/actions/reference/security/oidc>`_ 참조를 확인하세요.
Snowflake 계정 식별자를 GitHub 시크릿에 저장합니다. 자세한 내용은 `GitHub 작업 설명서<https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository>`_를 참조하세요.
다음과 같이 GitHub 워크플로 YAML 파일에서 Snowflake CLI 작업을 구성합니다.
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
계정에 대한 WIF OIDC 인증 설정 및 GitHub OIDC 공급자 구성에 대한 자세한 내용은 워크로드 ID 페더레이션 섹션을 참조하세요.
개인 키 인증 사용하기¶
개인 키 인증을 사용하려면 Snowflake 개인 키를 GitHub 시크릿에 저장하고 이를 사용하도록 Snowflake CLI 작업을 구성해야 합니다.
GitHub 시크릿에 Snowflake 개인 키를 저장합니다.
자세한 내용은 GitHub 작업 설명서 를 참조하십시오.
다음과 같이 GitHub 워크플로 YAML 파일에서 Snowflake CLI 작업을 구성합니다.
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
연결 정의하기¶
임시 연결 또는 구성 파일에 정의된 연결로 Snowflake에 연결하도록 GitHub 작업을 정의할 수 있습니다. 연결 관리에 대한 자세한 내용은 Snowflake 연결 관리하기 섹션을 참조하십시오.
임시 연결 사용¶
임시 연결에 대한 자세한 내용은 임시 연결 사용 섹션을 참조하십시오.
임시 연결을 위한 Snowflake 자격 증명을 설정하려면 다음 단계를 따르십시오.
다음과 같이
SNOWFLAKE_<key>=<value>의 형식으로 GitHub 워크플로의 환경 변수에 시크릿을 매핑합니다.env: SNOWFLAKE_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
Snowflake CLI 작업을 구성합니다.
최신 버전의 |sf-cli|를 사용하는 경우 :codenowrap:`cli-version` 매개 변수를 포함할 필요가 없습니다. 다음은 |sf-cli| 버전 3.11.0을 구체적으로 사용하는 작업을 지시하는 예입니다.
- uses: snowflakedb/snowflake-cli-action@v2.0 with: cli-version: "3.11.0"
선택 사항: 개인 키가 암호화된 경우 암호 구문을 설정하려면 개인 키 암호 구문에 대한 PRIVATE_KEY_PASSPHRASE 환경 변수를 설정합니다. Snowflake는 이 암호 구문을 사용하여 개인 키의 암호를 해독합니다. 예를 들면 다음과 같습니다.
- name: Execute Snowflake CLI command env: PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
개인 키 대신 비밀번호를 사용하려면 다음과 같이
SNOWFLAKE_AUTHENTICATOR환경 변수를 설정 해제하고SNOWFLAKE_PASSWORD변수를 추가합니다.- name: Execute Snowflake CLI command env: SNOWFLAKE_USER: ${{ secrets.SNOWFLAKE_USER }} SNOWFLAKE_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }} SNOWFLAKE_PASSWORD: ${{ secrets.SNOWFLAKE_PASSWORD }}
참고
비밀번호 및 MFA 사용 환경을 개선하려면 MFA 캐싱을 구성하는 것이 좋습니다.
환경 변수에 Snowflake 자격 증명을 설정하는 방법에 대한 자세한 내용은 Snowflake 자격 증명에 환경 변수 사용 섹션을 참조하고, GitHub CI/CD 워크플로 내에서 환경 변수를 정의하는 방법에 대한 자세한 내용은 단일 워크플로의 환경 변수 정의하기 섹션을 참조하십시오.
아래와 같이 임시 연결로 실행하려는
snow명령을 추가합니다.run: | snow --version snow connection test --temporary-connection
다음은 완성된 샘플 <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
작업이 Snowflake에 성공적으로 연결되는지 확인한 후 snow notebook create 또는 snow git execute 와 같은 Snowflake CLI 명령을 더 추가할 수 있습니다. 지원되는 명령에 대한 자세한 내용은 Snowflake CLI 명령 참조 섹션을 참조하십시오.
구성 파일 사용하기¶
연결 정의에 대한 자세한 내용은 연결 정의 섹션을 참조하십시오.
특정 연결에 대한 Snowflake 자격 증명을 설정하려면 다음 단계를 따르십시오.
아래와 같이 Git 리포지토리의 루트에 빈 구성 연결이 있는
config.toml파일을 만듭니다.default_connection_name = "myconnection" [connections.myconnection]
이 파일은 템플릿으로 사용되며 실제 자격 증명을 포함해서는 안 됩니다.
다음과 같이
SNOWFLAKE_<key>=<value>의 형식으로 GitHub 워크플로의 환경 변수에 시크릿을 매핑합니다.env: SNOWFLAKE_CONNECTIONS_MYCONNECTION_PRIVATE_KEY_RAW: ${{ secrets.SNOWFLAKE_PRIVATE_KEY_RAW }} SNOWFLAKE_CONNECTIONS_MYCONNECTION_ACCOUNT: ${{ secrets.SNOWFLAKE_ACCOUNT }}
Snowflake CLI 작업을 구성합니다.
최신 버전의 |sf-cli|를 사용하는 경우
cli-version매개 변수를 포함할 필요가 없습니다. 다음 예제에서는 원하는 버전과 기본 구성 파일의 이름을 지정합니다.- uses: snowflakedb/snowflake-cli-action@v2.0 with: cli-version: "3.11.0" default-config-file-path: "config.toml"
선택 사항: 개인 키가 암호화된 경우 암호 구문을 설정하려면 개인 키 암호 구문에 대한 PRIVATE_KEY_PASSPHRASE 환경 변수를 설정합니다. Snowflake는 이 암호 구문을 사용하여 개인 키의 암호를 해독합니다. 예를 들면 다음과 같습니다.
- name: Execute Snowflake CLI command env: PRIVATE_KEY_PASSPHRASE: ${{ secrets.PASSPHARSE }}
개인 키 대신 비밀번호를 사용하려면 다음과 같이
SNOWFLAKE_AUTHENTICATOR환경 변수를 설정 해제하고SNOWFLAKE_PASSWORD변수를 추가합니다.- 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 }}
참고
비밀번호 및 MFA 사용 환경을 개선하려면 MFA 캐싱을 구성하는 것이 좋습니다.
다음과 같이 명명된 연결로 실행하려는
snow명령을 추가합니다.run: | snow --version snow connection test
다음은 Git 리포지토리에 있는 샘플 config.toml 파일과 완성된 샘플 <repo-name>/.github/workflows/my-workflow.yaml 파일을 보여주는 예입니다.
샘플
config.toml파일:default_connection_name = "myconnection" [connections.myconnection]
샘플 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
작업이 Snowflake에 성공적으로 연결되는지 확인한 후 snow notebook create 또는 snow git execute 와 같은 Snowflake CLI 명령을 더 추가할 수 있습니다. 지원되는 명령에 대한 자세한 내용은 Snowflake CLI 명령 참조 섹션을 참조하십시오.