サービスでのSnowflakeステージボリュームの使用

Snowflakeは、内部ステージ、ローカルストレージ、メモリストレージ、ブロックストレージボリュームなど、アプリケーションコンテナー用に、 various storage volume types をサポートしています。このセクションでは、内部ステージ用にボリュームとボリュームマウントを構成する方法を説明します。

サービス仕様書にSnowflake・ステージを指定

サービスコンテナーがSnowflakeステージマウントを使用するサービスを作成するには、次のようにサービス仕様に必要な設定を提供します。

  1. spec.volumes フィールドを指定し、使用するステージ・ボリュームを定義します。

    volumes:
    - name: <name>
      source: <stage name>
    
    Copy

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

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

    • source: 搭載するSnowflake内部ステージ、例えば @my_stage@my_stage/folder。この値は二重引用符で囲む必要があります。

  2. spec.containers.volumeMounts フィールドを指定して、アプリケーション・コンテナー内のボリュームをマウントする場所を記述します。このフィールドに入力する情報は、サポートされるすべてのストレージボリュームで同じです。例:

    volumeMounts:
    - name: <name>
      mountPath: <absolute-directory-path>
    
    Copy

以下の仕様例では、 app コンテナーが @model_stage 内部ステージをマウントします。

spec:
  containers:
  - name: app
    image: <image1-name>
    volumeMounts:
    - name: models
      mountPath: /opt/models
  volumes:
  - name: models
    source: "@model_stage"
Copy

アクセス制御の要件

サービス所有者ロールは、サービスを作成するために使用されるロールです。また、サービスがSnowflakeとやりとりする際に使用するロールでもあります。所有者ロールは、マウントされたステージへのアクセス向けとしてコンテナーに付与される権限を決定します。サービスの所有者ロールには、ステージ上で READ 権限が必要です。

たとえば、ステージでサービスロールが WRITE 権限を持っていない場合、そのステージのマウントは読み取り専用になります。つまり、コンテナーができるのはステージからファイルを読み取ることのみです。所有者ロールが読み取りと書き込みの両方をサポートするステージ・マウントには、ステージ上で WRITE 権限が必要です。

ガイドラインと制約

アプリケーションコンテナーがステージマウントを使用する場合、以下のガイドラインと制限が適用されます。

制限事項

  • 以下は一般的な制限事項です。これらの限度額に関する問題が発生した場合は、アカウント担当者にお問い合わせください。

    • 各サービスは、1つのサービスにつき最大5つのステージ・ボリュームをサポートすることができます。これは サービス仕様spec.volumes フィールドを参照しています。

    • 1ノードあたり8ステージマウントのみサポートされます。Snowflake は、メモリ、 CPU、 GPU を管理する方法と同様に、ノードごとのステージマウントの制限を管理します。新しいサービスインスタンスを起動すると、既存のノードに要求されたステージマウントをサポートするキャパシティがない場合に、Snowflakeが新しいノードを起動することがあります。

  • ステージまたはサブディレクトリをステージでマウントすることができます。例えば、 @my_stage@my_stage/folder。例えば、 @my_stage/folder/file のように、1つのファイルを1つのステージにマウントすることはできません。

  • 外部ステージはサポートされていません。SSE 暗号化(Internal stage parameters を参照)を使用するSnowflake内部ステージのみがサポートされます。このようなステージを作るには、 CREATE STAGE を使用します。: CREATE STAGE my_stage ENCRYPTION = (type = 'SNOWFLAKE_SSE');

  • 複数のステージマウント(異なるコンテナーにマウントされた同じステージボリューム)から同じファイルへの同時書き込みはサポートされていません。

  • ステージマウントは、 POSIX 互換性のあるファイルシステムではありません。例:

    • ファイル名とディレクトリ名の変更はアトミックではありません。

    • ハードリンクはサポートされていません。

  • ファイルシステムの変更を監視する Linux カーネルサブシステムの inode notify (inotify) は、ステージマウントでは動作しません。

ガイドライン

  • ステージ・マウントはシーケンシャルな読み書きに最適化されています。

  • ステージ・マウント内で複数のファイルへの同時書き込みを避けます。

  • ステージ・マウントのI/O操作は、コンテナーのファイル・システムやブロック・ストレージ・ボリュームのI/O操作よりも待機時間が高くなる可能性があります。I/O操作が成功したかどうかを確認するために、常にステータスコードをチェックすべきです。

  • パフォーマンスを維持するため、25 GB を超えるファイルの作成や変更は避けてください。

  • ステージは、アップロードファイルの更新を非同期にマウントします。ステージ・マウント上のファイルへの変更は、ファイル・ディスクリプターが正常にクローズまたはフラッシュされた後にのみ、ステージに永続化されることが保証されます。ステージマウント上のファイルへの変更が他のコンテナーやSnowflakeから見えるようになるまで、多少の遅延が発生する場合があります。

  • マウントされたステージの各ディレクトリに含まれるファイルは、100,000個以下である必要があります。ディレクトリ内のファイル数に応じて readdir 待機時間が長くなることが予想されます。

  • ステージ・マウントはネットワーク・ファイルシステムではありません。マルチクライアントの調整にステージマウントを使わないでください。

  • 同じファイルへの複数のハンドルを同時に開かないでください。オープンされたファイル・ハンドルは、読み取り操作か書き込み操作のどちらかに使用します。ファイルに書き込んだ後、そのファイルから読み込むには、読み込む前に一旦ファイルを閉じ、再度ファイルを開きます。