컨테이너를 사용하여 앱에 컴퓨팅 풀 추가

이 항목에서는 Snowflake Native Apps with Snowpark Container Services 에서 컴퓨팅 풀을 사용하는 방법을 설명합니다.

컨테이너가 포함된 앱의 컴퓨팅 풀 정보

컴퓨팅 풀 은 Snowflake가 Snowpark Container Services를 실행하는 하나 이상의 가상 머신(VM) 노드 모음입니다. 컨테이너가 포함된 앱은 컨슈머 계정의 컴퓨팅 풀을 사용하여 앱에 필요한 컨테이너 이미지를 관리합니다.

앱은 여러 개의 컴퓨팅 풀을 생성할 수 있으며, 각 컴퓨팅 풀은 해당 앱에서만 사용할 수 있습니다. 앱에서 사용하는 컴퓨팅 풀은 다른 목적으로 사용할 수 없습니다.

앱 내의 컨테이너는 다른 컴퓨팅 풀에 있더라도 서로 직접 액세스할 수 있습니다.

그러나 다양한 컴퓨팅 풀을 사용하면 공급자가 서비스 유형을 구분할 수 있습니다. 예를 들어, 공급자는 프런트엔드 서비스와 백엔드 서비스를 분리할 수 있습니다.

컴퓨팅 풀은 계정 수준 오브젝트이므로 각 컴퓨팅 풀의 이름은 컨슈머 계정 내에서 고유해야 합니다.

컨테이너가 포함된 앱에서 컴퓨팅 풀을 사용하기 위한 모범 사례

공급자는 컨슈머 계정에서 컴퓨팅 풀을 생성할 때 다음 모범 사례를 고려해야 합니다.

  • 컴퓨팅 풀은 비용에 영향을 미칩니다. 정확한 양의 리소스를 소비하려면 min_nodes, max_nodes, instance_family 속성에 대한 값을 설정하는 것이 중요합니다. 또한 공급자는 비활성 컴퓨팅 풀을 자동으로 일시 중단하도록 AUTO_SUSPEND_SECS 속성을 설정해야 합니다.

    자세한 내용은 CREATE COMPUTE POOL 섹션을 참조하십시오.

  • 컴퓨팅 풀은 계정 수준의 오브젝트이므로 풀 이름은 컨슈머 계정 내에서 고유해야 합니다. 고유성을 보장하기 위해 애플리케이션 이름을 컴퓨팅 풀 이름의 접두사로 사용하는 것이 좋습니다.

  • 여러 클라우드 서비스 공급자에 설치된 컨테이너가 있는 앱에 컴퓨팅 풀을 추가하는 경우, 컴퓨팅 풀을 생성하는 데 사용되는 코드는 여러 클라우드 서비스 공급자의 인스턴스 패밀리의 차이를 고려해야 합니다. 예를 들어 HIGHMEM_X64_L 인스턴스 패밀리는 각 클라우드 서비스 공급자마다 다른 구성을 가지고 있습니다.

    사용 가능한 인스턴스 패밀리에 대한 자세한 내용은 CREATE COMPUTE POOL 섹션을 참조하십시오. 다른 클라우드 서비스 공급자에 대한 인스턴스 패밀리를 설정하는 방법에 대한 예는 각 공급자에 대해 다른 인스턴스 패밀리 선택하기 섹션을 참조하십시오.

  • 컨테이너가 있는 앱이 컴퓨팅 풀의 인스턴스 패밀리로 GPU 를 사용하는 경우에만 uses_gpu 속성을 TRUE로 설정합니다. 자세한 내용은 매니페스트 파일에서 uses_gpu 속성 설정하기 섹션을 참조하십시오.

앱에 대한 컴퓨팅 풀 만들기

컨테이너를 사용하여 앱에 대한 컴퓨팅 풀을 생성하는 방법은 두 가지가 있습니다.

  • 해당 앱은 설치 중에 필요한 컴퓨팅 풀을 생성합니다. 이를 위해서는 컨슈머가 앱에 컴퓨팅 풀에 대한 CREATE COMPUTE POOL 권한을 부여해야 합니다. 공급자는 Snowsight 를 사용하여 이러한 권한을 요청하도록 앱을 구성할 수 있습니다.

    자세한 내용은 CREATE COMPUTE POOL 권한을 요청하도록 앱 구성 섹션을 참조하십시오.

  • 컨슈머는 앱에 필요한 컴퓨팅 풀을 수동으로 생성합니다. 컨슈머는 CREATE COMPUTE POOL 을 실행하여 컴퓨팅 풀을 생성한 다음 앱에 컴퓨팅 풀에 대한 CREATE COMPUTE POOL 권한을 수동으로 부여해야 합니다.

매니페스트 파일에서 uses_gpu 속성 설정하기

컨테이너를 사용하는 앱이 Compute Pool의 인스턴스 패밀리로 GPU 를 지정하는 경우 공급자는 매니페스트에서 uses_gpu 플래그를 true 로 설정해야 합니다. 다음 예에서는 artifacts 블록에서 이 플래그를 설정하는 방법을 보여줍니다.

artifacts:
  readme: readme.md
  setup_script: scripts/setup.sql
  container_services:
    uses_gpu: true|false
    images:
    - /provider_db/provider_schema/provider_repo/server:prod
    - /provider_db/provider_schema/provider_repo/web:1.0
Copy

자동 보안 검사는 이 플래그 보안 검사 프레임워크를 사용하여 앱 버전 검사 프로세스 중 동작을 검증합니다.

조심

