Snowflake Native App の更新とアップグレード

プロバイダーは Snowflake Native App Framework によって Snowflake Native App を更新し、新しい機能を追加したり、バグを修正したり、その他の変更を加えるたりすることができます。このトピックでは、Native Apps Frameworkを使用して作成されたアプリケーションにバージョンとパッチを追加する方法について説明します。また、 Snowflake Native App のインストール済みインスタンスをアップグレードする方法についても説明します。

バージョンおよびパッチについて

Snowflake Native App Framework の文脈では、バージョンとパッチは以下を指します。

バージョン

一般的には Snowflake Native App の主な更新が含まれます。バージョンはアプリケーションパッケージで定義されます。アプリケーションパッケージは、一度に2つのアクティブバージョンを持つことができます。すでに2つのバージョンが定義されているアプリケーションパッケージに新しいバージョンを追加するには、まず一方のバージョンをドロップする必要があります。

パッチ

一般的には Snowflake Native App に対するより小さな更新が含まれます。バージョンと同様、パッチもアプリケーションパッケージで定義されます。アプリケーションパッケージには一度に2つのアクティブなバージョンしか含めることができませんが、1つのバージョンには複数のパッチを含めることができます。

注釈

1つのバージョンは最大130個のパッチを含むことができます。

プロバイダーがアプリケーションパッケージに新しいバージョンを追加すると、新しいバージョンには自動的にパッチ0が割り当てられます。プロバイダーがバージョンに新しいパッチを追加する際、手動でパッチ番号を指定することができます。パッチ番号が提供されない場合、Snowflakeは自動的にパッチバージョンを1だけインクリメントします。

アプリケーションパッケージにバージョンやパッチを追加した後、そのバージョンやパッチに基づいてアプリケーションオブジェクトを作成することで、変更をローカルでテストすることができます。詳細については、 バージョンまたはパッチレベルからオブジェクトを作成する をご参照ください。

注釈

アプリケーションパッケージで定義された各バージョンとパッチは、セットアップスクリプトとアプリケーションファイルのそれぞれのバージョンを持つ必要があります。

バージョンとパッチの相違

プロバイダーがアプリの新バージョンを公開するとき、 Snowflake Native App Framework はアプリの旧バージョンのみがアクティブであることを確認します。たとえば、プロバイダーがアプリのV1とV2を公開した場合、 Snowflake Native App Framework は、V3にアップグレードする前に、V2のみが現在コンシューマアカウントにインストールされていることを確認します。これにより、セットアップスクリプトはV2とV3の相違だけを考慮すればよいことになります。つまり、セットアップスクリプトは、アプリの最新バージョンとしか後方互換性がないということです。プロバイダーがアプリの状態を変更する場合、たとえば、新しいテーブルを作成したり、テーブルに列を追加したりしても、バージョン間の互換性に問題はありません。

対照的に、プロバイダーがアプリのバージョンに対して新しいパッチを公開するとき、 Snowflake Native App Framework は実行中のアクティブなパッチの数に対する制限を強制しません。プロバイダーは、パッチでアプリの状態を変更することは避ける必要があります。

リリースディレクティブについて

リリースディレクティブは、コンシューマーが Snowflake Native App をインストールするときに使用するバージョンとパッチ(オプション)を指定します。リリースディレクティブは、特定のバージョンやパッチのインストールされた全インスタンスにわたって 自動アップグレード をトリガーするためにも使われます。

リリースディレクティブはアプリケーションパッケージで定義されます。リリースディレクティブには2つのタイプがあります。

カスタムリリースディレクティブ

プロバイダーは、特定のSnowflakeアカウントがインストールできるアプリケーションのバージョンを指定できます。詳細については、 カスタムリリースディレクティブを追加する をご参照ください。

デフォルトリリースディレクティブ

