アプリをローカルにインストールしてテストする

このトピックでは、プロバイダーがローカルで Snowflake Native App を作成し、テストする方法について説明します。

アプリの作成とテストについて

Snowflake Native App Framework では、プロバイダーはアプリケーションパッケージと同じアカウントでアプリを作成できるため、コンシューマーに公開する前にアプリをテストできます。

プロバイダーは、プロバイダーとコンシューマーのアカウントを交互に切り替えることなく、1つのアカウントでアプリをテストすることもできます。

アプリの作成とテストに必要な権限

アプリケーションパッケージからローカルにアプリケーションを作成するには、以下の権限がロールに付与されている必要があります。

  • 使用するロールに付与されたアカウントレベルの CREATE APPLICATION 権限。

  • アプリケーションパッケージに対するオブジェクトレベルの付与された INSTALL 権限。

以下の例は、 GRANT <権限> ... TO ROLE コマンドを使用して、アカウントにこれらの権限を付与する方法を示しています。

GRANT CREATE APPLICATION ON ACCOUNT TO ROLE provider_role;
GRANT INSTALL ON APPLICATION PACKAGE hello_snowflake_package
  TO ROLE provider_role;
Copy

DEVELOP 権限を使用する

既定では、アプリケーションパッケージを作成するために使用されるロールは、アプリケーションパッケージに基づいてアプリケーションを作成するために CREATE APPLICATION コマンドを使用する権限を持っています。

しかし、開発環境によっては、他のロールを持つユーザーにアプリケーションパッケージの作成とテストを許可することが必要になる場合があります。そうするには、ロールにアプリケーションパッケージに対するオブジェクトレベルの DEVELOP 権限を付与します。

DEVELOP 権限は、アプリケーションパッケージに基づいてアプリケーションを作成し、テストするために必要な権限を付与します。このアクセス権限により、ユーザーはアクセス権限が付与されたアプリケーションパッケージを使用して、以下のタスクを実行できます。

ロールに DEVELOP 権限を付与するには、次の例に示すように GRANT <権限> ... TO ROLE コマンドを使用します。

GRANT DEVELOP ON APPLICATION PACKAGE hello_snowflake_package TO ROLE other_dev_role;
Copy

注釈

オブジェクトレベルの DEVELOP 権限は、単一のアプリケーションパッケージに特有のものです。DEVELOP 権限を割り当てたいアプリケーションパッケージごとに GRANT <権限> ... TO ROLE を実行する必要があります。

アプリの作成とテストのワークフロー

Snowflake Native App Framework は、アプリケーションパッケージからアプリケーションを作成するさまざまな方法を提供します。これにより、コンシューマーに公開する前に Snowflake Native App をテストすることができます。どの方法を使うかは、アプリのどの部分をテストしたいかによって決まります。

以下のステップは、アプリをテストするための典型的なワークフローの概要です。

  1. アプリを作成します。

    以下に基づいてローカルにアプリを作成できます。

    • ステージングされたファイル

      これにより、セットアップスクリプトやアプリケーションコードファイルの新しいバージョンをすばやくテストできます。詳細については、 ステージングされたファイルを使ったアプリの作成 をご参照ください。

    • アプリケーションパッケージで定義されたバージョンまたはパッチ

      アプリケーションパッケージのバージョンやパッチを定義したら、そのバージョンに基づいたアプリケーションを作成してテストすることができます。詳細については、 バージョンまたはパッチからアプリを作成 をご参照ください。

  2. アプリのアップグレード

    アプリが正常に動作することを確認した後、2つの方法のいずれかで新しいバージョンにアップグレードできます。

    • ステージングされたファイルから

    • アプリケーションパッケージで定義されたバージョンまたはパッチから

  3. リリースディレクティブに基づいてアプリを作成します。

    特定のファイルやバージョン、パッチを使用してアプリケーションをテストした後、アプリケーションパッケージ用に定義されたリリースディレクティブに基づいてアプリケーションを作成することができます。リリースディレクティブを使うと、アプリのステージやバージョンを指定する必要はありません。

    詳細については、 ステージングされたファイルを使ったアプリの作成 をご参照ください。

  4. リストからアプリをインストールします。

    アプリケーションパッケージとアプリがローカルアカウントで正しく動作することをテストした後、 Snowsight を使ってアプリケーションパッケージをリストに追加し、インストールをテストすることができます。

    詳細については、 ステージングされたファイルを使ったアプリの作成 をご参照ください。

アプリの作成

顧客と共有する前に、アカウントに直接アプリをインストールして、その関数と権限をテストすることができます。 CREATE APPLICATION コマンドは、アプリを作成するためのさまざまな構文をサポートしています。

注釈

以下のセクションでは、アプリケーションパッケージ、必要なマニフェストファイル、およびセットアップスクリプトが作成されていることを前提としています。

