Azureの外部ボリュームを構成する

外部ボリュームを使用して、自分のMicrosoft AzureコンテナーにSnowflakeの制限付きアクセスを許可します。Snowflakeは、外部ボリュームで次のAzureクラウドストレージサービスをサポートしています。

  • BLOBストレージ

  • Data Lake Storage Gen2

  • 汎用v1

  • 汎用v2

  • Microsoft Fabric OneLake

重要

Snowflakeと、Data Lake Storageを使用するようにのみ構成されているリモートカタログ間の相互運用性を有効にするには、Data Lake Storageに接続するように外部ボリュームを構成する必要があります。詳細については、 Data Lake Storageを使用するリモートカタログとの相互運用性を有効にする をご参照ください。

注釈

セキュリティ体制を強化するため、ネットワークトラフィックにパブリックインターネットではなくプライベート接続を使用するように外部ボリュームを構成できます。詳細については、 Microsoft Azure の外部ボリュームへのプライベート接続 をご参照ください。

Azureの外部ボリュームを構成するには、 SQL を使用 するか、 Snowsightを使用 できます。

前提条件

外部ボリュームを構成する前に、以下のものが必要です。

  • Azureストレージコンテナー。

  • IAM ポリシーとロールを作成および管理するためのAzureにおける権限。Azure管理者でない場合は、Azure管理者にこれらのタスクを実行するよう依頼します。

Azureストレージファイアウォールを使用してストレージアカウントへの不正なトラフィックをブロックしている場合は、 Allow the VNet subnet IDs の説明に従って、SnowflakeにAzureストレージアカウントへのアクセスを明示的に許可してください。

Data Lake Storageを使用するリモートカタログとの相互運用性を有効にする

このセクションでは、Snowflakeを使用して書き込むIcebergテーブルが、Data Lake Storageを使用するようにのみ構成されているリモートカタログと相互運用できるように、Snowflakeを構成する方法について説明します。たとえば、Unity CatalogはData Lake Storageのみを使用するように構成されています。

これらのカタログとの相互運用性を有効にするために、SnowflakeはIcebergテーブルのデータファイルをData Lake Storageに書き込む必要があります。SnowflakeがデータファイルをData Lake Storageに書き込めるようにするには、``dfs.core.windows.net``エンドポイントを使用する:ref:`SnowflakeをData Lake Storageに接続する外部ボリュームを構成する<label-tables_iceberg_configure_external_volume_azure_dls>`必要があります。

Snowflakeを使用して、Data Lake Storageを使用するリモートカタログと相互運用できるIcebergテーブルに書き込む場合、以下のシナリオがサポートされます。

  • Snowflakeを使用して、リモートカタログのクエリエンジンが読み取りおよび書き込みできるSnowflake管理Icebergテーブルを作成します。

    注釈

    Blob Storageに保存されている既存のSnowflake管理Icebergテーブルとの相互運用性を有効にするには、Data Lake Storageに移行します。手順については、 Azure Data Lake StorageへのIcebergテーブルの移行 をご参照ください。

  • Snowflakeを使用して、リモートカタログのリモートテーブルを読み書きします。

SnowflakeをData Lake Storageに接続する外部ボリュームを構成します。

SnowflakeをData Lake Storageに接続する外部ボリュームを構成するには、:ref:`Snowflakeで外部ボリュームを作成する<label-configure_external_volume_azure_create>`際に、``dfs.core.windows.net``エンドポイントを指すSTORAGE_BASE_URLを指定する必要があります。

次の例では、``dfs.core.windows.net``エンドポイントを指すSTORAGE_BASE_URLで構成された、``exvoldfs``という名前の外部ボリュームを作成します。

CREATE EXTERNAL VOLUME exvoldfs
  STORAGE_LOCATIONS =
    (
      (
        NAME = 'my-azure-northeurope'
        STORAGE_PROVIDER = 'AZURE'
        STORAGE_BASE_URL = 'azure://exampleacct.dfs.core.windows.net/my_container_northeurope/'
        AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
      )
    );

SQL を使用して外部ボリュームを構成する

ステップ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:// のプレフィックスを使用してください。

  • OneLake の場所の指定(プレビュー機能)については、 CREATE EXTERNAL VOLUME リファレンスページをご参照ください。

  • Microsoft Fabric OneLake のストレージロケーションにリージョンのエンドポイントを使用する場合は、Microsoft Fabricの容量と同じリージョンを使用します。これは、Snowflakeアカウントをホストしているリージョンとも同じにする必要があります。

