アプリでジョブサービスを作成および管理する¶
このトピックでは、 Snowflake Native App with Snowpark Container Services 内でジョブサービスを作成および管理する方法について説明します。アプリで長時間実行されるサービスを使用する方法については、 アプリでジョブサービスを作成および管理する をご参照ください。
Snowflake Native App with Snowpark Container Services は、Snowpark Container Servicesのジョブサービスを実行できます。
CREATE SERVICE を使用して作成されたサービスは長時間実行されます。アプリは、サービスが不要になったときに明示的にサービスを停止する必要があります。一方、 EXECUTE JOB SERVICE を使用して作成されたジョブサービスは、ストアドプロシージャと同様に、サービスのコードが終了すると終了するサービスです。すべてのコンテナーが終了すると、ジョブは完了です。
ジョブサービスは同期的に実行されます。すべてのコンテナが終了した後、 EXECUTE JOB SERVICE コマンドは完了します。
アプリでジョブサービスを実行する¶
アプリでジョブサービスを実行するには、セットアップスクリプトに EXECUTE JOB SERVICE コマンドを追加します。
次の例は、 Snowflake Native App with Snowpark Container Services のコンテキストでジョブサービスを実行する方法を示しています。
EXECUTE JOB SERVICE
IN COMPUTE POOL consumer_compute_pool
FROM SPECIFICATION_FILE = 'job_service.yml'
NAME = 'services_schema.job_service'
GRANT MONITOR ON SERVICE services.job_service TO APPLICATION ROLE app_public;
注釈
コマンドパラメーターは、この例に示されている順序で指定する必要があることに注意してください。
セットアップスクリプトから呼び出されると、 EXECUTE JOB SERVICE コマンドはコンシューマーアカウントのコンピューティングプールにジョブを作成します。
コンシューマーがコンピューティングプールを手動で作成する場合、このコマンドが成功する前に、コンピューティングプールに対する USAGE 権限をアプリに付与する必要があります。したがって、プロバイダーは、 EXECUTE JOB SERVICE を実行する前に、正しい権限が付与されているかどうかをテストするロジックをストアドプロシージャに含める必要があります。
FROM SPECIFICATION_FILE =
句は、ステージ上のサービス仕様ファイルへの相対パスを指定します。詳細については、 サービス仕様ファイルを作成する をご参照ください。
NAME =
句は、ジョブサービスの識別子を指定します。このジョブサービスの名前は、それが配置されているスキーマ内で一意である必要があります。
注釈
ジョブサービスはバージョンスキーマ内では実行できません。
NAME =
句では、アプリケーション内のジョブのスキーマと名前を使用する必要があります。 services_schema.job_service
スキーマ名が指定されていない場合、ジョブサービスはジョブサービスを実行するストアドプロシージャまたは関数のスキーマ内に作成されます。
アプリでジョブサービスを監視する¶
アプリ内のジョブサービスのステータスを監視するには、次の例に示すように SYSTEM$GET_SERVICE_STATUS --- 非推奨 コマンドを使用します。
CALL SYSTEM$GET_SERVICE_STATUS('schema.job_name')
このシステム関数は、アプリ内の指定されたジョブサービスに関する情報を含む JSON オブジェクトを返します。プロバイダーは、アプリ内からこのシステム関数を呼び出して、サービスが開始されたか失敗したかを判断できます。
コンシューマーは、このシステム関数を呼び出して、サービスのステータスを判断することもできます。これには、プロバイダーがサービスに対する MONITOR 権限をアプリケーションロールに付与する必要があります。詳細については、 アプリでジョブサービスを実行する をご参照ください。
ローカルコンテナーログへのアクセス¶
アプリ内のジョブサービスのシステムログを取得するには、次の例に示すように SYSTEM$GET_SERVICE_LOGS システム関数を使用します。
CALL SYSTEM$GET_SERVICE_LOGS('schema.job_name', 'instance_id', 'container_name'[, 10])
プロバイダーはアプリ内からこのシステム関数を呼び出すことができます。このコンテキストでは、プロバイダーは完全修飾ジョブ名の一部として app_name
を指定する必要はありません。
コンシューマーもこのシステムコマンドを実行できます。これには、プロバイダーがサービスに対する MONITOR 権限をアプリケーションロールに付与する必要があります。詳細については、 アプリでジョブサービスを実行する をご参照ください。