앱에서 장기 실행 서비스 만들기 및 관리¶
이 항목에서는 Snowflake Native App with Snowpark Container Services 에서 장기 실행 서비스를 구성하고 사용하는 방법을 설명합니다. 앱에서 작업 서비스를 사용하는 방법에 대한 자세한 내용은 앱에서 작업 서비스 만들기 및 관리하기 섹션을 참조하십시오.
컨슈머 계정에서 서비스를 생성하는 데 필요한 권한¶
앱이 컨슈머 계정에서 서비스를 생성하려면 컨슈머가 먼저 다음 권한을 부여해야 합니다.
CREATE COMPUTE POOL
이러한 권한은 모든 서비스에 필요합니다. 컨슈머 계정에서 서비스를 생성하려면 하나 이상의 컴퓨팅 풀이 필요합니다.
BIND SERVICE ENDPOINT
이 권한은 엔드포인트를 노출하는 모든 서비스에 필요합니다. 서비스가 Snowflake 외부의 URLs에 연결해야 하는 경우 앱이 필요한 외부 액세스 통합을 생성하려면 이 권한이 필요합니다.
앱 내에서 서비스를 생성할 때의 고려 사항¶
Snowflake Native App with Snowpark Container Services 내에서 서비스를 생성할 때는 다음과 같은 고려 사항이 적용됩니다.
웨어하우스에 대한 참조. Snowflake Native App with Snowpark Container Services 에서 사용하는 방법에 대한 자세한 내용은 앱 내에서 서비스를 사용할 때의 모범 사례 를 참조하십시오.
앱 내 서비스의 따옴표로 묶인 이름은 지원되지 않습니다.
버전이 지정된 스키마에서는 서비스를 생성할 수 없습니다.
앱 내에서 생성된 컨테이너 이미지를 사용하여 애플리케이션 외부에서 서비스를 생성할 수 없습니다.
앱에서 CREATE SERVICE 명령 사용¶
장기 실행 서비스를 만들려면 CREATE SERVICE 를 사용합니다. 앱의 컨텍스트 내에서 공급자는 항상 설정 스크립트 내에서 직접 호출하는 대신 저장 프로시저 내에서 이 명령을 호출하는 것을 고려해야 합니다.
서비스를 생성하려면 저장 프로시저 내에서 CREATE SERVICE 명령을 사용합니다. 다음 예제에서는 앱에서 이 명령을 사용하는 구문을 보여줍니다.
CREATE SERVICE [ IF NOT EXISTS ] <name>
IN COMPUTE POOL <compute_pool_name>
{
fromSpecification
| fromSpecificationTemplate
}
fromSpecification ::=
SPECIFICATION_FILE = '/containers/service1_spec.yaml'
fromSpecificationTemplate ::=
FROM SPECIFICATION_TEMPLATE_FILE = '/containers/service1_spec.yaml'
USING ( <key> => <value> [ , <key> => <value> [ , ... ] ] )
FROM SPECIFICATION_FILE 절은 앱 버전과 관련된 서비스 사양 파일을 가리킵니다. 이 경로는 앱 루트 디렉터리를 기준으로 합니다.
저장 프로시저에 CREATE SERVICE 명령 추가¶
Snowflake Native Apps with Snowpark Container Services 은 저장 프로시저 내에서 서비스를 생성하는 다양한 방법을 지원합니다.
공급자는 이러한 방법을 원하는 대로 조합하여 컨슈머 계정에서 서비스를 생성할 수 있습니다.
grant_callback
속성을 사용하여 서비스 만들기¶
grant_callback
은 공급자가 콜백 함수를 지정할 수 있는 매니페스트 파일의 속성입니다. 콜백 함수는 애플리케이션에 필요한 컴퓨팅 풀, 서비스를 생성하고 다른 설정 작업을 수행할 수 있는 저장 프로시저입니다.
참고
grant_callback
속성을 사용하여 콜백 함수를 지정하는 것은 Snowflake Native Apps with Snowpark Container Services 에서만 지원됩니다.
grant_callback
을 사용하여 콜백 함수를 지정하면 컨슈머가 앱에 필요한 권한을 부여할 때까지 저장 프로시저가 호출되지 않는다는 이점이 있습니다. 이를 통해 앱에는 컨슈머 계정에서 서비스 및 기타 오브젝트를 생성하는 데 필요한 권한이 부여됩니다.
grant_callback
을 사용하려면 manifest.yml
파일의 configuration
섹션에 추가합니다.
configuration:
log_level: INFO
trace_level: ALWAYS
grant_callback: core.grant_callback
그런 다음, 설정 스크립트에서 다음 예와 같이 콜백 함수를 정의합니다.
CREATE SCHEMA core;
CREATE APPLICATION ROLE app_public;
CREATE OR REPLACE PROCEDURE core.grant_callback(privileges array)
RETURNS STRING
AS $$
BEGIN
IF (ARRAY_CONTAINS('CREATE COMPUTE POOL'::VARIANT, privileges)) THEN
CREATE COMPUTE POOL IF NOT EXISTS app_compute_pool
MIN_NODES = 1
MAX_NODES = 3
INSTANCE_FAMILY = GPU_NV_M;
END IF;
IF (ARRAY_CONTAINS('BIND SERVICE ENDPOINT'::VARIANT, privileges)) THEN
CREATE SERVICE IF NOT EXISTS core.app_service
IN COMPUTE POOL my_compute_pool
FROM SPECIFICATION_FILE = '/containers/service1_spec.yaml';
END IF;
RETURN 'DONE';
END;
$$;
GRANT USAGE ON PROCEDURE core.grant_callback(array) TO APPLICATION ROLE app_public;
이 예제에서는 다음을 수행하는 grant_callback
프로시저를 생성합니다.
컨슈머가 앱에 CREATE COMPUTE POOL 권한을 부여했는지 테스트합니다. 컨슈머가 이 권한을 부여한 경우
grant_callback
프로시저는 컴퓨팅 풀을 생성합니다.컨슈머가 앱에 BIND SERVICE ENDPOINT 권한을 부여했는지 테스트합니다. 컨슈머가 이 권한을 부여한 경우
grant_callback
프로시저는 서비스를 생성합니다.
이 예제는 컨테이너를 사용하여 앱에서 서비스와 컴퓨팅 풀을 만드는 패턴을 보여줍니다. 이 예제에서 앱은 먼저 컨슈머가 필요한 권한을 부여했는지 테스트한 다음 서비스 또는 컴퓨팅 풀을 생성합니다.
참조 정의를 기반으로 서비스 만들기¶
앱은 manifest.yml
파일의 register_callback
속성을 사용하여 참조 정의를 사용하여 서비스를 생성할 수 있습니다. 이 속성은 컨슈머 계정의 오브젝트를 참조 정의에 바인딩하는 데 사용되는 저장 프로시저를 지정합니다.
앱에서 참조를 사용하는 방법에 대한 자세한 내용은 컨슈머로부터 참조 및 오브젝트 수준 권한 요청하기 섹션을 참조하십시오.
앱은 필요한 모든 참조가 바인딩된 후 참조의 register_callback
을 사용하여 서비스를 생성할 수 있습니다. 외부 액세스 통합 또는 시크릿에 대한 모든 참조가 허용되기 전에 서비스가 생성되면 서비스 생성이 실패합니다.
저장 프로시저를 사용하여 서비스 만들기¶
앱은 저장 프로시저 내에서 직접 서비스를 생성할 수 있습니다. 다른 저장 프로시저와 마찬가지로 공급자는 이를 애플리케이션 설치 스크립트에서 정의할 수 있습니다. 이 저장 프로시저는 CREATE SERVICE 명령을 사용하여 서비스를 생성한 다음 저장 프로시저에 필요한 권한을 애플리케이션 역할에 부여합니다.
컨슈머는 앱에 필요한 권한과 참조를 제공한 후 이 저장 프로시저를 호출하여 자신의 계정에서 서비스를 생성합니다.
서비스 상태 확인¶
앱은 서비스 상태를 확인하기 위해 설정 스크립트에서 SYSTEM$GET_SERVICE_STATUS — 사용되지 않음 시스템 함수를 호출할 수 있습니다.
이 시스템 함수는 각 서비스 인스턴스의 각 컨테이너에 대해 JSON 오브젝트를 반환합니다.
앱 내에서 서비스를 사용할 때의 모범 사례¶
Snowflake Native App with Snowpark Container Services 내에서 서비스를 사용할 때의 모범 사례와 고려 사항은 다음과 같습니다.
컨슈머가 서비스와 상호 작용할 수 있도록 하는 Streamlit 앱 또는 저장 프로시저를 만듭니다.
일부 경우에는 컨슈머가 앱에서 제공하는 서비스를 생성, 시작, 중지, 재시작 및 관리해야 할 수 있습니다.
단일 저장 프로시저를 사용하여 컨슈머가 필요한 모든 권한을 부여했는지 확인합니다.
서비스를 사용하려면 컨슈머가 앱에 여러 권한을 부여해야 할 수도 있습니다. 예를 들어, 서비스에는 CREATE COMPUTE POOL, CREATE WAREHOUSE, BIND SERVICE ENDPOINT 및 기타 권한이 필요할 수 있습니다. 앱은 컨슈머 계정의 기존 오브젝트에 대한 참조를 요구할 수도 있습니다.
이러한 맥락에서 Snowflake는 모든 전제 조건이 충족되었는지 확인하기 위해 단일 저장 프로시저를 사용할 것을 권장합니다. 필수 구성 요소가 충족되면 이 저장 프로시저가 서비스를 생성합니다.
서비스에 쿼리를 실행하기 위한 웨어하우스가 필요한 경우, 앱은 컨슈머 계정에 직접 웨어하우스를 생성해야 합니다. 이를 위해서는 컨슈머가 앱에 CREATE WAREHOUSE 전역 권한을 부여해야 합니다. 자세한 내용은 컨슈머로부터 전역 권한 요청하기 섹션을 참조하십시오.
사양 템플릿을 사용하여 서비스를 생성할 때 컨슈머가 제공한 인자를 애플리케이션 인스턴스 내부에 저장합니다. 이를 통해 서비스를 업그레이드할 때 인자로 전달할 수 있습니다.