Snowflake Native App をインストールするときに、すべてのコンシューマーに適用されるバージョンとパッチを指定します。プロバイダーがアプリケーションのバージョンV1とV2を作成する場合、デフォルトリリースディレクティブをV2に設定することで、コンシューマーが Snowflake Native App をインストールするときにV2バージョンがインストールされるようになります。詳細については、 デフォルトリリースディレクティブを設定する をご参照ください。

プロバイダーがアプリケーションのV2とV3を作成した場合に、V2をデフォルトリリースとして割り当て、カスタムリリースディレクティブを作成してV3を特定のアカウントと共有することができます。プロバイダーは、アプリケーションのバージョンV3を、そのバージョンを公開する前にテストアカウントと共有することもできます。

注釈

デフォルトのリリースディレクティブとカスタムリリースディレクティブの両方を指定した場合は、カスタムリリースディレクティブが常に優先されます。上の例では、カスタムリリースディレクティブで指定されたコンシューマーカウントがインストールできるのは、アプリケーションのV3のみです。

以下のタスクを実行する前に、アプリケーションパッケージでリリースディレクティブを定義する必要があります。

  • アプリケーションパッケージをデータコンテンツとして公開リストを作成します。

  • コンシューマーアカウントに Snowflake Native App をインストールします。

アップグレードについて

Snowflake Native App Framework の文脈では、アップグレードとは、コンシューマーアカウントにインストールされている Snowflake Native App のバージョンまたはパッチに対する更新を指します。 Snowflake Native App Framework は2つのタイプのアップグレードに対応しています。

自動アップグレード

自動アップグレードは、プロバイダーによって開始されるアップグレードです。新しいバージョンやパッチが利用可能になると、プロバイダーはアプリケーションパッケージのリリースディレクティブを変更します。これは、リリースディレクティブで指定されたアプリのすべてのインストール済みインスタンスの自動アップグレードをトリガーします。

手動アップグレード

手動アップグレードとは、プロバイダーからの通知に応じてコンシューマーが開始するアップグレードのことです。手動アップグレードは、プロバイダーがコンシューマーにバグ修正などの更新を迅速にリリースする必要がある場合に便利です。

新しいバージョンやパッチが利用可能になると、プロバイダーはアプリケーションパッケージのリリースディレクティブを変更し、新しいバージョンが利用可能になったことをコンシューマーに通知します。その後、コンシューマーは ALTER APPLICATION コマンドを実行してアップグレードを実行します。一般的に、手動アップグレードにより、コンシューマーは自動アップグレードよりも早くインストール済みアプリをアップグレードできます。

アップグレードのワークフローについては、 Snowflake Native App をアップグレードする をご参照ください。

リージョン間のアップグレードについて

リージョン間でインストール済みアプリをアップグレードする方法については、 複数リージョンでインストール済みアプリをアップグレードする をご参照ください。

アプリケーションパッケージにバージョンやパッチを追加する

アプリケーションのバージョン情報は、アプリケーションパッケージで指定されます。

バージョンやパッチの追加・削除に必要な権限

アプリケーションパッケージのバージョンやパッチを指定するには、そのアプリケーションパッケージのロールに以下のいずれかの権限が付与されている必要があります。

  • OWNERSHIP

  • MANAGE VERSIONS

たとえば、アプリケーションパッケージの MANAGE VERSION 権限を release_mgr ロールに付与するには、次の例に示すように GRANT <権限> コマンドを使用します。

GRANT MANAGE VERSIONS ON APPLICATION PACKAGE hello_snowflake_package
  TO ROLE release_mgr;
Copy

SQL を使用してアプリケーションパッケージにバージョンを追加する

次の例では、 ALTER APPLICATION PACKAGE コマンドを使用してアプリケーションパッケージにバージョンを追加する方法を示します。

ALTER APPLICATION PACKAGE MyAppPackage
  ADD VERSION v1_0
  USING '@dev_stage/v1_0'
  LABEL = 'MyApp Version 1.0';
Copy

この例では、 v1_0 は、コンシューマーがアプリケーションをインストールするときには表示されないバージョンの識別子です。コンシューマーには、 LABEL 句で定義されたバージョン情報が表示されます。

