Ajouter un pool de calcul à une application avec des conteneurs

Cette rubrique décrit comment utiliser les pools de calcul dans un Snowflake Native Apps with Snowpark Container Services.

À propos des pools de calcul dans les applications avec conteneurs

Un pool de calcul est un ensemble d’un ou plusieurs nœuds de machines virtuelles (VM) sur lesquels Snowflake exécute Snowpark Container Services. Les applications avec des conteneurs utilisent un pool de calcul dans le compte du consommateur pour gérer les images de conteneurs requises par l’appli.

Une appli peut créer plusieurs pools de calcul et chaque pool de calcul est exclusif à l’application. Les pools de calcul utilisés par l’appli ne peuvent pas être utilisés à d’autres fins.

Les conteneurs d’une appli peuvent accéder directement les uns aux autres, même s’ils se trouvent dans des pools de calcul différents.

Cependant, l’utilisation de différents pools de calcul permet aux fournisseurs de séparer les types de services. Par exemple, un fournisseur peut séparer ses services frontaux des services dorsaux.

Les pools de calcul sont des objets de niveau compte, ce qui signifie que le nom de chaque pool de calcul doit être unique au sein du compte du consommateur.

Meilleures pratiques pour l’utilisation de pools de calcul dans une application avec des conteneurs

Les fournisseurs doivent tenir compte des meilleures pratiques suivantes lorsqu’ils créent des pools de calcul dans le compte du consommateur :

  • Les pools de calcul ont une incidence sur les coûts. Il est important de définir des valeurs pour les propriétés min_nodes, max_nodes, et instance_family afin de consommer la quantité correcte de ressources. Les fournisseurs doivent également paramétrer la propriété AUTO_SUSPEND_SECS pour suspendre automatiquement les pools de calcul inactifs.

    Pour plus d’informations, voir CREATE COMPUTE POOL.

  • Les pools de calcul sont des objets de niveau compte, à ce titre leurs noms de pool doivent être uniques au sein d’un compte consommateur. Pensez à utiliser le nom de l’application comme préfixe du nom du pool de calcul pour garantir l’unicité.

  • Lorsque vous ajoutez un pool de calcul à une application avec conteneurs installée sur différents fournisseurs de services Cloud, le code utilisé pour créer le pool de calcul doit prendre en compte les différences de familles d’instances entre les différents fournisseurs de services Cloud. Par exemple, la famille d’instances HIGHMEM_X64_L a une configuration différente pour chaque fournisseur de services Cloud.

    Voir CREATE COMPUTE POOL pour plus d’informations sur les familles d’instances disponibles. Consultez Choisir des familles d’instances différentes pour chaque fournisseur pour voir un exemple de paramétrage de la famille d’instances pour différents fournisseurs de services Cloud.

  • Définissez la propriété uses_gpu sur TRUE si l’application avec conteneurs utilise une GPU comme famille d’instance du pool de calcul. Pour plus d’informations, voir Définir la propriété uses_gpu dans le fichier manifeste.

Créer un pool de calcul pour une appli

Il y a deux façons de créer un pool de calcul pour une appli avec des conteneurs :

  • L’appli crée les pools de calcul nécessaires lors de l’installation. Pour ce faire, le consommateur doit accorder à l’application le privilège CREATE COMPUTE POOL sur le pool de calcul. Un fournisseur peut configurer l’appli pour qu’elle demande ces privilèges à l’aide de Snowsight.

    Pour plus d’informations, voir Configurez une application pour qu’elle demande le privilège CREATE COMPUTE POOL.

  • Le consommateur crée manuellement les pools de calcul nécessaires à l’application. Le consommateur doit exécuter le programme CREATE COMPUTE POOL pour créer le pool de calcul, puis accorder manuellement le privilège CREATE COMPUTE POOL sur le pool de calcul à l’application.

Définir la propriété uses_gpu dans le fichier manifeste

Si une application avec des conteneurs spécifie une GPU comme famille d’instance pour le Compute Pool, les fournisseurs doivent définir l’indicateur uses_gpu sur true dans le manifeste. L’exemple suivant montre comment cet ensemble de paramètres peut être défini dans le bloc artifacts :

artifacts:
  readme: readme.md
  setup_script: scripts/setup.sql
  container_services:
    uses_gpu: true|false
    images:
    - /provider_db/provider_schema/provider_repo/server:prod
    - /provider_db/provider_schema/provider_repo/web:1.0
Copy

L’analyse de sécurité automatisée utilise ce cadre d’analyse de sécurité des indicateurs pour valider le comportement au cours du processus d’analyse de la version de l’application.

Prudence

Pour publier une application avec des conteneurs sur le Snowflake Marketplace, l’application doit créer les pools de calcul requis lors de l’installation. Consultez Exigences appliquées pour connaître les exigences en matière de publication sur le Snowflake Marketplace.