ステップ2:Snowflakeにストレージの場所へのアクセスを許可する

  1. Microsoftの許可リクエストページへの URL を取得するには、 DESCRIBE EXTERNAL VOLUME コマンドを使用します。以前に作成した外部ボリュームの名前を指定します。

    DESC EXTERNAL VOLUME exvol;
    

    次のプロパティの値を記録します。

    プロパティ

    説明

    AZURE_CONSENT_URL

    Microsoftのアクセス許可リクエストページへの URL。

    AZURE_MULTI_TENANT_APP_NAME

    アカウント用に作成されたSnowflakeクライアントアプリケーションの名前。このセクションの後半のステップでは、このアプリケーションに許可されたストレージの場所でアクセストークンを取得するための権限を付与します。

    これらの値は次のステップで使用します。

  2. ウェブブラウザーで、Microsoftの許可リクエストページ(AZURE_CONSENT_URL)に移動します。

  3. Accept を選択します。このアクションは、Snowflakeアカウント用に作成されたAzureサービスプリンシパルが、テナント内の指定したリソースでアクセストークンを取得できるようにします。アクセストークンの取得が成功するのは、サービスプリンシパルにストレージアカウントレベルで適切な権限を付与した場合のみです(次のステップを参照)。

    Microsoftの権限リクエストページは、Snowflakeの企業サイト(snowflake.com)にリダイレクトされます。

  4. Microsoft Azureポータルにログインします。

  5. Azure Services » Storage Accounts に移動します。Snowflakeサービスプリンシパルがアクセスする必要があるストレージアカウント名を選択します。

    注釈

    外部ボリュームの IAM 権限はコンテナレベルではなく、ストレージアカウントレベルで設定する必要があります。

  6. Access Control (IAM) » Add role assignment を選択します。

  7. Storage Blob Data Contributor ロールを選択して、Snowflakeサービスプリンシパルに読み取りと書き込みのアクセスを許可します。

    注釈

    Storage Blob Data Contributor ロールは外部ボリュームの場所への書き込みアクセスを許可します。書き込みアクセスを完全に構成するには、外部ボリュームの ALLOW_WRITES パラメーターを TRUE (デフォルト値)に設定します。

  1. + Select members を選択します。

  1. Snowflakeサービスプリンシパルを検索します。これは DESC EXTERNAL VOLUME 出力(ステップ1)の AZURE_MULTI_TENANT_APP_NAME プロパティにあるIDです。AZURE_MULTI_TENANT_APP_NAME プロパティで、アンダースコアの 前にある 文字列を検索します。

    重要

    • このセクションのMicrosoftリクエストページでリクエストされたSnowflakeサービスプリンシパルをAzureが作成するのに、1時間以上かかる場合があります。サービスプリンシパルがすぐに利用できない場合は、1~2時間待ってから、もう一度検索してください。

    • サービスプリンシパルを削除すると、外部ボリュームは機能しなくなります。

    Azure Storage Consoleでロールの割り当てを追加する
  2. Review + assign を選択します。

    注釈

    ロールを割り当てると、変更が有効になるまで最大10分かかることがあります。詳細については、Microsoft Azureドキュメントの 症状 - ロールの割り当て変更が検出されない をご参照ください。

ステップ3: ストレージへのアクセスを確認する

Snowflakeがストレージプロバイダーに正常に認証できることを確認するには、 SYSTEM$VERIFY_EXTERNAL_VOLUME 関数を呼び出します。

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_external_volume');

注釈

次のエラーを受け取った場合は、アカウント管理者がSnowflakeデプロイメントリージョンで AWS STS をアクティブ化する必要があります。手順については、AWS ドキュメントで AWS リージョンで AWS STS を管理する をご参照ください。

Error assuming AWS_ROLE:
STS is not activated in this region for account:<external volume id>. Your account administrator can activate STS in this region using the IAM Console.

