サービスでのSnowflakeステージボリュームの使用¶
Snowflakeは、内部ステージ、ローカルストレージ、メモリストレージ、ブロックストレージボリュームなど、アプリケーションコンテナー用に、 various storage volume types をサポートしています。このセクションでは、内部ステージ用にボリュームとボリュームマウントを構成する方法を説明します。
サービス仕様書にSnowflake・ステージを指定¶
サービスコンテナーがSnowflakeステージマウントを使用するサービスを作成するには、次のようにサービス仕様に必要な設定を提供します。
spec.volumes
フィールドを指定し、使用するステージ・ボリュームを定義します。volumes: - name: <name> source: <stage name>
以下のフィールドは必須です。
name
: ボリュームの名前。source
: 搭載するSnowflake内部ステージ、例えば@my_stage
、@my_stage/folder
。この値は二重引用符で囲む必要があります。
spec.containers.volumeMounts
フィールドを指定して、アプリケーション・コンテナー内のボリュームをマウントする場所を記述します。このフィールドに入力する情報は、サポートされるすべてのストレージボリュームで同じです。例:volumeMounts: - name: <name> mountPath: <absolute-directory-path>
以下の仕様例では、 app
コンテナーが @model_stage
内部ステージをマウントします。
spec:
containers:
- name: app
image: <image1-name>
volumeMounts:
- name: models
mountPath: /opt/models
volumes:
- name: models
source: "@model_stage"
アクセス制御の要件¶
サービス所有者ロールは、サービスを作成するために使用されるロールです。また、サービスが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
待機時間が長くなることが予想されます。ステージ・マウントはネットワーク・ファイルシステムではありません。マルチクライアントの調整にステージマウントを使わないでください。
同じファイルへの複数のハンドルを同時に開かないでください。オープンされたファイル・ハンドルは、読み取り操作か書き込み操作のどちらかに使用します。ファイルに書き込んだ後、そのファイルから読み込むには、読み込む前に一旦ファイルを閉じ、再度ファイルを開きます。