コンテナを使用したアプリにコンピューティングプールを追加する

このトピックでは、 Snowflake Native Apps with Snowpark Container Services でコンピューティングプールを使用する方法について説明します。

コンテナを含むアプリのコンピューティングプールについて

コンピュートプール は、SnowflakeがSnowparkコンテナーサービスを実行する1つ以上の仮想マシン(VM)ノードの集合です。コンテナーを使用するアプリは、コンシューマーアカウントのコンピュートプールを使用して、アプリが必要とするコンテナーイメージを管理します。

アプリは複数のコンピューティングプールを作成でき、各コンピューティングプールはアプリ専用です。アプリが使用するコンピューティングプールは他の目的には使用できません。

アプリ内のコンテナは、異なるコンピューティングプール内にある場合でも、相互に直接アクセスできます。

ただし、異なるコンピューティングプールを使用すると、プロバイダーはサービスの種類を分離できます。たとえば、プロバイダーはフロントエンドサービスとバックエンドサービスを分離できます。

コンピューティングプールはアカウントレベルのオブジェクトであるため、各コンピューティングプールの名前はコンシューマーアカウント内で一意である必要があります。

コンテナを使用したアプリでコンピューティングプールを使用するためのベストプラクティス

プロバイダーは、コンシューマーアカウントにコンピュートプールを作成する際に、以下のベストプラクティスを考慮する必要があります。

  • コンピューティングプールにはコストがかかります。適切な量のリソースを消費するには、 min_nodesmax_nodesinstance_family プロパティの値を設定することが重要です。また、プロバイダーは、 AUTO_SUSPEND_SECS プロパティをセットして、非アクティブなコンピュートプールを自動的に一時停止する必要があります。

    詳細については、 CREATE COMPUTE POOL をご参照ください。

  • コンピュートプールはアカウントレベルのオブジェクトであるため、そのプール名はコンシューマーアカウント内で一意でなければなりません。一意性を確保するために、アプリケーション名をコンピュートプール名のプレフィックスとして使用することを考慮してください。

  • 異なるクラウドサービスプロバイダー上にインストールされたコンテナーを持つアプリにコンピュートプールを追加する場合、コンピュートプールを作成するコードは、異なるクラウドサービスプロバイダー間のインスタンスファミリーの違いをアカウントする必要があります。例えば、 HIGHMEM_X64_L インスタンスファミリーは、クラウドサービスプロバイダーごとに構成が異なります。

    可用性インスタンスファミリーの詳細情報については、 CREATE COMPUTE POOL を参照してください。異なるクラウドサービスプロバイダーのインスタンスファミリーをセットする方法の例については、 プロバイダーごとに異なるインスタンスファミリーを選択 を参照してください。

  • コンテナーを使用するアプリが、コンピュートプール のインスタンスファミリーとして GPU を使用する場合にのみ、 uses_gpu プロパティを TRUE にセットします。詳細については、 マニフェストファイルに uses_gpu プロパティをセットします。 をご参照ください。

アプリのコンピューティングプールを作成する

コンテナを使用したアプリのコンピューティングプールを作成するには、次の2つの方法があります。

  • アプリはインストール中に必要なコンピューティングプールを作成します。これには、コンシューマーがコンピューティングプールの CREATE COMPUTE POOL 権限をアプリに付与する必要があります。プロバイダーは、 Snowsight を使用してこれらの権限を要求するようにアプリを構成できます。

    詳細については、 CREATE COMPUTE POOL 権限を要求するようにアプリを構成する をご参照ください。

  • コンシューマーは、アプリに必要なコンピューティングプールを手動で作成します。コンシューマーは CREATE COMPUTE POOL を実行してコンピューティングプールを作成し、コンピューティングプールに対する CREATE COMPUTE POOL 権限をアプリに手動で付与する必要があります。

マニフェストファイルに uses_gpu プロパティをセットします。

コンテナーを使用するアプリがCompute Poolのインスタンスファミリーとして GPU を指定する場合、プロバイダーはマニフェストで uses_gpu フラグを true にセットする必要があります。次の例は、 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

