Criação e gerenciamento de serviços de trabalho em um aplicativo

Este tópico descreve como criar e gerenciar serviços de trabalho em um Snowflake Native App with Snowpark Container Services. Para obter informações sobre como usar serviços de longa duração em um aplicativo, consulte Criação e gerenciamento de serviços de trabalho em um aplicativo.

Um Snowflake Native App with Snowpark Container Services pode executar um serviço de trabalho da Snowpark Container Services.

Um serviço criado usando CREATE SERVICE é de longa duração. Um aplicativo deve interromper explicitamente o serviço quando ele não for mais necessário. Em contraste, um serviço de trabalho criado usando EXECUTE JOB SERVICE é um serviço que termina quando o código do serviço sai, semelhante a um procedimento armazenado. Quando todos os contêineres saírem, o trabalho estará concluído.

Os serviços de trabalho são executados de forma síncrona. O comando EXECUTE JOB SERVICE é concluído após todos os contêineres saírem.

Execução de um serviço de trabalho em um aplicativo

Para executar um serviço de trabalho em um aplicativo, adicione o comando EXECUTE JOB SERVICE para o script de configuração.

O exemplo a seguir mostra como executar um serviço de trabalho no contexto de um 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;
Copy

Nota

Observe que os parâmetros do comando devem ser especificados na ordem mostrada neste exemplo.

Quando chamado a partir do script de configuração, o comando EXECUTE JOB SERVICE cria um trabalho em um pool de computação na conta do consumidor.

Se o consumidor criar o pool de computação manualmente, ele deverá conceder o privilégio USAGE no pool de computação para o aplicativo antes que este comando seja bem-sucedido. Portanto, os provedores devem incluir lógica em um procedimento armazenado que teste se os privilégios corretos foram concedidos antes de executar o EXECUTE JOB SERVICE.

A cláusula FROM SPECIFICATION_FILE = especifica o caminho relativo para o arquivo de especificação de serviço em um estágio. Consulte Criação do arquivo de especificação do serviço para obter mais informações.

A cláusula NAME = especifica o identificador para o serviço de trabalho. O nome deste serviço de trabalho deve ser exclusivo dentro do esquema em que está localizado.

Nota

Os serviços de trabalho não podem ser executados dentro de um esquema de versão.

A cláusula NAME = deve usar o esquema e o nome do trabalho dentro do aplicativo. Por exemplo, services_schema.job_service Se o nome do esquema não for especificado, o serviço de trabalho será criado no esquema do procedimento armazenado ou da função que está executando o serviço de trabalho.

Monitoramento de um serviço de trabalho em um aplicativo

Para monitorar o status de um serviço de trabalho em um aplicativo, use o comando SYSTEM$GET_SERVICE_STATUS — Obsoleto conforme mostrado no exemplo a seguir:

CALL SYSTEM$GET_SERVICE_STATUS('schema.job_name')
Copy

Esta função do sistema retorna um objeto JSON que contém informações sobre o serviço de trabalho especificado no aplicativo. Os provedores podem chamar essa função do sistema de dentro do aplicativo para determinar se os serviços foram iniciados ou falharam.

Os consumidores também podem chamar essa função do sistema para determinar o status de um serviço. Isso requer que os provedores concedam o privilégio MONITOR no serviço de uma função de aplicativo. Consulte Execução de um serviço de trabalho em um aplicativo para obter mais informações.

Acesso a logs de contêiner locais

Para obter os logs do sistema para um serviço de trabalho em um aplicativo, use a função do sistema SYSTEM$GET_SERVICE_LOGS conforme mostrado no exemplo a seguir:

CALL SYSTEM$GET_SERVICE_LOGS('schema.job_name', 'instance_id', 'container_name'[, 10])
Copy

Os provedores podem chamar essa função do sistema de dentro de um aplicativo. Neste contexto, o provedor não tem de especificar o app_name como parte do nome do trabalho totalmente qualificado.

Os consumidores também podem executar este comando do sistema. Isto requer que os provedores concedam o privilégio MONITOR no serviço para uma função de aplicativo. Consulte Execução de um serviço de trabalho em um aplicativo para obter mais informações.