Snowflake Marketplace에 컨테이너가 포함된 앱을 게시하려면 앱이 설치 중에 요구 사항인 컴퓨팅 풀을 생성해야 합니다. Snowflake Marketplace 게시 요구 사항은 필수 요구 사항 섹션을 참조하십시오.

CREATE COMPUTE POOL 권한을 요청하도록 앱 구성

공급자는 CREATE COMPUTE POOL 권한을 요청하도록 앱을 구성할 수 있습니다. 앱이 설치되거나 업그레이드될 때 설정 스크립트에서 컴퓨팅 풀을 생성할 수도 있습니다.

참고

앱은 컨슈머 계정에서 최대 5개의 컴퓨팅 풀을 만들 수 있습니다. 앱에서 추가 컴퓨팅 풀을 생성해야 하는 경우 Snowflake 지원에 문의하십시오.

CREATE COMPUTE POOL 권한 요청

앱은 컨슈머에게 CREATE COMPUTE POOL 권한을 요청할 수 있습니다. 이 권한을 통해 앱은 컨슈머 계정에 컴퓨팅 풀을 만들 수 있습니다. 컨슈머에게 전역 권한 요청에 대한 일반적인 정보는 컨슈머에게 전역 권한 요청하기 섹션을 참조하십시오.

컨슈머에게 CREATE COMPUTE POOL 권한을 요청하려면 다음 예제와 같이 manifest.yml 파일에 CREATE COMPUTE POOL 권한을 추가합니다.

...
privileges:
 - CREATE COMPUTE POOL
   description: "Enable application to create one to five compute pools"
 ...
Copy

컨테이너가 포함된 앱의 파일 컨테이너가 포함된 앱의 매니페스트 파일 만들기 생성에 대한 자세한 내용 manifest.yml 을 참조하십시오.

참고

컨테이너 앱 내에서 CREATE COMPUTE POOL 권한 요청에 대한 동작은 다른 권한 요청과 다릅니다. 이 권한을 manifest.yml 파일에 추가하면 Snowsight 는 컨슈머에게 필요한 권한을 부여할 수 있는 인터페이스를 표시합니다.

설정 스크립트에 CREATE COMPUTE POOL 명령 추가

컨슈머 계정에서 컴퓨팅 풀을 생성하려면 앱의 설정 스크립트에 CREATE COMPUTE POOL 명령을 추가합니다.

다음 예제에서는 설치 스크립트의 저장 프로시저 내에서 컴퓨팅 풀을 만드는 방법을 보여줍니다.

CREATE COMPUTE POOL IF NOT EXISTS app_compute_pool
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = standard_1
  AUTO_RESUME = true;
Copy

참고

앱 내에서 컴퓨팅 풀을 생성할 때 공급자는 컴퓨팅 풀을 생성하기 전에 공급자에게 CREATE COMPUTE POOL 권한이 부여되었는지 확인해야 합니다.

앱이 생성한 컴퓨팅 풀은 해당 앱이 독점적으로 소유합니다. 이러한 풀은 다른 애플리케이션이나 컨슈머가 직접 사용할 수 없습니다.

일반적으로 컨슈머 계정의 사용자는 다음과 같은 상황에서만 앱에서 생성된 컴퓨팅 풀을 볼 수 있습니다.

  • 사용자에게 MANAGE GRANTS 권한이 부여되었습니다.

  • 앱은 애플리케이션 역할을 사용하여 컴퓨팅 풀에 대한 액세스 권한을 부여합니다.

애플리케이션 개발자는 활성 역할이 있는 사용자에게 컴퓨팅 풀이 소유한 애플리케이션에 대한 특정 권한을 허용할 수 있습니다. 또한 ACCOUNTADMIN 역할을 가진 관리자는 컴퓨팅 풀이 소유한 애플리케이션을 제어하는 데 필요한 권한을 스스로 부여할 수 있습니다. 컴퓨팅 풀 액세스 요구 사항에 대한 자세한 내용은 ALTER COMPUTE POOL 섹션을 참조하십시오.

설치 스크립트 내에서 컴퓨팅 풀 접두사를 추가합니다.

컴퓨팅 풀은 계정 수준 오브젝트이므로 컴퓨팅 풀 이름은 컨슈머 계정 내에서 고유해야 합니다. 다음 예제에서는 애플리케이션 이름을 컴퓨팅 풀 이름의 접두사로 사용하는 방법을 보여줍니다.

LET POOL_NAME := (select current_database()) || '_app_pool';
CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = STANDARD_2;
Copy

각 공급자에 대해 다른 인스턴스 패밀리 선택하기

여러 클라우드 서비스 공급자에 걸쳐 게시되는 앱의 컴퓨팅 풀을 생성할 때는 인스턴스 패밀리가 구성되는 방식의 차이를 고려하여 설정 스크립트를 생성하는 코드를 작성해야 합니다.

다음 예에서는 앱이 설치되는 클라우드 서비스 공급자를 기반으로 컴퓨팅 풀을 생성하는 저장 프로시저를 작성하는 방법을 보여줍니다.

 CREATE OR REPLACE PROCEDURE public.create_cp()
 RETURNS VARCHAR
 LANGUAGE SQL
 EXECUTE AS OWNER
 AS $$
  BEGIN
      LET POOL_NAME := (select current_database()) || '_app_pool';
      LET INSTANCE_FAMILY := IFF( CONTAINS(current_region(), 'AZURE') , 'GPU_NV_XS' , 'GPU_NV_S' );
      CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
          MIN_NODES = 1
          MAX_NODES = 1
          INSTANCE_FAMILY = :instance_family;
      RETURN 'Compute Pool Created';
  END;
$$;
Copy