同時に存在できるアプリケーションのバージョンは2つのみです。たとえば、アプリケーションでv1_0とv1_1を定義した場合、v1_2を作成するにはv1_0をドロップする必要があります。ただし、1つのバージョンに複数のパッチを適用することはできます。

バージョン名とラベルは、 manifest.yml ファイルで定義するか、 ALTER APPLICATION PACKAGE コマンドで直接指定できます。SQL コマンドと同様に manifest.yml ファイルで定義した場合は、 SQL コマンドで指定した値が manifest.yml ファイルで指定した値よりも優先されます。

SQL を使用してアプリケーションパッケージにパッチを追加する

アプリのバージョンを作成するだけでなく、特定のバージョンのパッチを作成することもできます。バージョンと同様に、アプリパッチにも独自のアプリケーションファイルがあります。

アプリケーションパッケージの新しいパッチを作成するには、次の例に示すように ALTERAPPLICATIONPACKAGE ... VERSION コマンドの ADD PATCH FOR VERSION 句を使用します。

ALTER APPLICATION PACKAGE MyAppPackage
 ADD PATCH FOR VERSION V1_0
 USING '@dev_stage/v1_0_p1;
Copy

この例では、パッチ番号は ADD PATCH FOR VERSION V1_0句には提供されません。この場合、Snowflakeは自動的にパッチ番号を1だけインクリメントします。

カスタムパッチ番号でアプリケーションの新しいパッチを作成するには、次の例に示すように ALTERAPPLICATIONPACKAGE ... VERSION コマンドの ADD PATCH FOR VERSION 句にパッチ番号を提供します。

ALTER APPLICATION PACKAGE MyAppPackage
 ADD PATCH 3
 FOR VERSION V1_0
 USING '@dev_stage/v1_0_p1;
Copy

アプリケーションパッケージのバージョンおよびパッチを表示する

プロバイダーとして、アプリケーションパッケージに対して SHOW VERSIONS コマンドを実行すると、アプリケーションに定義されたバージョンとパッチを表示することができます。

次のコマンドは、 hello_snowflake_package という名前のアプリケーションパッケージに定義されているバージョンとパッチを表示します。

SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
Copy

アプリケーションパッケージからバージョンを削除する

アプリケーションパッケージからバージョンを削除するには、削除したいバージョンを指すリリースディレクティブが現在存在しないことを確認する必要があります。

アプリケーションパッケージで指定されたリリースディレクティブを表示するには、次の例のように SHOW RELEASE DIRECTIVES コマンドを実行します。

SHOW RELEASE DIRECTIVES IN APPLICATION PACKAGE hello_snowflake_package;
Copy

アプリケーションパッケージからバージョンを削除するには、次の例に示すように ALTER APPLICATION PACKAGE コマンドの DROP VERSION 句を使用します。

ALTER APPLICATION PACKAGE hello_snowflake_package
  DROP VERSION v1_0;
Copy

このコマンドの実行後も、アプリのインストール済みインスタンスがすべて削除されるまで、バージョンはドロップされません。ドロップコマンドのステータスを確認するには、次の例のように SHOW VERSIONS を使用します。

SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
Copy

dropped_on 列には、ドロップが開始されたときのタイムスタンプが一覧表示されます。

注釈

ドロップされたバージョンは、ステータスが DROPPED の間だけ、このコマンドの出力に表示されます。アプリのインストール済みインスタンスがすべて削除されると、削除されたバージョンは表示されなくなります。

あるバージョンが削除されると、コンシューマーはそのバージョンのアプリを新たにインストールすることができなくなります。