ステージングされたファイルを使ったアプリの作成

名前付きステージにアップロードされたマニフェストファイルとセットアップスクリプトを使用して、アプリを作成できます。これにより、アプリケーションパッケージに新しいバージョンを追加することなく、これらのファイルの変更をテストすることができます。

次の例に示すように、 CREATE APPLICATION コマンドを使用して、ステージングされたファイルを使用してアプリを作成します。

CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package
  USING '@hello_snowflake_code.core.hello_snowflake_stage';
Copy

バージョンまたはパッチからアプリを作成

アプリケーションパッケージでバージョンやパッチを定義した後、そのバージョンやパッチに基づいてアプリケーションを作成することができます。

特定のバージョンからアプリを作成するには、次の例のように CREATE APPLICATION コマンドを使用します。

CREATE APPLICATION hello_snowflake_app
  FROM APPLICATION PACKAGE hello_snowflake_package
  USING VERSION v1_0;
Copy

特定のパッチからアプリを作成するには、次の例のように CREATE APPLICATION コマンドを使います。

CREATE APPLICATION hello_snowflake_app
  FROM APPLICATION PACKAGE hello_snowflake_package
  USING VERSION v1_0 PATCH 2;
Copy

リリースディレクティブに基づいたアプリの作成

アプリケーションパッケージでリリースディレクティブ (カスタムまたはデフォルト) を指定すると、そのリリースディレクティブに基づいてアプリケーションを作成することができます。

リリースディレクティブに基づいてアプリを作成するには、次の例のように CREATE APPLICATION コマンドを使用します。

CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package;
Copy

ステージを使用したアプリのアップグレード

名前付きステージ上のファイルを使用してアプリをアップグレードするには、次の例に示すように、 ALTER APPLICATION コマンドを使用します。

ALTER APPLICATION HelloSnowflake
  UPGRADE USING @CODEDATABASE.CODESCHEMA.AppCodeStage;
Copy

バージョンまたはパッチからのアプリのアップグレード

特定のバージョンやパッチを使用して作成されたアプリをアップグレードするには、次の例に示すように ALTER APPLICATION コマンドを使用します。

ALTER APPLICATION HelloSnowflake
 UPGRADE USING VERSION "v1_1";
Copy

アプリをアクティブコンテキストにセット

セッションのアクティブコンテキストとしてアプリをセットするには、次の例に示すように、 USE APPLICATION コマンドを実行します。

USE APPlICATION hello_snowflake_app;
Copy

注釈

このコマンドを実行するには、 USAGE 権限がアプリであなたのロールに付与されている必要があります。

アカウントでアプリを表示

アカウントで利用可能なアプリのリストを表示するには、次の例に示すように、 SHOW APPLICATIONS コマンドを使用します。

SHOW APPLICATIONS;
Copy

アプリの情報表示

アプリの詳細を表示するには、次の例に示すように、 DESCRIBE APPLICATION コマンドを実行します。

DESC APPLICATION hello_snowflake_app;
Copy

開発モード では、このコマンドはコンシューマーのアプリケーションロールで許可されているスキーマを表示します。

デバッグモード では、このコマンドはアプリケーションパッケージ内のすべてのスキーマを表示します。

開発モード、デバッグモード、セッションデバッグモードを使用してアプリをテストします。

Snowflake Native App Framework では、プロバイダーは以下のモードを使ってアプリを作成し、その関数をテストすることができます。

開発モード

プロバイダーはコンシューマーの視点からアプリをテストすることができます。つまり、プロバイダーは、コンシューマーに権限付与されたオブジェクトにしかアクセスできません。

デバッグモード

プロバイダーはアプリ内のすべてのオブジェクトにアクセスできます。デバッグモードでは、アプリの状態を変更するときにセッションの主ロールが使用されます。

セッションデバッグモード

プロバイダーは、アプリまたはセットアップスクリプトに付与された権限のいずれかを使用して、アプリ内のオブジェクトにアクセスできます。

開発モードについて

バージョンの指定 または アプリケーションファイルを名前付きステージ の指定をして、アプリケーションパッケージからローカルにアプリを作成する場合、アプリは開発モードであるとみなされます。

開発モードを使用して、1つのアカウント内でアプリのテストとトラブルシューティングを行います。開発モードでは、アプリケーションパッケージの特定のバージョンに基づいてアプリケーションを作成し、テストすることができます。ステージングされたアプリケーションファイルを使ってアプリケーションを作成し、テストすることもできます。これにより、セットアップスクリプトやアプリケーションロジックの変更をすばやくテストできます。

開発モードは、コンシューマーが表示できないアプリ内のすべてのオブジェクトを表示し、テストするために使用できる追加の デバッグモード を提供します。

