Créer et gérer des services de tâche dans une application¶
Cette rubrique décrit comment créer et gérer des services de tâche dans un Snowflake Native App with Snowpark Container Services. Pour obtenir des informations sur l’utilisation de services de longue durée dans une application, voir Créer et gérer des services de tâche dans une application.
Un Snowflake Native App with Snowpark Container Services peut exécuter un service de tâche Snowpark Container Services.
Un service créé à l’aide de CREATE SERVICE a une longue durée d’exécution. Une application doit explicitement arrêter le service lorsqu’il n’est plus nécessaire. En revanche, un service de tâche créé à l’aide de EXECUTE JOB SERVICE est un service qui se termine lorsque le code du service s’arrête, à l’instar d’une procédure stockée. Lorsque tous les conteneurs sortent, la tâche est terminée.
Les services de tâche s’exécutent de manière synchrone. La commande EXECUTE JOB SERVICE s’achève après la sortie de tous les conteneurs.
Exécuter un service de tâche dans une application¶
Pour exécuter un service de tâche dans une application, ajoutez la commande EXECUTE JOB SERVICE au script d’installation.
L’exemple suivant montre comment exécuter un service de tâche dans le contexte d’un 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;
Note
Notez que les paramètres de la commande doivent être spécifiés dans l’ordre indiqué dans cet exemple.
Lorsqu’elle est appelée à partir du script de configuration, la commande EXECUTE JOB SERVICE crée une tâche dans un pool de calcul du compte du consommateur.
Si le consommateur crée le pool de calcul manuellement, il doit accorder le privilège USAGE sur le pool de calcul à l’appli pour que cette commande aboutisse. Par conséquent, les fournisseurs doivent inclure une logique dans une procédure stockée qui teste si les privilèges corrects ont été accordés avant d’exécuter la procédure EXECUTE JOB SERVICE.
La clause FROM SPECIFICATION_FILE =
spécifie le chemin relatif vers le fichier en zone de préparation. Pour plus d’informations, voir Créer le fichier de spécification de service.
La clause NAME =
spécifie l’identificateur du service de tâche. Le nom de ce service de tâche doit être unique dans le schéma où il se trouve.
Note
Les services de tâche ne peuvent pas être exécutés dans un schéma de version.
La clause NAME =
doit utiliser le schéma et le nom de la tâche dans l’application. Par exemple, services_schema.job_service
Si le nom du schéma n’est pas spécifié, le service de tâche est créé dans le schéma de la procédure stockée ou de la fonction qui exécute le service de tâche.
Contrôler un service de tâche dans une application¶
Pour surveiller le statut d’un service de tâche au sein d’une application, utilisez la commande SYSTEM$GET_SERVICE_STATUS — Obsolète comme indiqué dans l’exemple suivant :
CALL SYSTEM$GET_SERVICE_STATUS('schema.job_name')
Cette fonction système renvoie un objet JSON qui contient des informations sur le service de tâche spécifié dans l’application. Les fournisseurs peuvent appeler cette fonction système depuis l’application pour déterminer si les services ont démarré ou échoué.
Les consommateurs peuvent également appeler cette fonction système pour déterminer le statut d’un service. Pour ce faire, les fournisseurs doivent accorder le privilège MONITOR sur le service à un rôle d’application. Voir Exécuter un service de tâche dans une application pour plus d’informations.
Accès aux journaux des conteneurs locaux¶
Pour obtenir les journaux système d’un service de tâche au sein d’une application, utilisez la fonction système SYSTEM$GET_SERVICE_LOGS comme indiqué dans l’exemple suivant :
CALL SYSTEM$GET_SERVICE_LOGS('schema.job_name', 'instance_id', 'container_name'[, 10])
Les fournisseurs peuvent appeler cette fonction système à partir d’une application. Dans ce contexte, le fournisseur ne doit pas spécifier le app_name
dans le nom complet de la tâche.
Les consommateurs peuvent également exécuter cette commande système. Pour ce faire, les fournisseurs doivent accorder le privilège MONITOR sur le service à un rôle d’application. Pour plus d’informations, voir Exécuter un service de tâche dans une application.