프로젝트 정의 파일

snowflake.yml 프로젝트 정의 파일은 디렉터리를 Snowflake Native App 프로젝트로 선언합니다. Snowflake Native App 프로젝트 디렉터리 루트에 있는 버전 관리 파일로, 수동으로 만들거나 프로젝트 초기화의 일부로 Snowflake CLI 가 만들 수 있습니다. 디렉터리에서 이 정형 파일을 제공하되 독립적인 프로젝트 구조를 사용하도록 선택하면 Snowflake CLI 는 관련 파일을 검색하고 평소와 같이 기능을 수행할 수 있습니다.

Native Apps의 경우 snowflake.yml 은 다음과 유사하게 표시됩니다.

definition_version: 2
entities:
  pkg:
    type: application package
    identifier: <name_of_app_pkg>
    stage: app_src.stage
    manifest: app/manifest.yml
    artifacts:
      - src: app/*
        dest: ./
      - src: src/module-add/target/add-1.0-SNAPSHOT.jar
        dest: module-add/add-1.0-SNAPSHOT.jar
      - src: src/module-ui/src/*
        dest: streamlit/
    meta:
      role: <your_app_pkg_owner_role>
      warehouse: <your_app_pkg_warehouse>
      post_deploy:
        - sql_script: scripts/any-provider-setup.sql
        - sql_script: scripts/shared-content.sql
  app:
    type: application
    identifier: <name_of_app>
    from:
      target: pkg
    debug: <true|false>
    meta:
      role: <your_app_owner_role>
      warehouse: <your_app_warehouse>
Copy

공통 엔터티 속성

다음 테이블에서는 Native Apps의 프로젝트 정의 엔터티에 사용 가능한 일반적인 속성을 설명합니다. 프로젝트 정의 엔터티에 대한 자세한 내용은 엔터티 지정하기 섹션을 참조하십시오.

공통 엔터티 속성

속성

정의

유형

필수, 문자열

관리할 엔터티의 유형입니다. Snowflake Native App 의 경우 유효한 값은 다음과 같습니다.

식별자

선택 사항, 문자열

엔터티에 대한 선택적 Snowflake 식별자입니다. 따옴표이 있는 식별자와 없는 식별자가 모두 지원됩니다. 따옴표로 묶인 식별자를 사용하려면 YAML 값에 따옴표(예: ’”My Native Application Package”’)를 포함합니다.

지정하지 않으면 프로젝트 정의의 엔터티 ID가 식별자로 사용됩니다.

meta.warehouse

선택 사항, 문자열

meta.post_deploy 의 일부로 제공된 스크립트를 실행하는 데 사용되는 웨어하우스는 해당 스크립트 내의 SQL 명령에 웨어하우스 사용이 필요한 경우 사용됩니다.

기본값: Snowflake CLI config.toml 파일에서 연결에 대해 지정된 웨어하우스.

참고

웨어하우스를 지정하지 않으면 애플리케이션은 유효성 검사를 통과하지만 설치에 실패합니다.

일반적으로 프로젝트 정의 재정의 에 설명된 대로 snowflake.local.yml 에서 이 값을 지정합니다.

meta.role

선택 사항, 문자열

엔터티 및 공급자 측 오브젝트를 생성할 때 사용할 역할입니다.

참고

역할을 지정하지 않으면, Snowflake CLI 는 Snowflake 계정에서 사용자에게 할당된 기본 역할을 사용하려고 시도합니다.

일반적으로 프로젝트 정의 재정의 에 설명된 대로 snowflake.local.yml 에서 이 값을 지정합니다.

기본값: Snowflake CLI 연결 에 지정된 역할

meta.post_deploy

선택 사항, 문자열

엔터티가 생성된 후 실행할 SQL 스크립트의 목록입니다. 다음 예제에서는 프로젝트 정의 파일에서 이러한 스크립트를 정의하는 방법을 보여줍니다.

definition_version: 2
entities:
  myapp_pkg:
    type: application package
    ...
    meta:
      post_deploy:
        - sql_script: scripts/post_deploy1.sql
        - sql_script: scripts/post_deploy2.sql
Copy

이러한 스크립트는 엔터티를 생성하거나 업데이트하는 명령에 의해 호출됩니다. 예를 들어, 패키지를 생성하거나 업데이트한 후 snow app deploy 명령을 실행하면 이러한 스크립트가 실행됩니다. 또한 애플리케이션 인스턴스가 버전 또는 릴리스 지시문에서 직접 설치되지 않는 경우 snow app run 에 의해 실행됩니다.

다음 샘플 스크립트 내용에 표시된 것처럼 배포 후 SQL 스크립트에서도 템플릿을 사용할 수 있습니다.

GRANT reference_usage on database provider_data to share in entity <% fn.str_to_id(ctx.entities.myapp_pkg.identifier) %>
Copy

meta.use_mixins

선택 사항, 문자열

이 엔터티에 적용할 mixin의 이름입니다. 자세한 내용은 프로젝트 mixin 섹션을 참조하십시오.

애플리케이션 패키지 엔터티 속성

다음 테이블에서는 Native Apps의 애플리케이션 패키지 엔터티에 사용 가능한 일반적인 속성을 설명합니다. 프로젝트 정의 엔터티에 대한 자세한 내용은 엔터티 지정하기 섹션을 참조하십시오.

애플리케이션 패키지 엔터티의 속성

속성

정의

유형

필수, 문자열

application package 여야 합니다.

메니페스트

필수, 문자열

프로젝트에서 Snowflake Native App manifest.yml 파일의 위치입니다.

deploy_root

선택 사항, 문자열

빌드 단계에서 아티팩트를 복사하는 프로젝트 루트의 하위 디렉터리입니다. 이 위치에 복사한 후에는 Snowflake 스테이지에 배포할 수 있습니다.

기본값: output/deploy

generated_root

선택 사항, 문자열

Snowflake CLI 가 생성된 파일을 작성하는 배포 루트의 하위 디렉터리입니다.

기본값: __generated

스테이지

선택 사항, 문자열

애플리케이션 아티팩트를 저장하는 스테이지의 식별자입니다. 값은 <schema_name>.<stage_name> 형식을 사용합니다. 스테이지는 애플리케이션 패키지 오브젝트 내에 있습니다. 이름 충돌을 피하기 위해 이름을 변경할 수 있습니다.

기본값: app_src.stage

아티팩트

필수, 시퀀스

배포 루트에 추가할 파일 소스 및 대상 페어의 목록과 선택 사항인 Snowpark 주석 처리기입니다. 다음 아티팩트 속성을 사용할 수 있습니다.

  • src: 코드 소스 파일 또는 파일의 경로입니다.

  • dest: 아티팩트를 배포할 디렉터리의 경로입니다.

    디렉터리를 참조하는 대상 경로는 / 로 끝나야 합니다. GLOB 패턴의 대상이 / 로 끝나지 않으면 오류가 발생합니다. 생략하면, dest 는 기본적으로 src 와 동일한 문자열로 설정됩니다.

    dict 대신 각 항목에 대한 문자열을 전달할 수도 있으며, 이 경우 해당 값은 srcdest 로 모두 처리됩니다.

  • processors: src 코드 파일을 처리하는 데 사용할 프로세서 이름입니다. 자세한 내용은 아티팩트 프로세서에 대한 자세한 정보 섹션을 참조하십시오.

src 가 1개의 파일(GLOB가 아닌)만 참조하는 경우, dest 는 대상 <경로> 또는 <경로/이름> 을 참조할 수 있습니다.

dict 대신 각 항목에 대한 문자열을 전달할 수도 있으며, 이 경우 해당 값은 srcdest 로 모두 처리됩니다.

프로세서를 사용한 예:

pkg:
  artifacts:
    - src: app/*
      dest: ./
    - src: streamlit/*
      dest: streamlit/
    - src: src/resources/images/snowflake.png
      dest: streamlit/
Copy

프로세서를 사용한 예:

pkg:
  artifacts:
    - src: qpp/*
      dest: ./
      processors:
          - name: snowpark
            properties:
              env:
                type: conda
                name: <conda_name>
Copy

distribution

선택 사항, 문자열

Snowflake CLI 가 생성한 애플리케이션 패키지 배포입니다. snow app 명령을 실행할 때 작업 중인 애플리케이션 패키지의 배포 값이 해결된 프로젝트 정의에 설정된 것과 다른 경우 Snowflake CLI 는 경고를 표시합니다.

기본값: Internal

scratch_stage

선택 사항, 문자열

Snowflake CLI 가 사용하는 임시 스크래치 데이터를 저장하는 스테이지의 식별자입니다. 값은 <schema_name>.<stage_name> 형식을 사용합니다.. 스테이지는 애플리케이션 패키지 오브젝트 내에 있습니다. 이름 충돌을 피하기 위해 이름을 변경할 수 있습니다.

기본값: app_src.stage_snowflake_cli_scratch

애플리케이션 엔터티 속성

다음 테이블에서는 Native Apps의 애플리케이션 엔터티에 사용 가능한 일반적인 속성을 설명합니다. 프로젝트 정의 엔터티에 대한 자세한 내용은 엔터티 지정하기 섹션을 참조하십시오.

애플리케이션 엔터티의 속성

속성

정의

유형

필수, 문자열

application 이어야 합니다.

from.target

필수, 문자열

이 애플리케이션 엔터티를 생성할 애플리케이션 패키지입니다. 다음 예제에서 targetsnowflake.yml 파일에 있는 엔터티의 이름을 정의합니다.

from:
  target: my_pkg
Copy

debug

선택 사항, 부울

명명된 스테이지를 사용하여 애플리케이션을 생성할 때 디버그 모드를 활성화할지 여부입니다.

기본값: True

아티팩트 프로세서에 대한 자세한 정보

프로젝트 정의 파일에 artifacts.processors 필드를 포함하면 snow app bundle 명령은 src 디렉터리 또는 파일에 있는 Python 코드 파일에 대한 사용자 지정 처리를 호출합니다.

이 섹션에서는 지원되는 프로세서 목록을 다룹니다.

Snowpark 프로세서

Snowflake CLI 에서 지원하는 프로세서 중 하나는 Python 파일에 Snowpark 주석 처리를 적용하는 snowpark 입니다. 다음은 다양한 처리 환경에 대한 기본적인 구조와 구문을 보여줍니다.

  • Conda 환경에서 코드를 실행하려면 다음을 사용합니다.

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: conda
                    name: <conda_name>
    
    Copy

    여기서 <conda_name> 은 Snowpark 주석 처리에 사용할 Python 인터프리터와 Snowpark 라이브러리가 포함된 conda 환경의 이름입니다.

  • Python 가상 환경에서 코드를 실행하려면 다음을 사용합니다.

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: venv
                    path: <venv_path>
    
    Copy

    여기서 <venv_path> 는 Snowpark 주석 처리에 사용할 Python 인터프리터와 Snowpark 라이브러리가 포함된 Python 가상 환경의 경로입니다. 경로는 절대 경로이거나 프로젝트 디렉터리를 기준으로 상대 경로일 수 있습니다.

  • 현재 활성화된 환경에서 코드를 실행하려면 다음 동등한 정의를 사용합니다.

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: current
    
    Copy

    또는

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
    
    Copy

    또는

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - snowpark
    
    Copy

사용자 지정 처리에 대한 자세한 내용은 자동 SQL 코드 생성snow app bundle 명령을 참조하십시오.

템플릿 프로세서

Snowflake Native App 프로젝트는 임의의 파일에 템플릿을 지원하므로 아티팩트의 src 디렉터리에 있는 모든 파일에서 템플릿을 확장할 수 있습니다. 이 기능을 활성화하려면 다음 예제와 같이 원하는 templates 프로세서를 원하는 artifacts 정의에 포함하면 됩니다.

definition_version: 2
entities:
  pkg:
    type: application package
    identifier: myapp_pkg
    artifacts:
      - src: app/*
        dest: ./
        processors:
          - templates
    manifest: app/manifest.yml
  app:
    type: application
    identifier: myapp_<% fn.get_username() %>
    from:
      target: pkg
Copy

Snowflake CLI 가 파일을 스테이지에 업로드하면 템플릿을 업로드하기 전에 자동으로 템플릿을 확장합니다. 예를 들어, 애플리케이션에 다음과 같은 내용의 app/README.md 파일이 포함되어 있고, 이 파일에는 <% ctx.entities.pkg.identifier %> 템플릿이 포함되어 있다고 가정해 보겠습니다.

This is a README file for application package <% ctx.entities.pkg.identifier %>.
Copy

그런 다음 파일을 스테이지에 업로드하기 전에 템플릿을 다음과 같이 확장합니다.

This is a README file for application package myapp_pkg.
Copy

프로젝트 정의 재정의

프로젝트 디렉터리에는 snowflake.yml 파일이 있어야 하지만, 자체 애플리케이션 패키지를 테스트하기 위한 새로운 역할과 같이 snowflake.yml 에 로컬 재정의 기능을 제공하여 Snowflake CLI 의 동작을 사용자 지정할 수 있습니다. 이러한 재정의는 기본 프로젝트 정의 옆에 있는 snowflake.local.yml 파일에 배치해야 합니다. Snowflake는 Git에 의해 버전 제어되지 않도록 .gitignore 파일에 추가할 것을 권장합니다. Snowflake에서 제공하는 모든 템플릿은 이미 .gitignore 파일에 포함되어 있습니다.

이 재정의 파일은 snowflake.yml 파일과 같은 위치에 있어야 합니다.

snowflake.local.yml 파일은 snowflake.yml 과 동일한 스키마를 공유하지만, 기존에 선택 사항이었던 모든 값이 이제 선택 사항으로 추가된다는 점이 다릅니다. 다음은 샘플 snowflake.local.yml 파일입니다.

entities:
  pkg:
    meta:
      role: <your_app_pkg_owner_role>
      name: <name_of_app_pkg>
      warehouse: <your_app_pkg_warehouse>
  app:
    debug: <true|false>
    meta:
      role: <your_app_owner_role>
      name: <name_of_app>
      warehouse: <your_app_warehouse>
Copy

모든 snow app 명령은 기본 snowflake.yml 구성 파일에 설정된 매개 변수보다 이 파일의 매개 변수를 우선시합니다. 합리적인 기본값은 이미 동일한 애플리케이션 프로젝트를 개발하기 위해 동일한 Snowflake 계정을 사용하는 개발자 간에 격리를 제공하므로 이제 막 시작했다면 재정의 파일을 포함하지 않는 것이 좋습니다.

snowflake.ymlsnowflake.local.yml 으로 재정의한 후 얻은 최종 정의 스키마를 해결된 프로젝트 정의라고 합니다.

제한 사항

현재, Snowflake CLI 는 다음을 지원하지 않습니다.

  • 여러 개의 재정의 파일.

  • 빈 재정의 파일. snowflake.yml 의 값을 재정의하려는 경우에만 이 파일을 생성하십시오.