バージョニング、パッチ適用、およびアプリケーションのアップグレード

このトピックでは、Native Apps Frameworkを使用して作成されたアプリケーションにバージョンとパッチを追加する方法について説明します。このトピックでは、バージョン管理されたスキーマを使用して、アプリケーションファイルとセットアップスクリプトをシームレスにアップグレードする方法についても説明します。

バージョン、パッチ、アップグレードについて

Native Frameworkは、アプリケーションの更新や問題の修正をできるようにする機能を提供します。また、コンシューマーアカウントにインストールされたアプリケーションをシームレスにアップグレードする方法も提供します。

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

一般的に、新しいバージョンは、アプリケーションの新機能や動作の変更を導入するために使用します。あるメジャーバージョンから別のメジャーバージョンへのアップグレード(およびロールバック)プロセスでは、以前のバージョンからコードが実行できないようにする必要があります。つまり、セットアップスクリプトは、直前のメジャーバージョンにのみ対応する必要があります。

パッチはアプリのフルバージョンとみなされ、メジャーバージョンとまったく同じようにセットアップスクリプトで定義されます。しかし、フルバージョンのアップグレードとは異なり、プロバイダーがパッチをインストールする順序や、パッチで同時に実行できるコードの数に制限はありません。

1つのバージョンに複数のパッチを追加することができます。バージョンとは異なり、現在インストールされているバージョンへのパッチのインストールを制限するものはありません。つまり、連続してインストールすると、複数の異なるパッチからのコードを同時に実行できるということです。これはまた、新バージョンには、旧バージョンで実行可能なすべてのパッチとの互換性が必要があることを意味します。

バージョンおよびパッチの作成

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

アプリケーションパッケージへのバージョンの追加

次の例では、 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 ファイルで指定した値よりも優先されます。

アプリケーションパッケージへのパッチの追加

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

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

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

アプリケーションパッケージに最初のバージョンを追加すると、このバージョンにはパッチ0が割り当てられます。パッチを追加すると、Snowflakeはパッチ番号を1つずつ増やします。

注釈

パッチ番号を自分で指定することはできません。Snowflakeはパッチ番号を内部で管理しています。

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

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

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

SHOW VERSIONS IN APPLICATION PACKAGE HelloSnowflakePackage;
Copy

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

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

ALTER APPLICATION PACKAGE HelloSnowflakePackage
  DROP VERSION v1_0;
Copy

注釈

インストールされているアプリケーションで現在使用されているバージョンを削除すると、インストールされているアプリケーションがアップグレードされるまで、そのバージョンが使用できなくなる可能性があります。

このコマンドは、すべてのアプリケーションが新しいバージョンにアップグレードされるまで完了しません。コンシューマーアカウントで現在使用中のバージョンを削除する場合は注意してください。

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

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

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

アプリケーションパッケージには、 デフォルトのリリースディレクティブを設定 することができます。デフォルトのリリースディレクティブは、アプリケーションをインストールするときに、すべてのコンシューマーに適用されるバージョンを指定します。たとえば、アプリケーションのV1とV2を作成した場合に、デフォルトのリリースディレクティブをV2に設定すると、コンシューマーがアプリケーションをインストールするときに、v2バージョンがインストールされるようになります。

また、アプリケーションパッケージに カスタムリリースディレクティブを追加 することもできます。カスタムリリースディレクティブを使用すると、特定のSnowflakeアカウントがインストールできるアプリケーションのバージョンを指定できます。

たとえば、アプリケーションのV2とV3を作成した場合に、V2をデフォルトのリリースとして割り当て、カスタムリリースディレクティブを作成してV3を特定のアカウントと共有することができます。カスタムリリースディレクティブの一般的な使用例として、テストのためにコンシューマーカウントとアプリケーションを共有する場合があります。

注釈

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

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

  • コンシューマーアカウントにアプリケーションをインストールする。

  • アプリケーションパッケージのプライベートリストを作成する。

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

リリースディレクティブを指定するには、 MANAGE RELEASES 権限またはアプリケーションパッケージの所有権が必要です。

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

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

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

ALTER APPLICATION PACKAGE HelloSnowflakePackage
  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 HelloSnowflakePackage
  SET RELEASE DIRECTIVE HelloSnowflakePackage_Custom
  ACCOUNTS = (CONSUMER_ORG.CONSUMER_ACCOUNT)
  VERSION = v1_0
  PATCH = 0;
Copy

アプリケーションパッケージにカスタムリリースディレクティブを追加した後、 MODIFY RELEASE DIRECTIVE を指定して ALTER APPLICATION PACKAGE を実行し、 VERSION と PATCH に更新された値を指定すると、リリースディレクティブの バージョンとパッチを更新する ことができます。

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

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

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

アプリケーションパッケージのカスタムリリースディレクティブの更新

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

ALTER APPLICATION PACKAGE HelloSnowflakePackage
  MODIFY RELEASE DIRECTIVE HelloSnowflakePackage_Custom
  VERSION = v1_0
  PATCH = 0;
Copy

アプリケーションパッケージからのカスタムリリースディレクティブの削除

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

ALTER APPLICATION PACKAGE HelloSnowflakePackage
  UNSET RELEASE DIRECTIVE HelloSnowflakePackage_Custom;
Copy

バージョンおよびパッチのリリース

開発モードのアプリケーションパッケージからアプリケーションをインストールする場合は、バージョンとパッチを明示的に指定します。ただし、次の場合は、アプリケーションが通常通りインストールされます。

CREATE APPLICATION HelloSnowflake
  FROM APPLICATION PACKAGE HelloSnowflakePackage
Copy

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