CREATE SERVICE¶
Crée un nouveau service Snowpark Container Services dans le schéma actuel. Si un service portant ce nom existe déjà, utilisez la commande DROP SERVICE pour supprimer le service précédemment créé.
Vous pouvez exécuter plus d’une instance de votre service. Chaque instance de service est une collection de conteneurs, tels que définis dans le fichier de spécification du service, qui s’exécutent ensemble sur un nœud de votre pool de calcul. Si vous exécutez plusieurs instances d’un service, un équilibreur de charge gère le trafic entrant.
Notez que les paramètres de commande doivent être spécifiés dans un ordre précis. Pour plus d’informations, voir la section Notes sur l’utilisation.
- Voir aussi :
ALTER SERVICE , DESCRIBE SERVICE, DROP SERVICE , SHOW SERVICES
Syntaxe¶
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}']
Où :
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> [ , ... ] ] )
Paramètres requis¶
name
Chaîne qui spécifie l’identificateur (c’est-à-dire le nom) du service ; elle doit être unique pour le schéma dans lequel le service est créé.
Les noms entre guillemets pour les caractères spéciaux ou les noms sensibles à la casse ne sont pas pris en charge. La même contrainte s’applique également aux noms des bases de données et des schémas dans lesquels vous créez un service. En d’autres termes, les noms de bases de données et de schémas sans guillemets sont valables lors de la création d’un service.
IN COMPUTE POOL compute_pool_name
Spécifie le nom du pool de calcul de votre compte sur lequel le service doit être exécuté.
FROM ...
Identifie la spécification ou le modèle de spécification pour le service.
Utilisation d’une spécification de service
Vous pouvez définir la spécification en ligne ou dans un fichier séparé.
SPECIFICATION_FILE = 'yaml_file_path'
ou .@stage SPECIFICATION_FILE = 'yaml_file_path'
ou .SPECIFICATION specification_text
Spécifie le fichier contenant la spécification de service ou la spécification de service en ligne. Si votre spécification de service se trouve dans un fichier, utilisez SPECIFICATION_FILE. Pour les services créés dans une Snowflake Native App, omettez
@stage
et spécifiez un chemin relatif au répertoire racine de l’application. Pour les services créés dans d’autres contextes, spécifiez la zone de préparation interne de Snowflake et le chemin d’accès au fichier de spécification de service.
Utilisation d’un modèle de spécification de service
Vous pouvez définir la spécification du modèle en ligne ou dans un fichier séparé.
SPECIFICATION_TEMPLATE_FILE = 'yaml_file_path'
ou .@stage SPECIFICATION_TEMPLATE_FILE = 'yaml_file_path'
ou .SPECIFICATION_TEMPLATE specification_text
Spécifie le fichier contenant le modèle de spécification de service ou le modèle de spécification de service en ligne. Si votre modèle de spécification de service se trouve dans un fichier, utilisez SPECIFICATION_TEMPLATE_FILE. Pour les services créés dans une Snowflake Native App, omettez
@stage
et spécifiez un chemin relatif au répertoire racine de l’application. Pour les services créés dans d’autres contextes, spécifiez la zone de préparation interne de Snowflake et le chemin d’accès au fichier de spécification de service. Lorsque vous utilisez une spécification de modèle, vous devez également inclure le paramètreUSING
.USING ( key => value [ , key => value [ , ... ] ] )
Spécifie les variables de modèle et les valeurs de ces variables.
key
est le nom de la variable de modèle. Le nom de variable de modèle peut éventuellement être placé entre guillemets doubles ("
).value
est la valeur à attribuer à la variable du modèle. Les valeurs de chaîne doivent être encadrées par'
ou par$$
. La valeur doit être soit alphanumérique, soit un JSON valide.
Utilisez une virgule entre chaque paire clé-valeur.
Paramètres facultatifs¶
EXTERNAL_ACCESS_INTEGRATIONS = ( EAI_name [ , ... ] )
Spécifie les noms des intégrations d’accès externes qui permettent à votre service d’accéder à des sites externes. Les noms de cette liste sont sensibles à la casse. Par défaut, les conteneurs d’application n’ont pas la permission d’accéder à Internet. Si vous voulez permettre à votre service d’accéder à un site externe, créez une intégration d’accès externe (EAI), et configurez votre service pour qu’il utilise cette intégration. Pour plus d’informations, voir Sortie réseau.
AUTO_RESUME = { TRUE | FALSE }
Indique s’il faut reprendre automatiquement un service lorsqu’une fonction de service ou une entrée est appelée.
Si AUTO_RESUME est défini sur FALSE, vous devez reprendre explicitement le service (en utilisant ALTER SERVICE … RESUME).
Si AUTO_RESUME est défini sur TRUE, Snowflake reprend le service suspendu lorsqu’une fonction de service est appelée ou lorsqu’une requête est reçue (entrée).
MIN_INSTANCES = num
Spécifie le nombre minimum d’instances de service à exécuter.
Par défaut : 1
MIN_READY_INSTANCES = num
Indique les instances de service minimales qui doivent être prêtes pour que Snowflake considère que le service est prêt à traiter les requêtes. MIN_READY_INSTANCES doit être égal ou inférieur à MIN_INSTANCES.
Note
Après avoir créé un service, si vous souhaitez utiliser la commande SHOW SERVICES ou DESCRIBE SERVICE pour trouver les MIN_READY_INSTANCES configurées pour le service, vous devez activer le bundle de changements de comportement 2024_08 dans votre compte. Pour activer ce bundle dans votre compte, exécutez l’instruction suivante :
SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_08');
Cela fonctionne comme suit : Supposons que MIN_INSTANCES pour un service est fixé à trois. Dans ce cas, Snowflake ne considère pas le service comme READY jusqu’à ce qu’au moins trois instances soient disponibles. Tant que le service n’est pas prêt, Snowflake bloque l’accès à celui-ci, ce qui signifie que les fonctions de service associées ou les demandes d’entrée sont refusées jusqu’à ce que la disponibilité soit confirmée.
Dans certains cas, vous souhaiterez peut-être que Snowflake considère que le service est prêt (et transmet les demandes entrantes) même si moins d’instances que le minimum spécifié sont disponibles. Vous pouvez y parvenir en définissant la propriété MIN_READY_INSTANCES.
Considérez un autre scénario : pendant la maintenance ou une mise à niveau progressive du service, Snowflake peut mettre fin à une ou plusieurs instances de service. Cela pourrait conduire à moins d’instances disponibles que la valeur MIN_INSTANCES spécifiée, ce qui fait que le service n’est pas à l’état READY. Dans de tels cas, vous souhaiterez peut-être définir MIN_READY_INSTANCES sur une valeur inférieure à MIN_INSTANCES pour garantir que le service puisse continuer à accepter les demandes.
Par défaut : la valeur de la propriété MIN_INSTANCES.
MAX_INSTANCES = num
Spécifie le nombre maximum d’instances de service à exécuter.
Par défaut : la valeur de la propriété MIN_INSTANCES.
QUERY_WAREHOUSE = warehouse_name
Entrepôt à utiliser si un conteneur de service se connecte à Snowflake pour exécuter une requête, mais ne spécifie pas explicitement un entrepôt à utiliser.
La valeur par défaut est : aucun.
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
Spécifie le nom de la balise et la valeur de la chaîne de la balise.
La valeur de la balise est toujours une chaîne de caractères et le nombre maximum de caractères pour la valeur de la balise est 256.
Pour plus d’informations sur la spécification des balises dans une instruction, voir Quotas de balises pour les objets et les colonnes.
COMMENT = 'string_literal'
Spécifie un commentaire pour le service.
Par défaut : aucune valeur
Exigences en matière de contrôle d’accès¶
Un rôle utilisé pour exécuter cette commande SQL doit avoir les privilèges suivants définis au minimum ainsi :
Privilège |
Objet |
Remarques |
---|---|---|
CREATE SERVICE |
Schéma |
|
USAGE |
Pool de calcul |
|
READ |
Zone de préparation |
C’est à ce stade que la spécification est stockée. |
READ |
Référentiel d’images |
Référentiel d’images référencées par la spécification. |
BIND SERVICE ENDPOINT |
Compte |
Un rôle doit disposer de ce privilège pour créer un service avec des points de terminaison publics. Cela permet au service d’accéder aux points de terminaison publics. Si le rôle de propriétaire du service perd ce privilège, les points de terminaison publics ne seront pas accessibles. |
Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.
Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.
Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.
Notes sur l’utilisation¶
Lorsque vous appelez CREATE SERVICE, les paramètres doivent être fournis dans l’ordre suivant : spécifiez le pool de calcul, suivi de la spécification du service (soit le fichier de spécification du fournisseur dans la zone de préparation, soit la spécification en ligne), puis d’autres propriétés.
Concernant les métadonnées :
Attention
Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.
Exemples¶
Créez un service avec deux instances de service en cours d’exécution :
CREATE SERVICE echo_service
IN COMPUTE POOL tutorial_compute_pool
FROM @tutorial_stage
SPECIFICATION_FILE='echo_spec.yaml'
MIN_INSTANCES=2
MAX_INSTANCES=2