Azureの外部ボリュームを構成する¶
外部ボリュームを使用して、自分のMicrosoft AzureコンテナーにSnowflakeの制限付きアクセスを許可します。Snowflakeは、外部ボリュームで次のAzureクラウドストレージサービスをサポートしています。
BLOBストレージ
Data Lake Storage Gen2
汎用v1
汎用v2
前提条件¶
外部ボリュームを構成する前に、以下のものが必要です。
Snowflakeアカウントをホストしているのと同じリージョンにあるAzureストレージコンテナー。
外部で管理されるIcebergテーブルに外部ボリュームを使用するには、すべてのテーブルデータとメタデータファイルをコンテナー内に配置する必要があります。
データ復旧をサポートするには、 外部クラウドストレージの場所のバージョン管理を有効にします。
IAM ポリシーとロールを作成および管理するためのAzureにおける権限。Azure管理者でない場合は、Azure管理者にこれらのタスクを実行するよう依頼します。
Azureストレージファイアウォールを使用してストレージアカウントへの不正なトラフィックをブロックしている場合は、 VNet サブネット IDs の許可 の説明に従って、SnowflakeにAzureストレージアカウントへのアクセスを明示的に許可してください。
ステップ1: Snowflakeで外部ボリュームを作成する¶
CREATE EXTERNAL VOLUME コマンドを使用して外部ボリュームを作成します。
注釈
アカウント管理者(ACCOUNTADMIN ロールを持つユーザー)のみが、この SQL コマンドを実行できます。
次の例は、暗号化されたAzureストレージの場所を定義する外部ボリュームを作成しています。
CREATE EXTERNAL VOLUME exvol
STORAGE_LOCATIONS =
(
(
NAME = 'my-azure-northeurope'
STORAGE_PROVIDER = 'AZURE'
STORAGE_BASE_URL = 'azure://exampleacct.blob.core.windows.net/my_container_northeurope/'
AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
)
);
注釈
STORAGE_BASE_URL の値を指定するときは、 https://
ではなく azure://
のプレフィックスを使用してください。
ステップ2: Snowflakeにストレージの場所へのアクセスを許可する¶
Microsoftの許可リクエストページへの URL を取得するには、 DESCRIBE EXTERNAL VOLUME コマンドを使用します。以前に作成した外部ボリュームの名前を指定します。
DESC EXTERNAL VOLUME exvol;
次のプロパティの値を記録します。
プロパティ
説明
AZURE_CONSENT_URL
Microsoftのアクセス許可リクエストページへの URL。
AZURE_MULTI_TENANT_APP_NAME
アカウント用に作成されたSnowflakeクライアントアプリケーションの名前。このセクションの後半のステップでは、このアプリケーションに許可されたストレージの場所でアクセストークンを取得するための権限を付与します。
これらの値は次のステップで使用します。
ウェブブラウザーで、Microsoftの許可リクエストページ(
AZURE_CONSENT_URL
)に移動します。Accept を選択します。このアクションは、Snowflakeアカウント用に作成されたAzureサービスプリンシパルが、テナント内の指定したリソースでアクセストークンを取得できるようにします。アクセストークンの取得が成功するのは、サービスプリンシパルにストレージアカウントレベルで適切な権限を付与した場合のみです(次のステップを参照)。
Microsoftの権限リクエストページは、Snowflakeの企業サイト(snowflake.com)にリダイレクトされます。
Microsoft Azureポータルにログインします。
Azure Services » Storage Accounts に移動します。Snowflakeサービスプリンシパルがアクセスする必要があるストレージアカウント名を選択します。
注釈
外部ボリュームの IAM 権限はコンテナレベルではなく、ストレージアカウントレベルで設定する必要があります。
Access Control (IAM) » Add role assignment を選択します。
Storage Blob Data Contributor
ロールを選択して、Snowflakeサービスプリンシパルに読み取りと書き込みのアクセスを許可します。注釈
Storage Blob Data Contributor
ロールは外部ボリュームの場所への書き込みアクセスを許可します。書き込みアクセスを完全に構成するには、外部ボリュームのALLOW_WRITES
パラメーターをTRUE
(デフォルト値)に設定します。Snowflakeサービスプリンシパルを検索します。これは DESC EXTERNAL VOLUME 出力(ステップ1)の AZURE_MULTI_TENANT_APP_NAME プロパティにあるIDです。AZURE_MULTI_TENANT_APP_NAME プロパティで、アンダースコアの 前にある 文字列を検索します。
重要
このセクションのMicrosoftリクエストページでリクエストされたSnowflakeサービスプリンシパルをAzureが作成するのに、1時間以上かかる場合があります。サービスプリンシパルがすぐに利用できない場合は、1~2時間待ってから、もう一度検索してください。
サービスプリンシパルを削除すると、外部ボリュームは機能しなくなります。
Review + assign を選択します。
注釈
ロールを割り当てると、変更が有効になるまで最大10分かかることがあります。詳細については、Microsoft Azureドキュメントの 症状 - ロールの割り当て変更が検出されない をご参照ください。
ステップ3: ストレージへのアクセスを確認する¶
Snowflakeがストレージプロバイダーに正常に認証できることを確認するには、 SYSTEM$VERIFY_EXTERNAL_VOLUME 関数を呼び出します。
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
次のステップ¶
外部ボリュームを構成したら、Icebergテーブルを作成できます。
外部カタログを使用する読み取り専用のIcebergテーブルを作成するには、 カタログ統合の構成 をご参照ください。
SnowflakeプラットフォームをフルサポートするIcebergテーブルを作成するには、 Snowflake管理のテーブルを作成する を参照してください。