0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unity Catalog 外部ロケーションの登録 (AWS)

Last updated at Posted at 2022-09-05

はじめに

Databricks Unity Catalogを利用すると、DefaultのS3 Bucket 以外のバケットにアクセスするために、外部ロケーションを資格情報とともに登録することができます。これによってAccess Tokenなどを指定せずにバケットに安全にアクセスすることが可能になります。
もちろん、従来通りの Access Keyベースや、Instance Profileを用いたアクセスも可能です。

外部ロケーションの登録には、こちらのマニュアルも併せてご覧ください

要件

  1. ストレージ資格情報を作成するには、Databricks アカウント管理者である必要があります。ストレージ資格情報を作成したアカウント管理者は、その所有権を他のユーザーまたはグループに委譲し、その権限を管理することができます。
  2. 外部ロケーションを作成するには、メタストア管理者またはCREATE EXTERNAL LOCATION権限を持つユーザーである必要があります。
  3. 外部ロケーションまたはストレージ クレデンシャルを作成または管理するには、ストレージにアクセスするUnityカタログ対応ワークスペースのワークスペース管理者である必要があります。
  4. ユーザーに読み取りと書き込みをさせる S3 バケットの名前には、ドット記法を使用できません(たとえば、incorrect.bucket.name.notation)バケットの命名に関する詳しいガイダンスについては、AWS バケット命名規則を参照してください。

Unity Catalogのセットアップについてはこちらをご覧ください。

S3 Bucketの作成

まずは、S3バケットを用意します。すでに作成済みの場合はスキップしてください。

今回は、以下のようなバケットを用意しました。

  • バケット名: db-uc-external (任意)
  • AWS リージョン : 東京(ap-northeast-1)
  • オブジェクト所有者:ACL無効
  • バケットのバージョニング : 有効にする (無効設定も可能)
  • デフォルトの暗号化: 有効にする(SSE-S3)
    --> 無効にすることも可能です。またSSE-KMSを利用する場合はマニュアルをご覧ください。

IAM Role & Policy の作成

次に作成したS3バケットへアクセスできる IAM Role & Policyを準備します。

1) IAM Role作成

ロール名:uc-external-role (任意)

IAMロールの作成、または既存のロールの更新を行います。
image.png

新規のロールを作成しTrust RelationshipにてJSONモードで以下にアップデートします。

<AWS_ACCOUNT_ID>: S3作成のAWS Account ID
<AWS_IAM_ROLE_NAME>: 先ほど作成したIAM Role
<DATABRICKS_ACCOUNT_ID> を変更。

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

2) IAM policyを作成し上記のロールに追加します。

<AWS_ACCOUNT_ID>: S3作成者のAWS Account ID
<AWS_IAM_ROLE_NAME>: uc-external-role (先ほど作成したロール名)

{
 "Version": "2012-10-17",
 "Statement": [
     {
         "Action": [
             "s3:GetObject",
             "s3:GetObjectVersion",
             "s3:PutObject",
             "s3:DeleteObject",
             "s3:ListBucket",
             "s3:GetBucketLocation"
         ],
         "Resource": [
             "arn:aws:s3:::<BUCKET>/*",
             "arn:aws:s3:::<BUCKET>"
         ],
         "Effect": "Allow"
     },
     {
         "Action": [
             "sts:AssumeRole"
         ],
         "Resource": [
             "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<AWS_IAM_ROLE_NAME>"
         ],
         "Effect": "Allow"
     }
   ]
}

ストレージ資格情報の作成

ワークスペースにログインし、「データ」- [ストレージ資格情報]を選択。右上の[資格情報を作成]をクリック
image.png

先ほど作成したIAM Roleを登録します。
ストレージ資格情報名:uc-external-rol (任意)
IAMロール(ARN): 先ほど作成したIAMロール ARN
image.png

他のユーザーに付与する場合は、資格情報の権限設定にて付与します。
image.png

ストレージロケーション(外部の格納場所)を登録

ワークスペースにログインし、「データ」- [外部の格納場所]を選択。右上の[格納場所の作成]をクリック
image.png

外部の格納場所:db-uc-external (任意)
URL: s3://db-uc-external
ストレージ資格情報: uc-external-role
image.png

ストレージへのアクセス権を付与します。
image.png

右上の「接続テスト」にてパスすればOKです。
image.png

ノートブックで外部テーブル作成を実行してみよう

こちらのサンプルノートブックをインポートして、外部テーブルを作成出来るかご確認ください。

クラスター実行する際には、クラスターは DBR11.1以降&アクセスモードはSingle Userであることを確認してください。

サンプルノートブックでは以下を実行しサンプルデータを使って、新しい外部テーブル(table1)を作成しております。

-- Create an example catalog and schema to contain the new table
CREATE CATALOG IF NOT EXISTS ext_catalog;
USE CATALOG ext_catalog;
CREATE SCHEMA IF NOT EXISTS ext_schema;
USE ext_schema;
CREATE TABLE ext_catalog.ext_schema.table1
LOCATION 's3://db-uc-external/table1'
AS SELECT * from samples.nyctaxi.trips;

以下のように、テーブルタイプが External として登録され、ストレージロケーションが外部のバケットになっていれば成功です。
image.png

さいごに

UnityCatalogセットアップについてはこちらもご覧ください。
https://qiita.com/maroon-db/items/57cee03cef202c839b94

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?