例えば開発モードでは、アプリ内のオブジェクトに対して SHOW や DESC コマンドを実行すると、コンシューマーに表示権限が与えられているオブジェクトのみが表示されます。しかし、 DEBUG モードでは、アプリ内のすべてのオブジェクトを見ることができます。

デバッグモードについて

デバッグモードでは、アプリ内のすべてのオブジェクトを表示および変更できます。コンシューマーには表示されないオブジェクト、たとえばデータベースロールに付与されていないオブジェクトや共有コンテンツオブジェクトは、このモードでは表示されます。

注釈

デバッグモードでテーブルなどのオブジェクトを作成すると、そのオブジェクトはアプリと同じ所有権を持ちません。アプリのテスト中に新しいオブジェクトを作成する必要がある場合は、 セッションデバッグモード を使用してください。

デバッグモードでアプリをテストするには、以下のことが必要です。

  • アプリは開発モードで作成する必要があります。つまり、ステージ上の特定のバージョンまたはファイルに基づいている必要があります。

  • アプリのデバッグモードを明示的に有効にする必要があります。

注釈

デバッグモードのオン/オフは、アプリケーションパッケージを含む同じアカウント内で開発モードで作成されたアプリケーションに対してのみ切り替えることができます。

アプリのデバッグモードを有効にするには、次の例に示すように ALTER APPLICATION コマンドを使用します。

ALTER APPLICATION hello_snowflake_app SET DEBUG_MODE = TRUE;
Copy

このコマンドは、 hello_snowflake_app というアプリのデバッグモードをオンにします。同様に、デバッグ・モードをオフにするには、次の例に示すように同じコマンドを使用します。

ALTER APPLICATION hello_snowflake_app SET DEBUG_MODE = FALSE;
Copy

このコマンドは、 hello_snowflake_app というアプリのデバッグモードをオフにします。

注釈

このコマンドを実行するには、アプリに OWNERSHIP 権限が必要です。また、アプリケーションパッケージに対する DEVELOP 権限も必要です。

さらに、アプリケーションは開発モードで、アプリケーションパッケージと同じアカウントで作成する必要があります。

セッションデバッグモード

セッションデバッグモードでは、プロバイダーはコンシューマーアカウントにインストールした際のアプリと同じ権限を使用して、アプリ内のすべてのオブジェクトを表示および変更し、ステートメントを実行することができます。例えば、アプリケーション・ロールに付与されていないオブジェクトなど、コンシューマーには表示されないオブジェクトも、セッション・デバッグ・モードでは表示されます。

デバッグ・モードとは異なり、セッション・デバッグ・モードは、セキュリティ・リスクを軽減するために、現在のセッションにのみ適用されます。 新しいセッションを開始するたびに、アプリのセッションデバッグモード を有効にする必要があります。セッションデバッグモードは、デバッグモードとは異なり、アプリやセットアップスクリプトと同じ権限でアプリをテストすることができます。これらの権限を使用するには、セッション・デバッグ・モードを有効にするときに、以下のいずれかを指定します。詳細については、 アプリのセッションデバッグモードの有効化 をご参照ください。

  • AS_APPLICATION: すべてのステートメントは、アプリがコンシューマーアカウントで作成されたときと同じ権限を使用して実行されます。

  • AS_SETUP_SCRIPT: すべてのステートメントは、アプリの作成またはアップグレード時にコンシューマーアカウントで実行されるセットアップスクリプトと同じ権限を使用して実行されます。

プロバイダーがセッション・デバッグ・モードを使用してテーブルなどのオブジェクトを作成する場合、オブジェクトはアプリと同じ権限で作成されます。

セッションデバッグモードを使用するために必要な権限

セッション・デバッグ・モードを使用してアプリのオブジェクトを表示するには、以下の要件があります。

  • アプリは、 開発モード で作成する必要があります。このモードでは、特定のバージョンに基づいてアプリを作成するか、ステージにあるファイルに基づいてアプリを作成する必要があります。

  • アプリのベースとなるアプリケーションパッケージと同じアカウントである必要があります。

  • アプリの OWNERSHIP 権限が必要です。

  • アプリケーションパッケージには DEVELOP の権限が必要です。

注釈

セッション・デバッグ・モードは、デバッグ・モードがセットされたセッションでのみ使用できます。例えば、ワークシートでデバッグモードに入り、2つ目のワークシートでアプリを開いた場合、2つ目のワークシートのアプリはセッションデバッグモードではありません。

アプリのセッションデバッグモードの有効化

現在のセッションのアプリでセッション・デバッグ・モードを有効にするには、次の例に示すように SYSTEM$BEGIN_DEBUG_APPLICATION システム関数を使用します。

SELECT SYSTEM$BEGIN_DEBUG_APPLICATION(‘hello_snowflake_app’);
Copy

