CREATE SERVICE¶
現在のスキーマに新しい Snowpark Container Servicesサービス を作成します。その名前のサービスがすでに存在する場合は、 DROP SERVICE コマンドを使用して以前に作成したサービスを削除します。
サービスの複数のインスタンスを実行することができます。各サービスインスタンスは、コンピュートプール内のノード上で一緒に実行される、サービス仕様ファイルで定義されたコンテナの集まりです。サービスの複数のインスタンスを実行する場合、ロードバランサーが受信トラフィックを管理します。
コマンドパラメーターは特定の順序で指定する必要があることに注意してください。詳細については、使用上の注意セクションをご参照ください。
- こちらもご参照ください。
ALTER SERVICE、 DESCRIBE SERVICE、 DROP SERVICE、 SHOW SERVICES
構文¶
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はサービス関数が呼び出されたとき、またはリクエストを受信したとき(ingress)に、一時停止したサービスを再開します。
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 が3に設定されているとします。その後、Snowflakeは、少なくとも3つのインスタンスが利用可能になるまで、サービスを READY だと考えません。サービスが準備できていない間は、Snowflakeはそのサービスへのアクセスをブロックします。つまり、準備完了が確認されるまで、関連するサービス機能やイングレス・リクエストは拒否されます。
場合によっては、利用可能なインスタンスが指定した最小数に満たない場合でも、Snowflakeにサービスの準備ができたと判断させたい(受信リクエストを転送させたい)場合があります。これは、 MIN_READY_INSTANCES プロパティを設定することで実現できます。
別のシナリオを考えてみましょう。メンテナンス中またはサービスのローリングアップグレード中に、Snowflakeは1つまたは複数のサービスインスタンスを終了する可能性があります。このため、利用可能なインスタンス数が指定された MIN_INSTANCES より少なくなり、サービスが READY の状態にならない可能性があります。このような場合、 MIN_READY_INSTANCES を MIN_INSTANCES よりも小さい値に設定し、サービスがリクエストを受け入れ続けられるようにしたいとします。
デフォルト: MIN_INSTANCES プロパティの値。
MAX_INSTANCES = num
実行するサービスインスタンスの最大数を指定します。
デフォルト: MIN_INSTANCES プロパティの値。
QUERY_WAREHOUSE = warehouse_name
サービスコンテナがクエリを実行するためにSnowflakeに接続するけれども、使用するウェアハウスを明示的に指定しない場合に使用するウェアハウス。
デフォルト: なし。
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。
COMMENT = 'string_literal'
サービスのコメントを指定します。
デフォルト: 値なし
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE SERVICE |
スキーマ |
|
USAGE |
コンピューティングプール |
|
READ |
ステージ |
これは仕様が保管されるステージです。 |
READ |
イメージリポジトリ |
仕様によって参照されるイメージのリポジトリ。 |
BIND SERVICE ENDPOINT |
アカウント |
パブリックエンドポイントを使用してサービスを作成するには、ロールにこの権限が必要です。これにより、パブリックエンドポイントを介したサービスへのアクセスが可能になります。サービスの所有者ロールがこの権限を失うと、パブリックエンドポイントにアクセスできなくなります。 |
スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
CREATE SERVICE の呼び出し時には、パラメーターを次の順序で提供する必要があります。コンピューティングプール、次にサービス仕様(ステージ上のプロバイダー仕様ファイルまたはインライン仕様のいずれか)、そしてその他のプロパティの順に指定します。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
実行している2つのサービスインスタンスが含まれるサービスを作成します。
CREATE SERVICE echo_service
IN COMPUTE POOL tutorial_compute_pool
FROM @tutorial_stage
SPECIFICATION_FILE='echo_spec.yaml'
MIN_INSTANCES=2
MAX_INSTANCES=2