앱에서 작업 서비스 만들기 및 관리하기¶
이 항목에서는 Snowflake Native App with Snowpark Container Services 내에서 작업 서비스를 생성하고 관리하는 방법에 대해 설명합니다. 앱에서 장기 실행 서비스를 사용하는 방법에 대한 자세한 내용은 앱에서 작업 서비스 만들기 및 관리하기 섹션을 참조하십시오.
Snowflake Native App with Snowpark Container Services 는 Snowpark Container Services 작업 서비스를 실행할 수 있습니다.
CREATE SERVICE 를 사용하여 생성된 서비스는 장기 실행됩니다. 앱은 더 이상 필요하지 않을 때 서비스를 명시적으로 중지해야 합니다. 반면에 EXECUTE JOB SERVICE 를 사용하여 생성된 작업 서비스는 저장 프로시저와 유사하게 서비스의 코드가 종료될 때 종료되는 서비스입니다. 모든 컨테이너가 종료되면 작업이 완료됩니다.
작업 서비스는 동기적으로 실행됩니다. 모든 컨테이너가 종료되면 EXECUTE JOB SERVICE 명령이 완료됩니다.
앱에서 작업 서비스 실행¶
앱에서 작업 서비스를 실행하려면 설정 스크립트에 EXECUTE JOB SERVICE 명령을 추가합니다.
다음 예제는 Snowflake Native App with Snowpark Container Services 의 컨텍스트에서 작업 서비스를 실행하는 방법을 보여줍니다.
EXECUTE JOB SERVICE
IN COMPUTE POOL consumer_compute_pool
FROM SPECIFICATION_FILE = 'job_service.yml'
NAME = 'services_schema.job_service'
GRANT MONITOR ON SERVICE services.job_service TO APPLICATION ROLE app_public;
참고
이 예제에 표시된 순서대로 명령 매개 변수를 지정해야 합니다.
설정 스크립트에서 호출하면 EXECUTE JOB SERVICE 명령이 컨슈머 계정의 컴퓨팅 풀에 작업을 생성합니다.
컨슈머가 컴퓨팅 풀을 수동으로 생성하는 경우, 이 명령이 성공하려면 앱에 컴퓨팅 풀에 대한 USAGE 권한을 부여해야 합니다. 따라서 공급자는 EXECUTE JOB SERVICE 를 실행하기 전에 올바른 권한이 부여되었는지 테스트하는 논리를 저장 프로시저에 포함해야 합니다.
FROM SPECIFICATION_FILE =
절은 스테이지에서 서비스 사양 파일의 상대 경로를 지정합니다. 자세한 내용은 서비스 사양 파일 만들기 섹션을 참조하십시오.
NAME =
절은 작업 서비스의 식별자를 지정합니다. 이 작업 서비스의 이름은 해당 작업 서비스가 위치한 스키마 내에서 고유해야 합니다.
참고
버전 스키마 내에서는 작업 서비스를 실행할 수 없습니다.
NAME =
절은 애플리케이션 내에서 작업의 스키마와 이름을 사용해야 합니다. 그러한 예는 services_schema.job_service
입니다. 스키마 이름을 지정하지 않으면 작업 서비스를 실행하는 저장 프로시저 또는 함수의 스키마에 작업 서비스가 생성됩니다.
앱에서 작업 서비스 모니터링¶
앱 내에서 작업 서비스의 상태를 모니터링하려면 다음 예제와 같이 SYSTEM$GET_SERVICE_STATUS — 사용되지 않음 명령을 사용합니다.
CALL SYSTEM$GET_SERVICE_STATUS('schema.job_name')
이 시스템 함수는 앱 내에서 지정된 작업 서비스에 대한 정보가 포함된 JSON 오브젝트를 반환합니다. 공급자는 앱 내에서 이 시스템 함수를 호출하여 서비스가 시작되었는지 또는 실패했는지 확인할 수 있습니다.
컨슈머는 이 시스템 함수를 호출하여 서비스 상태를 확인할 수도 있습니다. 이를 위해서는 공급자가 서비스에 대한 MONITOR 권한을 애플리케이션 역할에 부여해야 합니다. 자세한 내용은 앱에서 작업 서비스 실행 섹션을 참조하십시오.
로컬 컨테이너 로그에 액세스하기¶
앱 내 작업 서비스에 대한 시스템 로그를 가져오려면 다음 예제와 같이 SYSTEM$GET_SERVICE_LOGS 시스템 함수를 사용합니다.
CALL SYSTEM$GET_SERVICE_LOGS('schema.job_name', 'instance_id', 'container_name'[, 10])
공급자는 앱 내에서 이 시스템 함수를 호출할 수 있습니다. 이 경우 공급자는 정규화된 작업 이름의 일부로 app_name
을 지정할 필요가 없습니다.
컨슈머도 이 시스템 명령을 실행할 수 있습니다. 이를 위해서는 공급자가 애플리케이션 역할에 서비스에 대한 MONITOR 권한을 부여해야 합니다. 자세한 내용은 앱에서 작업 서비스 실행 섹션을 참조하십시오.