Unity Catalog メタストアを作成する

この記事では、Unity Catalog メタストアを作成し、ワークスペースにリンクする方法について説明します。

重要

Unity Catalog に対して自動的に有効になったワークスペースの場合、この記事の手順は必要ありません。 Databricks は、2023 年 11 月 8 日に Unity Catalog の新しいワークスペースを自動的に有効にし、アカウント間で段階的にロールアウトを進めました。 この記事の手順に従う必要があるのは、ワークスペースがあり、ワークスペース リージョンにメタストアがまだない場合のみです。 メタストアがリージョンに既に存在するかどうかを確認するには、「 Unity Catalog の自動有効化」を参照してください。

メタストアは、Unity Catalog 内のデータの最上位のコンテナーです。 Unity Catalog メタストアは、セキュリティ保護可能なオブジェクト (テーブル、ボリューム、外部ロケーション、共有など) と、それらへのアクセスを制御するアクセス許可に関するメタデータを登録します。 各メタストアは、データを整理できる 3 レベルの名前空間 (catalog.schematable) を公開します。 組織が運用されているリージョンごとに 1 つのメタストアが必要です。 Unity Catalog を操作するには、ユーザーはリージョン内のメタストアにアタッチされているワークスペースにいる必要があります。

メタストアを作成するには、次の操作を行います。

  1. AWS アカウントで、必要に応じて、マネージドテーブルとボリュームのメタストアレベルのストレージ用のストレージの場所を作成します。

    メタストア レベルのストレージが必要かどうかを判断するのに役立つ情報については、「 (省略可能) メタストア レベルのストレージを作成する 」および「 ストレージ内でデータが物理的に分離されている」を参照してください。

  2. AWS アカウントで、そのストレージの場所へのアクセスを許可する IAMロールを作成します。

  3. Databricks で、メタストアを作成し、ストレージの場所をアタッチして、ワークスペースをメタストアに割り当てます。

この記事で説明されている方法に加えて、 Databricks Terraform プロバイダー、特に databricks_metastore リソースを使用してメタストアを作成することもできます。 Unity Catalog がメタストアにアクセスできるようにするには、 databricks_metastore_data_accessを使用します。ワークスペースをメタストアにリンクするには、 databricks_metastore_assignment を使用します。

始める前に

開始する前に、メタストアやマネージド ストレージなど、Unity Catalog の基本的な概念を理解しておく必要があります。 「 Unity Catalog とは」を参照してください。

また、すべてのセットアップ手順について、次の要件を満たしていることを確認する必要があります。

  • Databricksアカウント管理者である必要があります。

  • Databricksアカウントは、プレミアムプラン以上である必要があります。

  • メタストアレベルのルートストレージを設定する場合は、AWS アカウントで S3 バケット、IAMロール、IAM ポリシー、およびクロスアカウント信頼関係を作成できる必要があります。

ステップ 1 (オプション): AWS でメタストアレベルのマネージドストレージ用の S3 バケットを作成する

この手順 (省略可能) では、マネージド テーブルとボリュームのデータをメタストア レベルで格納するために Unity Catalog で必要な S3 バケットを作成します。 S3 バケットは、自分の AWS アカウントに作成します。 メタストア レベルのストレージが必要かどうかを判断するには、「 (省略可能) メタストア レベルのストレージを作成する」を参照してください。

  1. AWSで、S3バケットを作成します。

    この S3 バケットは、Unity Catalog のマネージド テーブルとマネージド ボリュームのメタストア レベルのストレージの場所になります。 このデフォルトの保存場所は、カタログ・レベルおよびスキーマ・レベルでオーバーライドできます。 「マネージド ストレージ」を参照してください

    要件:

    • メタストアが複数ある場合は、それぞれに専用の S3 バケットを使用する必要があります。

    • データにアクセスするワークスペースと同じリージョンでバケットを見つけます。

    • バケット名にドット表記を含めることはできません(例:incorrect.bucket.name.notation)。バケットの命名方法の詳細については、「AWSバケットの命名規則」を参照してください。

  2. s3://で始まる S3 バケットパスを書き留めます。

  3. S3バケットでKMS暗号化を有効にする場合は、KMS暗号化キーの名前を書き留めます。

ステップ 2 (オプション): ストレージの場所にアクセスするための IAMロールを作成する