Configurez une application pour qu’elle demande le privilège CREATE COMPUTE POOL

Les fournisseurs peuvent configurer une application pour qu’elle demande le privilège CREATE COMPUTE POOL. Ils peuvent également créer le pool de calcul à partir du script de configuration lors de l’installation ou de la mise à niveau de l’application.

Note

Une appli peut créer un maximum de cinq pools de calcul dans un compte de consommateur. Contactez le support Snowflake si votre application a besoin de créer des pools de calcul supplémentaires.

Demander le privilège CREATE COMPUTE POOL

Une application peut demander les privilèges CREATE COMPUTE POOL à un consommateur. Ce privilège permet à l’appli de créer un pool de calcul dans le compte du consommateur. Voir Demander des privilèges globaux aux consommateurs pour des informations générales sur la demande de privilèges globaux au consommateur.

Pour demander le privilège CREATE COMPUTE POOL à un consommateur, ajoutez le privilège CREATE COMPUTE POOL au fichier manifest.yml, comme indiqué dans l’exemple suivant :

...
privileges:
 - CREATE COMPUTE POOL
   description: "Enable application to create one to five compute pools"
 ...
Copy

Voir Créer le fichier manifeste pour une application avec des conteneurs pour plus d’informations sur la création du fichier manifest.yml pour une application avec des conteneurs.

Note

Le comportement de la demande du privilège CREATE COMPUTE POOL au sein d’une application conteneurisée est différent de celui des autres demandes de privilèges. Lorsque vous ajoutez ce privilège au fichier manifest.yml, Snowsight affiche une interface qui permet à un consommateur d’accorder les privilèges requis.

Ajouter la commande CREATE COMPUTE POOL au script d’installation

Pour créer un pool de calcul dans le compte du consommateur, ajoutez la commande CREATE COMPUTE POOL au script d’installation de l’application.

L’exemple suivant montre comment créer un pool de calcul dans une procédure stockée du script d’installation :

CREATE COMPUTE POOL IF NOT EXISTS app_compute_pool
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = standard_1
  AUTO_RESUME = true;
Copy

Note

Lors de la création d’un pool de calcul dans l’appli, les fournisseurs doivent vérifier que le fournisseur a accordé le privilège CREATE COMPUTE POOL avant de créer le pool de calcul.

Les pools de calcul créés par une application appartiennent exclusivement à cette application. Ils ne peuvent pas être utilisés par d’autres applications ou par le consommateur directement.

En général, les utilisateurs du compte consommateur ne peuvent voir les pools de calcul créés par l’appli que dans les situations suivantes :

  • L’utilisateur a reçu le privilège MANAGE GRANTS.

  • L’appli accorde l’accès au pool de calcul à l’aide de rôles d’application.

Les développeurs d’applications peuvent accorder aux utilisateurs ayant un rôle actif des privilèges spécifiques sur les applications appartenant aux pools de calcul. En outre, les administrateurs ayant le rôle ACCOUNTADMIN peuvent s’octroyer les privilèges nécessaires pour contrôler les applications appartenant aux pools de calcul. Pour plus d’informations sur les exigences en matière d’accès aux pools de calcul, voir ALTER COMPUTE POOL.

Préfixer le pool de calcul dans le script d’installation

Les pools de calcul étant des objets de niveau compte, les noms de pools de calcul doivent être uniques au sein du compte du consommateur. L’exemple suivant montre comment utiliser le nom de l’application comme préfixe du nom du pool de calcul :

LET POOL_NAME := (select current_database()) || '_app_pool';
CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
  MIN_NODES = 1
  MAX_NODES = 1
  INSTANCE_FAMILY = STANDARD_2;
Copy

Choisir des familles d’instances différentes pour chaque fournisseur

Lors de la création d’un pool de calcul pour une application publiée sur plusieurs fournisseurs de services Cloud, le code qui crée le script de configuration doit être écrit pour tenir compte des différences de configuration des familles d’instances.

L’exemple suivant montre comment écrire une procédure stockée pour créer un pool de calcul en fonction du fournisseur de services Cloud où l’application est installée :

 CREATE OR REPLACE PROCEDURE public.create_cp()
 RETURNS VARCHAR
 LANGUAGE SQL
 EXECUTE AS OWNER
 AS $$
  BEGIN
      LET POOL_NAME := (select current_database()) || '_app_pool';
      LET INSTANCE_FAMILY := IFF( CONTAINS(current_region(), 'AZURE') , 'GPU_NV_XS' , 'GPU_NV_S' );
      CREATE COMPUTE POOL IF NOT EXISTS identifier(:pool_name)
          MIN_NODES = 1
          MAX_NODES = 1
          INSTANCE_FAMILY = :instance_family;
      RETURN 'Compute Pool Created';
  END;
$$;
Copy
OSZAR »