サービスでのブロックストレージボリュームの使用

Snowflake は、コンテナ化アプリケーション用に、Snowflake内部ステージ、ローカルストレージ、メモリストレージボリューム、ブロックストレージボリュームのストレージボリュームタイプをサポートしています。

サービス仕様におけるブロックストレージの指定

ブロックストレージを使用するサービスを作成するには、以下のようにサービス仕様に必要な構成を提供します。

  1. spec.volumes フィールドを指定して、作成するブロックストレージボリュームを定義します。

    volumes:
      - name: <name>
        source: block
        size: <size in Gi>
        blockConfig:                             # optional
          initialContents:
            fromSnapshot: <snapshot name>
          iops: <number-of-operations>
          throughput: <MiB per second>
    
    Copy

    以下のフィールドは必須です。

    • name: ボリュームの名前。

    • source: ボリュームのタイプ。ブロックストレージボリュームの場合、値は block です。

    • size: ブロックストレージボリュームのストレージ容量(バイト単位)。値は常に整数でなければならず、Gi単位のサフィックスを使って指定します。たとえば、 5Gi5*1024*1024*1024 バイトを意味します。サイズの範囲は、 1Gi から 16384Gi までです。

    以下はオプションのフィールドです。

    • blockConfig.initialContents.fromSnapshot: 別のボリュームから取得した スナップショット (以下のセクションで説明)の名前を指定します。スナップショットはブロックボリュームの初期化に使用されます。

      スナップショット名には、 TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT のような 完全修飾オブジェクト識別子 を使用できます。また、スナップショット名は、データベースとサービスのスキーマに関連して解決されます。つまり、 TUTORIAL_DB.DATA_SCHEMA でサービスを作成した場合、 fromSnapshot: MY_SNAPSHOTfromSnapshot: TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT と同等です。

    • blockConfig.iops: 1秒間にサポートされる入出力操作のピーク数を指定します。なお、1回あたりのデータサイズの上限は256 KiB です。

      • AWS の対応範囲は3000-16000で、デフォルトは3000です。

      • Azureのサポート範囲は3000~80000で、デフォルトは3000です。

    • blockConfig.throughput: ボリュームにプロビジョニングするピークスループットを MiB/秒で指定します。

      • AWS の対応範囲は125-1000で、デフォルトは125です。

      • Azureのサポート範囲は125-1200で、デフォルトは125です。

    例:

    volumes:
      - name: vol-1
        source: block
        size: 200Gi
        blockConfig:
          initialContents:
            fromSnapshot: snapshot1
          iops: 3000
          throughput: 125
    
    Copy
  2. spec.containers.volumeMount フィールドに、ブロックストレージボリュームをマウントするアプリケーションコンテナの場所を指定します。このフィールドに入力する情報は、サポートされるすべてのストレージボリュームで同じです。

アクセス制御の要件

既存のスナップショット(fromSnapshot は仕様にあります)を使用してボリュームを初期化する場合は、サービスの所有者ロールがスナップショットで USAGE 権限を持っている必要があります。

サービスの所有者ロールには、スナップショットを含むデータベースとスキーマに対する USAGE 権限も必要です。

スナップショットの管理

ブロックストレージボリュームのスナップショットを取り、後でそのバックアップを以下のように使用できます。

  • スナップショットバックアップを使用して、既存のブロックストレージボリュームを復元します。

  • スナップショットバックアップは、新しいサービスを作成する際に、新しいブロックストレージボリュームを初期化するためのシードデータとして使用します。

スナップショットを取る前に、すべてのアップデートがディスクにフラッシュされていることを確認する必要があります。

Snowflakeには、スナップショットを作成および管理するための以下のコマンドがあります。

また、既存のブロックストレージボリューム上のスナップショットを復元するには、 ALTER SERVICE...RESTORE VOLUME コマンドを実行します。スナップショットを復元する前に、サービスを一時停止する必要があることに注意してください。ボリュームの復元後、サービスは自動的に再開されます。

ブロックストレージコスト

クレジット消費の詳細については、 Snowflake Service Consumption Table をご参照ください。

例については、 チュートリアル をご参照ください。このチュートリアルでは、ブロックストレージボリュームがマウントされたサービスを作成するための手順を順を追って説明します。

ガイドラインと制約