自動セキュリティスキャンでは、このフラグセキュリティスキャンフレームワークを使用して、アプリバージョンのスキャンプロセス中の動作を検証します。

注意

Snowflake Marketplaceでコンテナー付きアプリを公開するには、アプリのインストール時に必要なコンピュートプールを作成する必要があります。Snowflake Marketplaceの発行要件については、 適用要件 を参照してください。

CREATE COMPUTE POOL 権限を要求するようにアプリを構成する

プロバイダーは、 CREATE COMPUTE POOL 権限を要求するようにアプリを構成できます。アプリをインストールまたはアップグレードするときに、セットアップスクリプトからコンピューティングプールを作成することもできます。

注釈

アプリは、コンシューマーアカウントに最大5つのコンピューティングプールを作成できます。アプリで追加のコンピューティングプールを作成する必要がある場合は、Snowflakeサポートにお問い合わせください。

CREATE COMPUTE POOL 権限をリクエストする

アプリはコンシューマーに CREATE COMPUTE POOL 権限を要求できます。この権限により、アプリはコンシューマーアカウントにコンピューティングプールを作成できます。コンシューマーからグローバル権限を要求する方法に関する一般的な情報については、 コンシューマーからグローバル権限をリクエストする をご参照ください。

コンシューマーに CREATE COMPUTE POOL 権限を要求するには、次の例に示すように、マニフェストファイルに CREATE COMPUTE POOL 権限を追加します。

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

コンテナを使用したアプリのマニフェストファイルの作成については、アプリのマニフェストファイルの作成 をご参照ください。

注釈

コンテナアプリ内の CREATE COMPUTE POOL 権限要求の動作は、他の権限要求とは異なります。この権限をマニフェストファイルに追加すると、Snowsight に、コンシューマーが必要な権限を付与するためのインターフェースが表示されます。

CREATE COMPUTE POOL コマンドをセットアップスクリプトに追加する

コンシューマーアカウントにコンピューティングプールを作成するには、アプリのセットアップスクリプトに CREATE COMPUTE POOL コマンドを追加します。

次の例は、セットアップスクリプトのストアドプロシージャ内にコンピューティングプールを作成する方法を示しています。

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

注釈

アプリ内でコンピューティングプールを作成する場合、プロバイダーはコンピューティングプールを作成する前に、プロバイダーが CREATE COMPUTE POOL 権限を付与していることを確認する必要があります。

アプリが作成するコンピューティングプールは、そのアプリによって独占的に所有されます。他のアプリケーションやコンシューマーが直接使用することはできません。

一般的に、コンシューマーアカウントのユーザーは、次の状況でのみ、アプリによって作成されたコンピューティングプールを表示できます。

  • ユーザーには MANAGE GRANTS 権限が付与されています。

  • アプリは、アプリケーションロールを使用してコンピューティングプールへのアクセスを許可します。

アプリケーション開発者は、コンピュートプールが所有するアプリケーションに対して、アクティブなロールを持つユーザーに特定の権限を許可することができます。さらに、 ACCOUNTADMIN ロールを持つ管理者は、コンピュートプールが所有するアプリケーションを制御するために必要な権限を付与することができます。コンピュートプールのアクセス要件の詳細については、 ALTER COMPUTE POOL を参照してください。

セットアップスクリプト内でコンピューティングプールのプレフィックスを付ける

コンピューティングプールはアカウントレベルのオブジェクトであるため、コンピューティングプールの名前はコンシューマーアカウント内で一意である必要があります。次の例は、アプリケーション名をコンピューティングプール名のプレフィックスとして使用する方法を示しています。

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

プロバイダーごとに異なるインスタンスファミリーを選択

複数のクラウドサービスプロバイダーにまたがって公開されるアプリのコンピュートプールを作成する場合、インスタンスファミリーの構成方法の違いを考慮して、セットアップスクリプトを作成するコードをアカウントに記述する必要があります。

次の例は、アプリをインストールするクラウドサービスプロバイダーに基づいてコンピュートプール を作成するストアドプロシージャの書き方を示しています。

 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