CREATE SERVICE¶
在当前架构中创建一个新的 Snowpark Container Services 服务。如果已存在具有该名称的服务,请使用 DROP SERVICE 命令删除以前创建的服务。
您可以运行服务的多个实例。每个服务实例都是服务规范文件中定义的容器的集合,这些容器在计算池中的节点上一起运行。如果您运行服务的多个实例,负载均衡器将管理传入流量。
请注意,必须按特定顺序指定命令参数。有关更多信息,请参阅“使用说明”部分。
语法¶
CREATE SERVICE [ IF NOT EXISTS ] <name>
IN COMPUTE POOL <compute_pool_name>
{
fromSpecification
| fromSpecificationTemplate
}
[ EXTERNAL_ACCESS_INTEGRATIONS = ( <EAI_name> [ , ... ] ) ]
[ AUTO_RESUME = { TRUE | FALSE } ]
[ MIN_INSTANCES = <num> ]
[ MIN_READY_INSTANCES = <num> ]
[ MAX_INSTANCES = <num> ]
[ QUERY_WAREHOUSE = <warehouse_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ COMMENT = '{string_literal}']
其中:
fromSpecification ::= { FROM SPECIFICATION_FILE = '<yaml_file_path>' -- for native app service. | FROM @<stage> SPECIFICATION_FILE = '<yaml_file_path>' -- for non-native app service. | FROM SPECIFICATION <specification_text> }fromSpecificationTemplate ::= { FROM SPECIFICATION_TEMPLATE_FILE = '<yaml_file_stage_path>' -- for native app service. | FROM @<stage> SPECIFICATION_TEMPLATE_FILE = '<yaml_file_stage_path>' -- for non-native app service. | FROM SPECIFICATION_TEMPLATE <specification_text> } USING ( <key> => <value> [ , <key> => <value> [ , ... ] ] )
必填参数¶
name
指定服务标识符(即名称)的字符串;对于在其中创建服务的架构,它必须是唯一的。
不支持带引号的特殊字符名称或区分大小写的名称。同样的约束也适用于在其中创建服务的数据库和架构名称。也就是说,在创建服务时,不带引号的数据库和架构名称是有效的。
IN COMPUTE POOL compute_pool_name
指定要在其上运行服务的账户中的计算池名称。
FROM ...
-
使用服务规范
在定义规范时,您可以采用以下方式:内联定义或在单独的文件中定义。
SPECIFICATION_FILE = 'yaml_file_path'
或 .@stage SPECIFICATION_FILE = 'yaml_file_path'
或 .SPECIFICATION specification_text
指定包含服务规范的文件或者内联服务规范。如果您的服务规范处于文件中,请使用 SPECIFICATION_FILE。对于在 Snowflake Native App 中创建的服务,忽略
@stage
,并指定相对于应用程序根目录的路径。对于在其他上下文中创建的服务,请指定 Snowflake 内部暂存区和服务规范文件的路径。
使用服务规范模板
在定义 模板规范 时,您可以采用以下方式:内联定义或在单独的文件中定义。
SPECIFICATION_TEMPLATE_FILE = 'yaml_file_path'
或 .@stage SPECIFICATION_TEMPLATE_FILE = 'yaml_file_path'
或 .SPECIFICATION_TEMPLATE specification_text
指定包含服务规范模板的文件或者内联服务规范模板。如果您的服务规范模板处于文件中,请使用 SPECIFICATION_TEMPLATE_FILE。对于在 Snowflake Native App 中创建的服务,忽略
@stage
,并指定相对于应用程序根目录的路径。对于在其他上下文中创建的服务,请指定 Snowflake 内部暂存区和服务规范文件的路径。在使用模板规范时,还应该包括USING
参数。USING ( key => value [ , key => value [ , ... ] ] )
指定模板变量及这些变量的值。
key
是模板变量的名称。模板变量名称可以选择放在双引号 ("
) 内。value
是模板中要分配给变量的值。字符串值必须放在'
或$$
内。值必须是字母数字或有效的 JSON。
使用英文逗号分隔各键值对。
可选参数¶
EXTERNAL_ACCESS_INTEGRATIONS = ( EAI_name [ , ... ] )
指定允许您的服务访问外部站点的 外部访问集成 的名称。此列表中的名称区分大小写。默认情况下,应用程序容器没有访问互联网的权限。如果要允许您的服务访问外部站点,请创建外部访问集成 (EAI),并将您的服务配置为使用该集成。有关更多信息,请参阅 配置网络出口。
AUTO_RESUME = { TRUE | FALSE }
指定在调用服务函数或入口时是否自动恢复服务。
如果 AUTO_RESUME 为 FALSE,您需要明确恢复服务(使用 ALTER SERVICE ... RESUME)。
如果 AUTO_RESUME 为 TRUE,当调用服务函数或收到请求(入口)时,Snowflake 将恢复暂停的服务。
MIN_INSTANCES = num
指定要运行的最小服务实例数。
默认值:1。
MIN_READY_INSTANCES = num
指示 Snowflake 必须至少准备好多少个服务实例,才能认为服务已准备好处理请求。MIN_READY_INSTANCES 必须等于或小于 MIN_INSTANCES。有关更多信息,请参阅 扩展服务。
备注
创建服务后,如果您想使用 SHOW SERVICES 或 DESCRIBE SERVICE 命令查找为该服务配置的 MIN_READY_INSTANCES,则必须在您的账户中启用 2024_08 行为变更捆绑包。要 在账户中启用此捆绑包,请执行以下语句:
SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_08');
默认:MIN_INSTANCES 属性的值。
MAX_INSTANCES = num
指定要运行的最大服务实例数。
默认:MIN_INSTANCES 属性的值。
QUERY_WAREHOUSE = warehouse_name
要在以下情况下使用的仓库:服务容器连接到 Snowflake 以执行查询,但未显式指定要使用的仓库。
默认值:None。
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
指定 标签 名称和标签字符串值。
标签值始终为字符串,标签值的最大字符数为 256。
有关在语句中指定标签的信息,请参阅 对象和列的标签配额。
COMMENT = 'string_literal'
指定服务的注释。
默认:无值
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
CREATE SERVICE |
架构 |
|
USAGE |
计算池 |
|
READ |
暂存区 |
这是存储规范的暂存区。 |
READ |
镜像仓库 |
规范引用的镜像仓库。 |
BIND SERVICE ENDPOINT |
账户 |
角色必须具有此权限才能创建具有公共端点的服务。这允许通过公共端点访问服务。如果服务的所有者角色失去此权限,则无法访问公共端点。 |
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
在调用 CREATE SERVICE 时,参数应按以下顺序提供:指定计算池,然后指定服务规范(暂存区中的提供商规范文件或内联规范),然后指定其他属性。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
创建一个运行两个服务实例的服务:
CREATE SERVICE echo_service
IN COMPUTE POOL tutorial_compute_pool
FROM @tutorial_stage
SPECIFICATION_FILE='echo_spec.yaml'
MIN_INSTANCES=2
MAX_INSTANCES=2