ブロックストレージボリュームを使用するサービスには、以下の制限が適用されます。

  • 一般的な制限これらの制限に関する問題が発生した場合は、担当者にお問い合わせください。

    • ブロック・ストレージ・ボリューム・サイズの値は、1Giから16384Giの範囲です。

    • 各サービスは最大3つのブロック・ボリュームをサポートできます。これは サービス仕様書spec.volumes を指しています。

    • Snowflakeアカウントあたりのブロックストレージボリュームの総数は10個までです。

    • Snowflakeアカウントごとに許可されるスナップショット数は100です。

  • サービスの最小インスタンス数と最大インスタンス数は同じでなければなりません。

  • サービスが作成された後、以下が適用されます。

    • サービスがブロック・ストレージ・ボリュームを使用している場合、 ALTER SERVICE ... SET ...コマンドを使用してサービスインスタンス数を変更することはできません。

    • ブロック・ストレージ・ボリュームの sizeiopsthroughput フィールドは変更できません。

    • 新しいブロックストレージボリュームを追加したり、既存のブロックストレージボリュームを削除することはできません。

    • ブロックストレージボリュームは、サービスがアップグレードされたり、一時停止して再開された場合でも保持されます。サービスが一時停止されても、そのボリュームは維持されるため、引き続き料金を支払うことになります。サービスをアップグレードまたは再開すると、Snowflakeは各ブロックストレージボリュームを以前と同じサービスインスタンス ID にアタッチします。

    • ブロックストレージボリュームは、サービスがドロップすると削除されます。ボリューム内のデータを保存するために、 ボリュームのスナップショット を取るようにしてください。スナップショットは、後で新しいボリュームの初期化に使用できます。

    • ブロックストレージボリュームは、 Tri-Secret Secure および 定期的なキー更新 をサポートしていません。つまり、アカウントで Tri-Secret Secure や定期的なキー更新が有効になっている場合は、他のすべてのSnowflakeデータには引き続きセキュリティが追加されますが、Snowpark Container Servicesのブロックストレージボリュームに格納されているイメージはこの追加セキュリティの恩恵は受けません。

      Tri-Secret Secure や定期的なキー更新を使用するアカウントでブロックストレージボリュームを作成するには、まず、ブロックストレージボリュームに対するこの追加セキュリティの恩恵を受けずに継続することを理解し、同意することを確認する必要があります。同意を確認するには、アカウント管理者(ACCOUNTADMIN ロールを持つユーザー)がアカウントレベルのパラメーター ENABLE_TRI_SECRET_AND_REKEY_OPT_OUT_FOR_SPCS_BLOCK_STORAGETRUE に設定する必要があります。

  • IOPS およびスループット関連のガイドライン

    • サービス IO のパフォーマンスが期待に満たず、サービスがブロック量 IO またはスループットの影響を受けている場合、 IOPS またはスループットの増加を検討することができます。現在の実装では、そのような変更はサービスを再作成する必要があります。

      これらの 利用可能なプラットフォーム・メトリクス を確認することで、サービスがブロック・ストレージ上でボトルネックになっているかどうかを特定することができます。

      • container.cpu.usage

      • volume.read.iops

      • volume.write.iops

      • volume.read.throughput

      • volume.write.throughput

    • AWS の場合:

      • 設定可能な最大 IOPS は、ボリュームサイズ GiB ごとに 500 IOPS で、最大16,000 IOPS です。例えば、10 GiB のボリュームの最大 IOPS は 500 * 10 = 5000 となります。したがって、最大16,000の IOPS は、ボリュームが32 GiB 以上の場合にのみ設定できることに注意してください。

      • 設定可能な最大スループットは、4 IOPS ごとに1 MiB/秒、最大1000 MiBs/秒です。例えば、デフォルトの3000 IOPS では、最大750 MiB/秒(3000/4=750)のスループットを設定できます。

    • Azureの場合:

      • ボリューム・サイズが 6GB の後、 GB 6GB (ディスクタイプ)を超えるごとに、 IOPS のサポート数は500ずつ増加します。IOPS 10GB のボリュームの最大値は500 * 4 + 3000 = 5000となります。したがって、最大80,000の IOPS は、ボリュームが160 GiB 以上の場合にのみ設定できることに注意してください。

      • 6 GB 以降、設定可能な最大スループットは、IOPS 毎に0.25 MiB/秒、最大1200 MiBs/秒です。例えば、デフォルトの3000 IOPS では、最大750 MiB/秒(3000*0.25=750)のスループットを設定できます。