この関数は、 hello_snowflake_app というアプリのセッションデバッグモードを有効にします。

以下の例のように、アプリの実行モードを指定することで、セッション・デバッグを有効にすることもできます。

SYSTEM$BEGIN_DEBUG_APPLICATION( 'hello_snowflake_app', execution_mode ='AS_APPLICATION')
Copy

この関数は、 hello_snowflake_app アプリの実行モードを AS_APPLICATION にセットします。このモードでは、コンシューマーアカウントで作成されたアプリと同じ権限を使用して、すべてのステートメントを実行します。

現在のセッションのアプリのセッションデバッグステータスの表示

現在のセッションのセッション・デバッグ・ステータスを表示するには、次の例に示すように、 SYSTEM$GET_DEBUG_STATUS システム関数を使用します。

SELECT SYSTEM$GET_DEBUG_STATUS();
Copy

アプリのセッションデバッグモードの無効化

現在のセッションでアプリのセッション・デバッグ・モードを無効にするには、次の例に示すように、 SYSTEM$END_DEBUG_APPLICATION システム関数を使用します。

SELECT SYSTEM$END_DEBUG_APPLICATION();
Copy

アプリのテスト時にプロバイダーデータの再編集を無効にします。

アプリ内では、コンシューマーからアプリの実装の詳細を隠すために、クエリプロファイルとクエリ履歴から情報が編集されます。 プロバイダーの知的財産を保護する をご参照ください。

アプリをローカルでテストする場合、クエリ・プロファイルとクエリ履歴からプロバイダー・データの再編集を無効にできます。

注釈

セッションデバッグモードが使用されると、アプリ内のすべてのオブジェクトとデータは、コンシューマー向けに情報が編集されていても、プロバイダーには見えます。例えば、セッションデバッグモードが使用されている場合、 SHOW APPLICATIONSDESCRIBE APPLICATION コマンドによって返される情報は編集されません。

アプリのテスト時にプロバイダーデータの再編集を無効にするために必要な権限

アプリのプロバイダーデータの再編集を無効にするには、以下の権限が必要です。

  • アプリは開発モードで作成する必要があります。つまり、ステージ上の特定のバージョンまたはファイルに基づいている必要があります。

  • アプリケーションは、アプリケーションパッケージを含む同じアカウント内で作成する必要があります。

  • アプリの OWNERSHIP 権限が必要です。

  • アプリケーションパッケージには DEVELOP の権限が必要です。

プロバイダーデータの情報再編集の無効化

アプリの情報を無効にするには、次の例に示すように、 ALTER APPLICATION コマンドを使用します。

ALTER APPLICATION hello_snowflake_app SET DISABLE_APPLICATION_REDACTION = TRUE;
Copy

このコマンドは、 hello_snowflake_app というアプリのプロバイダーデータの再編集を無効にします。

プロバイダー・データの再編集を有効にするには、次の例と同じコマンドを使用します。

ALTER APPLICATION hello_snowflake_app SET DISABLE_APPLICATION_REDACTION = FALSE;
Copy

開発モードでのイベント共有のテスト

プロバイダーは開発モードを使用して、 ログとイベントトレース を使用するアプリをインストールし、テストします。プロバイダーは、開発アカウントでローカルにイベントテーブルをセットアップし、開発モードでアプリをインストールし、アプリが発するイベントやログ、プロバイダーと共有されるログを表示することができます。

注釈

開発モードでイベント共有をテストするには、アプリはマニフェストファイルで イベント定義 を定義する必要があります。

開発モードの違い

開発モードでは、以下のいずれかに基づいてアプリが作成されます。

  • ステージングされたファイル。

  • アプリケーションパッケージで定義されたバージョンまたはパッチ。

開発モードでローカルにイベント共有をテストする場合、リストから作成されたアプリとは動作に違いがあります。

  • イベント共有を有効にするには、 MANAGE EVENT SHARING グローバル権限は必要ありません。

  • 共有イベントはローカルイベントテーブルに集められます。ローカル・イベント・テーブルでは、プロバイダーは1つのイベントに2つのエントリーを見ることができます。

    • アプリがインストールされたときにコンシューマー側でアプリが発するイベント。

    • プロバイダーと共有されるイベント。

開発モードでのイベント共有のテスト

  1. ログとイベントトレースを使用するようにアプリを構成する

  2. ローカルの開発アカウントにイベントテーブル をセットアップします。

  3. 以下のコマンドのいずれかを実行して、アプリをローカルに作成します。

    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING @path_to_staged_files
      AUTHORIZE_TELEMETRY_EVENT_SHARING = TRUE;
    
    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING VERSION v1_0
      PATCH 0
      AUTHORIZE_TELEMETRY_EVENT_SHARING = TRUE;
    
    Copy
  4. イベントテーブルでログメッセージとトレースイベントを表示する.