向应用程序添加作业服务¶
本主题介绍如何在 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 权限。有关更多信息,请参阅 在应用程序中执行作业服务。