アプリケーションがどのようにコンシューマーに公開されるかによって、バージョンがドロップされるまでにかかる時間は異なります。

  • アプリケーションパッケージがコンシューマーに公開されていない場合、そのバージョンは直ちにドロップされます。

  • アプリケーションパッケージが1つのリージョン内でパブリックリストまたはプライベートリストとして公開されている場合、そのバージョンは直ちにドロップされます。

  • アプリケーションパッケージが、アプリケーションパッケージと同じリージョン内で共有されるリストのデータ製品として公開された場合、そのバージョンは数時間以内にドロップされます。

  • アプリケーションパッケージが クロスクラウド自動複製 を使用したリストのデータ製品として公開されている場合、すべてのリージョンでバージョンがドロップされるまでに時間がかかることがあります。

アプリケーションパッケージのリリースディレクティブを設定する

アプリケーションパッケージにバージョンを追加した後、アプリケーションパッケージのリリースディレクティブを指定することができます。リリースディレクティブは、コンシューマーがアプリケーションをインストールしたとき、またはインストール済みアプリが自動的にアップグレードされたときに利用できるアプリケーションのバージョンを決定します。

リリースディレクティブの設定に必要な権限

リリースディレクティブを設定するには、プロバイダーは MANAGE RELEASES 権限かアプリケーションパッケージの所有権を持っていなければなりません。

GRANT MANAGE RELEASES ON APPLICATION PACKAGE hello_snowflake_package
  TO ROLE release_mgr;
Copy

アプリケーションパッケージのデフォルトリリースディレクティブを設定する

SET DEFAULT RELEASE DIRECTIVE を指定して ALTER APPLICATION PACKAGE を使用し、以下の例に示すようにデフォルトのリリースディレクティブを設定します。

ALTER APPLICATION PACKAGE hello_snowflake_package
  SET DEFAULT RELEASE DIRECTIVE
  VERSION = v1_0
  PATCH = 2;
Copy

アプリケーションパッケージのデフォルトリリースディレクティブを更新するには、再度 SET DEFAULT RELEASE DIRECTIVE で ALTER APPLICATION PACKAGE コマンドを実行し、適宜 VERSION と PATCH に新しい値を指定します。

アプリケーションパッケージにカスタムリリースディレクティブを設定する

カスタムリリースディレクティブを追加するには、 SET RELEASE DIRECTIVE を指定して ALTER APPLICATION PACKAGE コマンドを使用します。ACCOUNTS 句を使用して、このリリースディレクティブが適用されるアカウントを指定します。例:

ALTER APPLICATION PACKAGE hello_snowflake_package
  SET RELEASE DIRECTIVE hello_snowflake_package_custom
  ACCOUNTS = (CONSUMER_ORG.CONSUMER_ACCOUNT)
  VERSION = v1_0
  PATCH = 0;
Copy

カスタムリリースディレクティブを更新する

リリースディレクティブに基づいてアプリケーションパッケージを作成するには、次の例に示すように MODIFY RELEASE DIRECTIVE を指定して ALTER APPLICATION PACKAGE コマンドを使用します。

ALTER APPLICATION PACKAGE hello_snowflake_package
  MODIFY RELEASE DIRECTIVE hello_snowflake_package_custom
  VERSION = v1_0
  PATCH = 0;
Copy

しかし、リリースディレクティブに関連付けられたアカウントを変更することはできません。リリースディレクティブに関連する組織とアカウントを変更するには、以下を実行します。

  1. アプリケーションパッケージからリリースディレクティブを削除するには、 UNSET RELEASE DIRECTIVE を指定して ALTER APPLICATION PACKAGE コマンドを実行します。

  2. SET RELEASE DIRECTIVE を指定して ALTER APPLICATION PACKAGE を実行し、 ACCOUNTS 句を使用してアカウントのリストを指定し、リリースディレクティブをアプリケーションパッケージに戻します。

注釈

リリースディレクティブに関連付けられている組織とアカウントを変更するときは、古いものを削除した後、すぐに新しいリリースディレクティブを追加するようにしてください。そうしないと、カスタムリリースディレクティブに割り当てられたアカウントのインストール済みアプリはデフォルトリリースディレクティブに戻ります。

カスタムリリースディレクティブを削除する