この手順では、ステップ 1 を完了した場合にのみ必要になりますが、前の手順で作成した S3 バケットにアクセスするために Unity Catalog で必要な IAMロールを作成します。

ロールの作成は 2 段階のプロセスです。 まず、ロールを作成し、 一時的な 信頼関係ポリシーを追加して、後の手順で変更します。 ロールは自己仮定型である必要があるため、つまり、ロール自体を信頼するように構成する必要があるため、ロールの作成 後に 信頼ポリシーを変更する必要があります。 したがって、自己仮定ステートメントを追加する前に、ロールが存在している必要があります。 自己仮定の役割については、この Amazonブログ記事を参照してください。

  1. DatabricksアカウントIDを見つけます。

    1. Databricksアカウントコンソールにログインします。

    2. ユーザー名をクリックします。

    3. メニューから、アカウントIDの値をコピーします。

  2. AWS で、 カスタム信頼ポリシーを使用して IAMロールを作成します。

  3. [カスタム信頼ポリシー]フィールドに次のポリシーJSONを貼り付け、<DATABRICKS-ACCOUNT-ID>をステップ1で見つけたDatabricksアカウントID(AWSアカウントIDではない)に置き換えます。

    このポリシーは、Unity CatalogがDatabricksユーザーに代わってバケット内のデータにアクセスするロールを引き受けることができるように、クロスアカウントの信頼関係を確立します。これは、PrincipalセクションのARNによって指定されます。Databricksによって作成されたロールを参照する静的な値です。変更しないでください。

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {
          "AWS": [
            "arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL"
          ]
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "<DATABRICKS-ACCOUNT-ID>"
          }
        }
      }]
    }
    

    AWS GovCloudを使用している場合は、以下のポリシーを使用してください。

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {
          "AWS": [
        "arn:aws-us-gov:iam::044793339203:role/unity-catalog-prod-UCMasterRole-1QRFA8SGY15OJ"
          ]
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "<DATABRICKS-ACCOUNT-ID>"
          }
        }
      }]
    }
    
  4. アクセス許可ポリシーの構成をスキップします。この構成は、後のステップで追加します。

  5. IAMロールを保存します。

  6. 信頼関係ポリシーを変更して、「自己引き受け型」にします。

    1. 保存したIAMロールに戻り、[信頼関係]タブに移動します。

    2. 信頼関係ポリシーを編集し、次のARNを「Allow」ステートメントに追加します。

      <YOUR-AWS-ACCOUNT-ID><THIS-ROLE-NAME>を実際のIAMロール値に置き換えます。

      "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"
      

    ポリシーは次のようになります(DatabricksアカウントIDとIAMロール値を使用するように、置き換えテキストが更新されています)。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL",
              "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"
             ]
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "<DATABRICKS-ACCOUNT-ID>"
            }
          }
        }
      ]
    }
    
  7. AWSで、S3バケットと同じAWSアカウントにIAMポリシーを作成します。

    予期しない問題を回避するには、次のサンプルポリシーを使用して、次の値を置き換える必要があります。

    • <BUCKET>:前のステップで作成したS3バケットの名前。

    • <KMS-KEY>:オプション。暗号化が有効になっている場合は、S3バケットの内容を暗号化するKMSキーの名前を指定します。暗号化が無効になっている場合は、IAMポリシーのKMSセクション全体を削除します。

    • <AWS-ACCOUNT-ID>:現在のAWSアカウントのアカウントID(Databricksアカウントではありません)。

    • <AWS-IAM-ROLE-NAME>:前のステップで作成したAWS IAMロールの名前。

    {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Action": [
                 "s3:GetObject",
                 "s3:PutObject",
                 "s3:DeleteObject",
                 "s3:ListBucket",
                 "s3:GetBucketLocation"
             ],
             "Resource": [
                 "arn:aws:s3:::<BUCKET>/*",
                 "arn:aws:s3:::<BUCKET>"
             ],
             "Effect": "Allow"
         },
         {
             "Action": [
                 "kms:Decrypt",
                 "kms:Encrypt",
                 "kms:GenerateDataKey*"
             ],
             "Resource": [
                 "arn:aws:kms:<KMS-KEY>"
             ],
             "Effect": "Allow"
         },
         {
             "Action": [
                 "sts:AssumeRole"
             ],
             "Resource": [
                 "arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"
             ],
             "Effect": "Allow"
         }
       ]
    }
    

    Unity Catalogに対してより制限の厳しいIAMポリシーが必要な場合は、Databricksの担当者にお問い合わせください。

  8. IAMポリシーをIAMロールにアタッチします。

    IAMロールの [Permissions ] タブで、作成した IAM ポリシーをアタッチします。

