外部ロケーションの管理
この記事では、 外部ロケーションの一覧表示、表示、更新、アクセス許可の付与、ファイル イベントの有効化、および削除の方法について説明します。
Databricks では、ボリュームを使用してファイル アクセスを管理することをお勧めします。 Unity Catalogボリュームとはを参照してください。
外部ロケーションを説明する
権限やワークスペースへのアクセスなど、外部ロケーションのプロパティを表示するには、カタログエクスプローラ または SQL コマンドを使用できます。
- Catalog Explorer
- SQL
- サイドバーで、「
カタログ 」をクリックします。
- クイック アクセス ページで、 外部データ > ボタンをクリックして外部 ロケーション タブに移動します。
- 外部ロケーションの名前をクリックすると、そのプロパティが表示されます。
ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 <location-name>
を外部ロケーションの名前に置き換えます。
DESCRIBE EXTERNAL LOCATION <location-name>;
外部ロケーションに助成金を表示する
外部ロケーションに許可を表示するには、次のようなコマンドを使用します。 オプションで、結果をフィルタリングして、指定したプリンシパルの許可のみを表示できます。
SHOW GRANTS [<principal>] ON EXTERNAL LOCATION <location-name>;
プレースホルダーの値を置き換えます。
<location-name>
:クラウドテナントのS3バケットからの読み取りと書き込みを許可する外部ロケーショの名前。<principal>
:アカウントレベルのユーザーのメールアドレスまたはアカウントレベルのグループの名前。
グループまたはユーザー名にスペースまたは @
記号が含まれている場合は、アポストロフィではなくバッククォート(
)を使用します。
外部ロケーションに対するアクセス許可の付与
このセクションでは、ノートブックまたはSQLクエリで カタログエクスプローラ と SQL コマンドを使用して、外部ロケーションに対するアクセス許可を付与および取り消す方法について説明します。代わりに Databricks CLI または Terraform を使用する方法については、 Databricks Terraform のドキュメント と What is the Databricks CLI?.
外部ロケーションに対して次の権限を付与できます。
CREATE EXTERNAL TABLE
CREATE EXTERNAL VOLUME
CREATE MANAGED STORAGE
必要なアクセス許可 : メタストアと外部ロケーションで参照されるストレージ資格情報の両方に対する CREATE EXTERNAL LOCATION
特権、または外部ロケーションに対する MANAGE
特権。 メタストア管理者は、デフォルトでメタストアに CREATE EXTERNAL LOCATION
を持っています。
外部ロケーションの使用を許可するには:
- Catalog Explorer
- SQL
- サイドバーで、「
カタログ 」をクリックします。
- クイック アクセス ページで、 外部データ > ボタンをクリックして外部 ロケーション タブに移動します。
- 外部ロケーションの名前をクリックして、そのプロパティを開きます。
- [ アクセス許可 ]をクリックします。
- ユーザーまたはグループにアクセス許可を付与するには、各 ID を選択し、[ 付与 ]をクリックします。
- ユーザーまたはグループから権限を取り消すには、各 ID を選択してから [ 取り消し] をクリックします。
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。この例では、外部ロケーションを参照する外部テーブルを作成する権限を付与します。
GRANT CREATE EXTERNAL TABLE ON EXTERNAL LOCATION <location-name> TO <principal>;
プレースホルダーの値を置き換えます。
<location-name>
:クラウドテナントのS3バケットからの読み取りと書き込みを許可する外部ロケーショの名前。<principal>
:アカウントレベルのユーザーのメールアドレスまたはアカウントレベルのグループの名前。
グループまたはユーザー名にスペースまたは @
記号が含まれている場合は、アポストロフィではなくバッククォートで囲みます。 たとえば、`finance team`。
外部ロケーションの所有者を変更する
外部ロケーションの作成者は、その最初の所有者です。所有者を別のアカウント レベルのユーザーまたはグループに変更するには、ノートブックまたは Databricks SQL エディターで次のコマンドを実行するか、 カタログ エクスプローラーを使用します。
必要な権限 : 外部ロケーションの所有者または MANAGE
権限を持つユーザー。
プレースホルダーの値を置き換えます。
<location-name>
:資格情報の名前。<principal>
:アカウントレベルのユーザーのメールアドレスまたはアカウントレベルのグループの名前。
ALTER EXTERNAL LOCATION <location-name> OWNER TO <principal>
外部ロケーションを読み取り専用としてマークする
ユーザーに外部ロケーションへの読み取り専用アクセスを許可する場合は、カタログエクスプローラーを使用して外部ロケーションを読み取り専用としてマークできます。
外部ロケーションを読み取り専用にする:
- ストレージ認証情報の基になる IAMロールによって付与された書き込み権限や、その外部ロケーションに付与された Unity Catalog 権限に関係なく、ユーザーがこれらの外部ロケーションのファイルに書き込むことを防止します。
- ユーザーがそれらの外部ロケーションにマネージドテーブルまたはボリュームを作成できないようにします。
- 作成時にシステムが外部ロケーションを適切に検証できるようにします。
外部ロケーションは、作成時に読み取り専用にすることができます。
カタログエクスプローラーを使用して、外部ロケーションの作成後に読み取り専用ステータスを変更することもできます。
- サイドバーで、「
カタログ 」をクリックします。
- クイック アクセス ページで、 外部データ > ボタンをクリックして外部 ロケーション タブに移動します。
- 外部ロケーションを選択し、[
Test connection] ボタンの横にある [] メニューをクリックして、[ Edit] を選択します。
- 編集ダイアログで、 詳細オプション をクリックし、 読み取り専用使用に制限 オプションを選択します。
- 更新 をクリックします。
外部ロケーションでの暗号化アルゴリズムの構成
AWS は、S3 のデータを保護するために、Amazon S3 マネージドキー (SSE-S3) または AWS KMS キー (SSE-KMS) を使用したサーバー側の暗号化 (SSE) をサポートしています。 S3バケットで SSE 暗号化が必要な場合は、外部ロケーションで暗号化アルゴリズムを設定して、外部テーブルとUnity Catalog内のボリュームが S3 バケット内のデータにアクセスできるようにすることができます。SSE は、Delta Sharing を使用して共有される外部テーブルではサポートされていません。 詳細については、「 S3 with KMSの暗号化の設定」を参照してください。
外部ロケーションとして使用するバケットの SSE-3 キーと SSE-KMS キーを設定する方法については、「ステップ 1: AWS KMSでキーを作成または選択する」を参照してください。
-
サイドバーで、「
カタログ 」をクリックします。
-
カタログ ウィンドウの上部にある
歯車アイコンをクリックし、 外部ロケーション を選択します。
-
外部ロケーションを選択します。 外部ロケーションは、ストレージ資格情報に IAMロールを使用する必要があります。
-
接続のテスト ボタンの横にある ケバブ メニューをクリックし、 編集 を選択します。
-
編集ダイアログで、[ 詳細オプション ] をクリックします。
-
暗号化アルゴリズム で、暗号化キーに応じて SSE-SE または SSE-KMS を選択します。
SSE-KMS の場合は、[ Encryption KMS key arn ] の下に、S3 ロケーションにアクセスするときにクライアントが参照する KMS キーの ARN を貼り付けます。
-
更新 をクリックします。
(推奨)外部ロケーションのファイルイベントを有効にする
プレビュー
この機能は パブリック プレビュー段階です。
クラウド・プロバイダーによってプッシュされる変更通知を取り込む場合、外部ロケーションのマネージド・ファイル・イベントを有効にすると、次の利点があります。
- Auto Loaderのファイル通知の設定が簡単になります。具体的には、
cloudFiles.useManagedFileEvents
をtrue
に設定することで、Auto Loader で通知のようなパフォーマンスでインクリメンタル ファイル検出が可能になります。「Auto Loaderファイル通知モードとは」を参照してください。 - ジョブのファイル到着トリガーの効率と容量を改善します。「新しいファイルの到着時にジョブをトリガーする」を参照してください。
始める前に
DatabricksS3で SQS キューを設定するようにする場合、外部ロケーションは、そのための適切な権限を付与するストレージ認証情報を参照する必要があります。手順については、次の手順を参照してください。
S3 で独自の SQS キューを作成する場合は、ストレージ認証情報で表される ID に、それらの SQS キューに対する次のアクセス許可が必要です。
sqs:ReceiveMessage
sqs:DeleteMessage
sqs:PurgeQueue
手順 1: Databricks が S3 のファイル イベントにアクセスできることを確認する
外部ロケーション セキュリティ保護可能なオブジェクトのファイル イベントを有効にする前に、 S3 アカウントが、発行するファイル イベントへのアクセス権を Databricks に付与するように構成されていることを確認する必要があります。 Databricks で S3 のファイルイベントを設定する場合は、Databricks に適切なアクセス権があることも確認する必要があります。
このアクセス権の割り当ては、IAM S3Databricksと を使用して バケットにアクセスできるロールを設定する場合に推奨される手順ですUnity Catalog 。Databricks がバケットのイベント通知を設定およびサブスクライブできることを確認するには、次のようにします。
-
IAMロールを取得します。
-
サイドバーで、「
カタログ 」をクリックします。
-
クイック アクセス ページで、 外部データ > ボタンをクリックして外部 ロケーション タブに移動します。
-
外部ロケーションを選択します。
-
[ 概要 ] タブで、 資格情報 の名前をクリックします。
-
ストレージ認証情報 の [概要 ] タブで、 IAMロール (ARN) をコピーします。
これは次の手順で使用します。
-
-
AWSアカウントにログインします。
-
IAM に移動し、ステップ 1 でコピーしたロールを検索します。
-
[Permissions ポリシー ] で、IAMロールに関連付けられている IAM ポリシーまたはポリシーを見つけて開きます。
-
ポリシーまたはポリシーを開き、次のプロパティを含むものがあることを確認します。
このポリシーにより、Databricks アカウントは、バケットのイベント通知設定の更新、SNS トピックの作成、SQS キューの作成、および SQS キューの SNS トピックへのサブスクライブを行うことができます。
<BUCKET>
を S3 バケットの名前に置き換えます。JSON{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ManagedFileEventsSetupStatement",
"Effect": "Allow",
"Action": [
"s3:GetBucketNotification",
"s3:PutBucketNotification",
"sns:ListSubscriptionsByTopic",
"sns:GetTopicAttributes",
"sns:SetTopicAttributes",
"sns:CreateTopic",
"sns:TagResource",
"sns:Publish",
"sns:Subscribe",
"sqs:CreateQueue",
"sqs:DeleteMessage",
"sqs:ReceiveMessage",
"sqs:SendMessage",
"sqs:GetQueueUrl",
"sqs:GetQueueAttributes",
"sqs:SetQueueAttributes",
"sqs:TagQueue",
"sqs:ChangeMessageVisibility",
"sqs:PurgeQueue"
],
"Resource": ["arn:aws:s3:::<BUCKET>", "arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
},
{
"Sid": "ManagedFileEventsListStatement",
"Effect": "Allow",
"Action": ["sqs:ListQueues", "sqs:ListQueueTags", "sns:ListTopics"],
"Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
},
{
"Sid": "ManagedFileEventsTeardownStatement",
"Effect": "Allow",
"Action": ["sns:Unsubscribe", "sns:DeleteTopic", "sqs:DeleteQueue"],
"Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
}
]
}「ステップ 1: IAMロールを作成する」も参照してください。
-
このポリシーが見つからない場合は、 IAMロールに追加します。
ステップ 2: カタログエクスプローラ を使用して外部ロケーションのファイル イベントを有効にする
ファイルイベントを有効にするには:
-
サイドバーで、「
カタログ 」をクリックします。
-
クイック アクセス ページで、 外部データ > ボタンをクリックして外部 ロケーション タブに移動します。
-
外部ロケーションを選択します。
-
接続のテスト ボタンの横にある ケバブ メニューをクリックし、 編集 を選択します。
-
編集ダイアログで、[ 詳細オプション ] をクリックします。
-
[ファイルイベントを有効にする ]を選択します。
-
「ファイル」イベント・タイプ を選択します。
自動 : (推奨) Databricks でサブスクリプションとイベントを設定する場合は、これを選択します。
提供 : SQS キューを自分で設定済みの場合は、これを選択します。
-
[ 提供 ファイル] イベント タイプを選択した場合は、既存の SQS キューの [キュー URL ] に [
https://sqs.<region>.amazonaws.com/<account-ID>/<queue-name>
] を入力します。 -
更新 をクリックします。
-
数秒待ってから、メインの外部ロケーション編集ページで [Test connection ] をクリックして、ファイル イベントが正常に有効化されたことを確認します。
ファイルイベントの制限
管理対象ファイル・イベントには、以下の制限があります。
-
イベント スループットは、1 秒あたりに取り込まれる 2000 ファイルに制限されています。
-
Managed File Events では、
resourceTags
オプションを使用してクラウド・リソースにタグを付けることはできません。代わりに、Auto Loader サービスによってキューとサブスクリプション リソースが作成された後で、クラウド コンソールを使用してリソースにタグを付けることができます。 -
Unity Catalog メタストアのルート ストレージの場所に対してファイル通知を設定することはできません。
具体的には、 Unity Catalogで外部ロケーションオブジェクトが定義されていないストレージロケーションでファイルイベントを使用してファイル通知を設定することはできません。 Unity Catalog の古い実装には、外部ロケーションに関連付けられていないメタストア ルート ストレージの場所が含まれます。新しい実装、特に Unity Catalog が自動的に有効になったワークスペース上の実装では、メタストア レベルのストレージには外部ロケーションが定義されており、マネージド ファイル イベントはそのストレージの場所でサポートされます。 私が思うように混乱している場合は、「 Unity Catalog の自動有効化」を参照してください。
外部ロケーションの変更
外部ロケーションの所有者または MANAGE
権限を持つユーザーは、外部ロケーションの名前変更、URI の変更、およびストレージ資格情報の変更を行うことができます。
外部ロケーションの名前を変更するには、次の操作を行います。
ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 プレースホルダーの値を置き換えます。
<location-name>
:ロケーションの名前。<new-location-name>
:ロケーションの新しい名前。
ALTER EXTERNAL LOCATION <location-name> RENAME TO <new-location-name>;
クラウドテナント内の外部ロケーションが指すURIを変更するには、次の手順を実行します。
ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 プレースホルダーの値を置き換えます。
<location-name>
:外部ロケーションの名前。<url>
:場所がクラウドテナント内のアクセスを承認する必要がある新しいストレージURL。
ALTER EXTERNAL LOCATION location_name SET URL '<url>' [FORCE];
FORCE
オプションは、外部テーブルが外部ロケーショに依存している場合でも、URLを変更します。
外部ロケーションが使用するストレージ資格情報を変更するには、次の手順を実行します。
ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 プレースホルダーの値を置き換えます。
<location-name>
:外部ロケーションの名前。<credential-name>
: クラウド テナント内の場所の URL へのアクセスを許可するストレージ資格情報の名前。
ALTER EXTERNAL LOCATION <location-name> SET STORAGE CREDENTIAL <credential-name>;
外部ロケーションの削除
外部ロケーションを削除 (ドロップ) するには、その所有者であるか、外部ロケーションに対する MANAGE
権限を持っている必要があります。 外部ロケーションを削除するには、次の操作を行います。
ノートブックまたは Databricks SQL エディターで次のコマンドを実行します。 括弧内の項目はオプションです。<location-name>
を外部ロケーションの名前に置き換えます。
DROP EXTERNAL LOCATION [IF EXISTS] <location-name>;