Snowsight で外部ボリュームを構成する

  1. Snowsight にサインインします。

  2. 左下隅にある自身の名前 » Switch role を選択し、次に ACCOUNTADMIN または CREATE EXTERNAL VOLUME 権限を持つロールを選択します。

    詳細については、 プライマリロールの変更 をご参照ください。

  3. ナビゲーションメニューで Catalog » External data を選択します。

  4. External volumes タブを選択します。

  5. + Create を選択します。

  6. Microsoft Azure & OneLakeNext の順に選択します。

  7. Prerequisites ページから、 Azure tenant ID に、Azureテナント ID を指定します。

    Azureテナント ID を見つけるには、Microsoft Entraドキュメント内の Microsoft Entraテナント ID を見つける方法 をご参照ください。

  8. Next を選択します。

  9. Grant storage access ページから、Snowflakeにストレージの場所へのアクセス権を付与するには、次のステップに従います。

    1. Snowflakeがお使いのAzureストレージまたはMicrosoft OneLake に接続することに同意するには、 Provide consent を選択します。

      Microsoftの権限リクエストページが、新しいブラウザのタブに開きます。

    2. Microsoftの権限リクエストページから、 Accept を選択します。このアクションは、Snowflakeアカウント用に作成されたAzureサービスプリンシパルが、テナント内の指定したリソースでアクセストークンを取得できるようにします。アクセストークンの取得が成功するのは、サービスプリンシパルにストレージアカウントレベルで適切な権限を付与した場合のみです(次のステップを参照)。

      Microsoftの権限リクエストページは、Snowflakeの企業サイト(snowflake.com)にリダイレクトされます。

    3. Snowflakeで、 Multi-tenant app name フィールドから、アカウント用に作成されたSnowflakeクライアントアプリケーションの名前をテキストエディターにコピーします。次のステップでは、このアプリケーションに許可されたストレージの場所でアクセストークンを取得するための権限を付与します。

  10. 許可されたストレージの場所でアクセストークンを取得する権限をアプリケーションに付与するには、次のステップに従います。

    1. Microsoft Azureポータルにログインします。

    2. Azure Services » Storage Accounts に移動します。Snowflakeサービスプリンシパルがアクセスする必要があるストレージアカウント名を選択します。

      注釈

      外部ボリュームの IAM 権限はコンテナレベルではなく、ストレージアカウントレベルで設定する必要があります。

    3. Access Control (IAM) » Add role assignment を選択します。

    4. Storage Blob Data Contributor ロールを選択して、Snowflakeサービスプリンシパルに読み取りと書き込みのアクセスを許可します。

      注釈

      Storage Blob Data Contributor ロールは外部ボリュームの場所への書き込みアクセスを許可します。書き込みアクセスを完全に構成するには、外部ボリュームの ALLOW_WRITES パラメーターを TRUE (デフォルト値)に設定します。

    5. + Select members を選択します。

    6. Snowflakeサービスプリンシパルを検索します。

      これは、前のステップでSnowflakeからコピーした マルチテナントアプリ名 です。

      重要

      • このセクションのMicrosoftリクエストページでリクエストされたSnowflakeサービスプリンシパルをAzureが作成するのに、1時間以上かかる場合があります。サービスプリンシパルがすぐに利用できない場合は、1~2時間待ってから、もう一度検索してください。

      • サービスプリンシパルを削除すると、外部ボリュームは機能しなくなります。

      Azure Storage Consoleでロールの割り当てを追加する
    7. Review + assign を選択します。

      注釈

      ロールを割り当てると、変更が有効になるまで最大10分かかることがあります。詳細については、Microsoft Azureドキュメントの 症状 - ロールの割り当て変更が検出されない をご参照ください。

  11. Snowflakeで、 Next を選択します。

  12. Snowflakeで外部ボリュームを構成するには、 Configure external volume ページで次のフィールドに入力します。

    フィールド

    説明

    External volume name

    外部ボリュームの名前を入力します。

    Storage base URL

    クラウドストレージの場所のベース URL を指定します。

    Access scope

    外部ボリュームに対して書き込み操作を許可するかどうかを指定します。次のテーブルの場合 Allow writes に設定する必要があります。

    • Snowflakeをカタログとして使用するIcebergテーブル。

    • 外部カタログを使用し、書き込み可能なIcebergテーブル。外部で管理されているIcebergテーブルは、 ALLOWED_WRITE_OPERATIONS パラメーターが TRUE に設定された、カタログにリンクされたデータベースを通じてアクセスすると書き込み可能です。

    Deltaテーブルファイルから作成されたIcebergテーブルの場合、このパラメーターを Allow writes に設定すると、SnowflakeがIcebergメタデータを外部ストレージに書き込めるようになります。詳細については、 Deltaベーステーブル をご参照ください。

    このパラメーターの値は、指定した各ストレージの場所のクラウドストレージアカウントに設定した権限と一致する必要があります。

    注釈

    外部管理Icebergテーブルの読み取りに外部ボリュームを使用する場合は、このフィールドをOffに設定します。外部Icebergカタログのテーブルを読み取る場合、SnowflakeはデータやIcebergメタデータファイルをクラウドストレージに書き込みません。

    Scope

    この外部ボリュームを、将来のIcebergテーブルのデフォルト保存先として設定する場所を選んでください。可能な値は次のとおりです。

    • Do not set a default:外部ボリュームをどこでもデフォルトとして設定しないでください。

    • Account:アカウント全体の下で作成されるIcebergテーブルのデフォルトとして外部ボリュームを設定します。

    • Specific database:指定したデータベース下に作成されるIcebergテーブルのデフォルトとして外部ボリュームを設定します。このデータベースを指定するには、 Specific database を選択したときに表示される Database ドロップダウンを使用します。

    • Specific schema:指定したスキーマ下に作成されるIcebergテーブルのデフォルトとして外部ボリュームを設定します。このスキーマを指定するには、表示される Database ドロップダウンを使用して、最初にスキーマの親データベースを選択してからスキーマを選択します。

    Comment (optional)

    外部ボリュームのコメントを指定します。

    Connectivity

    セキュリティ体制を強化するためにアウトバウンドプライベート接続を使用するかどうかを指定します。アウトバウンドプライベート接続の使用に関する情報については、 Microsoft Azure の外部ボリュームへのプライベート接続 をご参照ください。可能な値は次のとおりです。

    • Public (default):公共のインターネットを使用します。

    • Private (Azure Private Endpoint):アウトバウンドプライベート接続を使用します。

  13. Next を選択します。

    Verify connection & create volume ページでは、SnowflakeはAzureへの接続を確認し、「正常に接続されました」メッセージを表示します。

    注釈

    Snowflakeが接続を確認できない場合は、権限または外部ボリュームの構成を確認して、 Verify again を選択してください。

  14. Create を選択します。

次のステップ

外部ボリュームを構成したら、Icebergテーブルを作成できます。