ステップ 3: メタストアを作成し、ワークスペースをアタッチする

各 Databricks リージョンには、独自の Unity Catalog メタストアが必要です。

メタストアは、組織が運営を行っているリージョンごとに作成します。これらの各リージョンのメタストアは、その地域の任意の数のワークスペースにリンクできます。リンクされた各ワークスペースには、メタストア内のデータの同じビューがあり、データアクセス制御はワークスペース間で管理できます。他のメタストアのデータにアクセスするには、Delta Sharingを使用します。

メタストアレベルのストレージを作成することを選択した場合、メタストアは前のステップで作成した S3 バケットと IAMロールを使用します。

メタストアを作成するには、次の手順を実行します。

  1. Databricksアカウントコンソールにログインします。

  2. カタログ アイコン カタログ」 をクリックします

  3. [メタストアを作成]をクリックします。

  4. 次の項目を入力します。

    • メタストアの名前。

    • メタストアをデプロイするリージョン。

      これは、データへのアクセスに使用するワークスペースと同じリージョンに存在する必要があります。また、前に作成したストレージバケットのリージョンと同じであることを確認してください。

    • (オプション)「ステップ 1 (オプション): AWS でメタストアレベルのマネージドストレージ用の S3 バケットを作成する」で作成したバケットとロールの S3 バケットパス (s3://を省略できます) と IAMロール名。

  5. [作成]をクリックします。

  6. メッセージが表示されたら、メタストアにリンクするワークスペースを選択します。

    詳細については、「 Unity Catalog のワークスペースを有効にする」を参照してください。

  7. メタストア管理者ロールをグループに転送します。

    メタストアを作成するユーザーは、その所有者であり、メタストア管理者とも呼ばれます。 メタストア管理者は、カタログなどのメタストアに最上位のオブジェクトを作成し、テーブルやその他のオブジェクトへのアクセスを管理できます。 Databricks では、メタストア管理者ロールをグループに再割り当てすることをお勧めします。 「 メタストア管理者を割り当てる」を参照してください。

  8. マネージド ボリュームへのアップロードの Databricks 管理を有効にします。

    Databricks では、クロスオリジン リソース共有 (CORS) を使用して、Unity Catalog の マネージド ボリューム にデータをアップロードします。 「 CORS の Unity Catalog ストレージ アカウントを構成する」を参照してください。

マネージド ストレージを既存のメタストアに追加する

メタストア レベルの管理ストレージはオプションであり、自動的に作成されたメタストアには含まれません。 複数のワークスペースのデータを一元的に格納するデータ分離モデルを使用する場合は、メタストア レベルのストレージをメタストアに追加できます。 Delta Sharing を使用してノートブックを共有する場合、または個人用ステージング場所を使用する Databricks パートナーの場合は、メタストア レベルのストレージが必要です。

管理ストレージ」も参照してください。

要件

  • 少なくとも 1 つのワークスペースが Unity Catalog メタストアに接続されている必要があります。

  • 必要な Databricks アクセス許可:

    • 外部ロケーションを作成するには、メタストア管理者であるか、 CREATE EXTERNAL LOCATION 特権と CREATE STORAGE CREDENTIAL 特権を持つユーザーである必要があります。

    • メタストア定義にストレージの場所を追加するには、アカウント管理者である必要があります。

  • 必要なAWS権限:S3バケット、IAMロール、IAMポリシー、およびクロスアカウントの信頼関係を作成する機能。

ステップ 1: 保存場所を作成する

ステップ 1 (オプション): AWS でメタストアレベルのマネージドストレージ用の S3 バケットを作成する」の手順に従って、メタストアと同じリージョンの AWS アカウントに専用の S3 バケットを作成します。

ステップ 2: Unity Catalog で外部ロケーションを作成する

この手順では、先ほど作成したバケットを表す外部ロケーションを Unity Catalog に作成します。

  1. メタストアにアタッチされているワークスペースを開きます。

  2. カタログ アイコン「カタログ 」(Catalog) をクリックしてカタログエクスプローラーを開きます。

  3. [ + 追加 ] ボタンをクリックし、[ 外部ロケーションの追加] を選択します。

  4. [ Create a new external location ] ダイアログで、[ AWS Quickstart (Recommended)] をクリックし、[ Next] をクリックします。

    AWS Quickstart は、外部ロケーションを設定し、ストレージ認証情報を作成します。 [ 手動 ] オプションを使用する場合は、S3 バケットへのアクセスを許可する IAMロールを手動で作成し、Databricks でストレージ資格情報を自分で作成する必要があります。

  5. [ Create external location with Quickstart ] ダイアログで、[ Bucket Name ] フィールドに S3 バケットへのパスを入力します。

  6. [ 新しいトークンの生成 ] をクリックして、Databricks と AWS アカウント間の認証に使用する個人用アクセストークンを生成します。

  7. トークンをコピーし、 [ クイック スタート] で [起動] をクリックします。

  8. 起動する AWS CloudFormation テンプレート ( [クイック作成スタック] というラベル) で、トークンを [Databricks Account Credentials] (Databricks アカウント資格情報 ) フィールドに貼り付けます。

  9. ページ下部の利用規約に同意します (AWS CloudFormation がカスタム名で IAM リソースを作成する可能性があることを認めます)。

  10. スタックの作成」をクリックします。

    CloudFormation テンプレートが Databricks での外部ロケーション オブジェクトの作成を完了するまでに数分かかる場合があります。

  11. Databricks ワークスペースに戻り、カタログ エクスプローラー[外部ロケーション] ウィンドウに移動します。

    カタログエクスプローラーの左側の表示枠で、下にスクロールして「外部 データ」(External Data) > 外部ロケーション」(External location) の順にクリックします。

  12. 新しい外部ロケーションが作成されたことを確認します。

    自動生成された外部ロケーションでは、命名構文 db_s3_external_databricks-S3-ingest-<id>を使用します。

  13. 外部ロケーションに対する CREATE MANAGED STORAGE 権限を自分に付与します。

    1. 外部ロケーション名をクリックして、詳細ウィンドウを開きます。

    2. [ アクセス許可 ] タブで、[ 許可] をクリックします。

    3. <external location>付与」ダイアログで、「プリンシパル」フィールドで自分自身を選択し、「CREATE MANAGED STORAGE」を選択します。

    4. [付与] をクリックします。

ステップ 3: メタストアに格納場所を追加する

メタストア ストレージ バケットを表す外部ロケーションを作成したら、それをメタストアに追加できます。

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. カタログ アイコン カタログ」 をクリックします

  3. メタストア名をクリックします。

  4. 自分がメタストア管理者であることを確認します。

    そうでない場合は、[ 編集 ] をクリックし、自分自身をメタストア管理者として割り当てます。 この手順が完了したら、自分自身の割り当てを解除できます。

  5. ( 設定 ) タブで、[S3 bucket path] (S3 バケットパス) の横にある [ Set] をクリックします。

  6. ( メタストアルートの設定 ) ダイアログで、外部ロケーションの作成に使用した S3 バケットパスを入力し、[ Update] をクリックします。

    このパスは、一度設定すると変更できません。

メタストアを削除する

Databricks アカウントを閉鎖する場合、または Unity Catalog メタストアによって管理されるデータへのアクセスを削除する別の理由がある場合は、メタストアを削除できます。

警告

メタストアによって管理されるすべてのオブジェクトは、Databricks ワークスペースを使用してアクセスできなくなります。 この操作は元に戻せません。

マネージド テーブルの データとメタデータは、30 日後に自動的に削除されます。 クラウド ストレージ内の外部テーブル データは、メタストアの削除の影響を受けません。

メタストアを削除するには:

  1. メタストア管理者として、 アカウントコンソールにログインします。

  2. カタログ アイコン カタログ」 をクリックします

  3. メタストア名をクリックします。

  4. [ 構成 ] タブで、右上にある 3 つのボタン メニューをクリックし 、[削除] を選択します。

  5. 確認ダイアログで、メタストアの名前を入力し、[ 削除] をクリックします。