アプリケーションパッケージからカスタムリリースディレクティブを削除するには、次の例に示すように UNSET RELEASE DIRECTIVE を指定して ALTER APPLICATION PACKAGE コマンドを使用します。

ALTER APPLICATION PACKAGE hello_snowflake_package
  UNSET RELEASE DIRECTIVE hello_snowflake_package_custom;
Copy

リリースディレクティブを使用してバージョンとパッチをテストする

開発モードのアプリケーションパッケージからアプリケーションをインストールする場合は、バージョンとパッチを明示的に指定します。ただし、以下のコマンドを使用してアプリケーションをインストールすると、次のようになります。

CREATE APPLICATION hello_snowflake
  FROM APPLICATION PACKAGE hello_snowflake_package
Copy

リリースディレクティブが、このコマンドを実行したときにインストールされるバージョンを決定する。

Snowflake Native App をアップグレードする

アップグレードは、プロバイダーがアプリケーションパッケージのリリースディレクティブを設定または変更したときに開始されます。

Snowflake Native App をアップグレードするワークフロー

プロバイダーは、以下のワークフローを使用して、インストール済みアプリをアップグレードします。

  1. アプリケーションパッケージのアプリケーションロジックとセットアップスクリプトを更新します。

  2. 現在2つのバージョンが定義されている場合は、アプリケーションパッケージからバージョンを削除します。

  3. アプリケーションパッケージの変更に対して、新しいバージョンまたはパッチを作成します。

    アプリケーションの DISTRIBUTION プロパティが EXTERNAL に設定されている場合、 自動セキュリティスキャン が開始されます。アップグレードを行う前に、セキュリティスキャンに合格する必要があります。

  4. プロバイダーのテストアカウントに APPLICATION オブジェクトを作成して、新しいバージョンをテストします。

  5. バージョンやパッチのリリースディレクティブを更新します。

    これにより自動アップグレードが開始され、インストールされているすべての旧バージョンのインスタンスが更新されます。プロバイダーは、アップグレードが可能であることをコンシューマーに通知し、 手動アップグレード を実行するよう求めることができます。

注釈

アプリケーションパッケージをアップグレードした後、リモートリージョンへの更新が実行されるまで、コンシューマーアカウントにインストールされた Snowflake Native App に対する変更が表示されない場合があります。

DATA_SHARING_USAGE スキーマの APPLICATION_STATE ビューを使用してステータスをモニターできます。アップグレード後の最初の更新から1日以上経ってもアップグレードが完了しない場合は、更新処理に問題がある可能性があります。 Snowflakeサポート にお問い合わせください。

複数リージョンでインストール済みアプリをアップグレードする

プロバイダーが Snowflake Native App を クロスクラウド自動複製 を使用して公開する場合、自動アップグレードでは以下の要因によってアップグレードに時間がかかることがあります。

  • リフレッシュスケジュールの値。

  • アプリのインストール済みインスタンス数。

  • アプリが展開されているリージョン数。

アップグレードに緊急の修正が含まれ、リモートリージョンでのアップグレードが必要な場合、プロバイダーはアップグレードをより迅速に実行するために以下の方法を検討することができます。

インストール済みアプリの手動アップグレードを実行する

手動アップグレードは、コンシューマーがアプリケーションパッケージで指定されたリリースディレクティブを使用して、インストール済みアプリのバージョンやパッチのアップグレードを開始することを可能にします。

インストール済み Snowflake Native App を利用可能な最新バージョンにアップグレードするには、コンシューマーは ALTER APPLICATION コマンドの UPGRADE 句を使用してアプリケーションオブジェクトを変更することができます。

ALTER APPLICATION <name> UPGRADE
Copy

アップグレードのステータスを表示する

アプリのアップグレード状態を表示するには、次の例のように APPLICATION_STATE ビュー システムビューを使用します。

SELECT * FROM snowflake.data_sharing_usage.APPLICATION_STATE
Copy

このビューには、アップグレードの状態やアプリが展開されているリージョンなど、アップグレードに固有の列が含まれています。