Configurer les conteneurs et les services gérés par une application

Cette rubrique décrit comment configurer les conteneurs et les services pour un Snowflake Native App with Snowpark Container Services.

Créer un référentiel d’images

Pour gérer les conteneurs avec une Snowflake Native App, les fournisseurs doivent créer un référentiel d’images dans le compte du fournisseur pour stocker les images requises par l’appli.

Le référentiel d’images doit exister dans une base de données et un schéma. L’exemple suivant montre comment créer un référentiel d’images à l’aide de la commande CREATE IMAGE REPOSITORY.

CREATE DATABASE provider_db;
CREATE SCHEMA provider_schema;
CREATE IMAGE REPOSITORY provider_repo;
Copy

Note

Snowflake recommande aux fournisseurs de créer le référentiel d’images en dehors du paquet d’application.

Si le paquet d’application est joint à une annonce et que l’annonce est configurée pour utiliser l”Exécution automatique inter-Cloud, un référentiel d’images dans le paquet d’application serait répliqué et des coûts supplémentaires seraient encourus.

Les images téléchargées dans ce référentiel sont accessibles au paquet d’application lors de l’ajout d’une définition de version. L’application ne peut accéder qu’aux images de ce référentiel qui sont spécifiées dans le fichier manifeste du paquet d’application.

Les considérations suivantes s’appliquent aux référentiels d’images dans le contexte d’une application avec des conteneurs :

  • Les référentiels d’images externes ne sont pas pris en charge. Les référentiels d’images qui sont en dehors de Snowflake ne peuvent être référencés par aucun service à l’intérieur du conteneur. Ceci s’applique aux services qui existent dans ou en dehors de l’application.

  • Les fournisseurs ne peuvent pas partager directement un référentiel d’images avec une appli. Par exemple, les fournisseurs ne peuvent pas utiliser la commande GRANT TO SHARE IN APPLICATION PACKAGE.

  • Les fournisseurs peuvent stocker plusieurs images de conteneurs dans un référentiel d’images. Toutefois, les images de conteneurs qui ne sont pas explicitement listées dans le manifeste ne sont pas accessibles par l’appli dans le compte du consommateur.

  • Lorsqu’un fournisseur ajoute une définition de version à un paquet d’application, les images de conteneurs incluses dans cette version ne peuvent pas être modifiées. Les images de cette version sont immuables et persistent tout au long du cycle de vie de la version. Pour modifier les conteneurs d’une application, les fournisseurs doivent utiliser une nouvelle version.

Télécharger des images de conteneurs dans le référentiel d’images

Après avoir créé un référentiel d’images, les fournisseurs utilisent les commandes Docker pour télécharger les images de conteneurs requises par l’appli dans le référentiel d’images. Les commandes spécifiques requises dépendent de l’environnement du fournisseur. Cependant, le workflow général est le suivant :

  1. docker login

  2. docker build

  3. docker tag

  4. docker push

Vous trouverez ci-dessous un exemple typique d’utilisation de ces commandes :

$ docker login org-provider-account.registry.snowflakecomputing.com
$ docker build --rm --platform linux/amd64 -t service:1.0 .
$ docker tag service:1.0 org-provider-account.registry.snowflakecomputing.com/provider_db/provider_schema/provider_repo/service:1.0
$ docker push org-provider-account.registry.snowflakecomputing.comprovider_db/provider_schema/provider_repo/service:1.0
Copy

Créer le fichier de spécification de service

La spécification de service est un fichier YAML que Snowpark Container Services utilise pour configurer et exécuter un service. Voir Référence Spécification de service pour des informations générales sur la syntaxe de ce fichier.

L’exemple suivant montre les champs du fichier de spécification de service qui sont requis par une application avec des conteneurs.

spec:
  containers:
  - image: /provider_db/provider_schema/provider_repo/server:prod
    name: server
    ...
  - image: /provider_db/provider_schema/provider_repo/web:1.0
    name: web
    ...
  endpoints:
  - name: invoke
    port: 8000
  - name: ui
    port: 5000
    public: true
Copy

Note

Le fichier de spécification de service référence les images des conteneurs en utilisant les noms de la base de données, du schéma et du référentiel d’images d’origine. Lors de l’installation ou de la mise à niveau, un service est créé à partir du fichier de spécification de service…

Les URLs de registre explicites, par exemple org-provider.registry.snowflakecomputing.com/db/schema/repo/img:123 ne sont pas prises en charge et entraînent une erreur. L’emplacement de l’image doit toujours être un nom complet dans le compte du fournisseur.

Utiliser un modèle de spécification

Les fournisseurs peuvent également utiliser un modèle de spécification dans les fichiers de spécifications de service comme indiqué dans l’exemple suivant :

spec:
  containers:
  - image: /provider_db/provider_schema/provider_repo/server:prod
    name: {{ container_name }}
  endpoints:
  - name: invoke
    port: {{ invoke_port_value }}
  - name: ui
    port: 5000
    public: true
Copy