はじめに
DataZone(プレビュー)を少し触ってみたので、備忘録的に記事にします。
現在、AWSでデータレイクを構築している場合、既存のGlueデータカタログが存在していると思います。それをDataZoneの管理下に置くというユースケースを想定し、実施してみました。
こちらのドキュメントを参考に実施しました。
前提条件
- 2023年7月22日に、DataZone(プレビュー)を利用して検証しています。GA時にはUIや挙動が変わる可能性があります。
- 米国東部 (バージニア北部)リージョン(us-east-1)を利用します。
- 既にドメインやプロジェクトは作成しています。
- 既にクローラーを実行し、取り込むGlueデータカタログは作成しています。
- 今回は、全てAdminユーザーで実行します。
やってみる
既存のデータカタログを確認する
そのデータベースに、2つのテーブル test_1
test_2
が作成されています。
DataZoneでデータソースを作成する
DataZoneのコンソール画面から、自身のドメインをクリックします。
データを取り込みたい対象のサブドメインを選択し、ドメインを選択をクリックします。
ここからは、データソースを作成の項目を埋めていきます。一部注意が必要なものだけ記載します。
AWS Glue データカタログのロールを読み取る:既存のロールはないので、新規に作成します。
アクセスロールを管理:こちらも同じく、新規に作成します。
プロジェクト:データソースを追加したいプロジェクトを選択します。このプロジェクト内で、このGlueデータカタログのデータがパブリッシュできるようになります。
データベース:今回用意した test-dz-db
を選択します。
Lake Formationで権限設定する
パブリッシュする前に、先ほどデータソースを作成した際に新規作成したIAM Roleに、Lake Formationで権限を付与します。
具体的には、以下のドキュメントに記載された作業を実施していきます。
Lake FormationのData Lake locationsで、Register locationをクリックします。
Amazon S3 path:Glueデータカタログの元データが保存されているS3バケットを入力します。
それ以外は特にいじらず、Register locationをクリックします。
Data lake permissionsをクリックして、検索欄に IAMAllowedPrincipals
を入力し、エンターを押します。
さらに検索欄に今回追加するデータベース test-dz-db
を入力し、エンターを押します。
IAMAllowedPrincipals
のpermissionsが残っていると、Lake Formationでの権限管理ではなくIAMでの管理となってしまいます。DataZoneはLake Formationの権限管理を使うため、このpermissionsはRevokeします。
次は、先ほどデータソースを作成した時に新規作成した2つのロールに権限を付与します。
これをしないと、DataZoneが既存のGlueデータカタログを読み取れません。
Grantをクリックします。
1つ目のDataSourceのロールは、以下のようにデータベースとテーブルを選択し、Table permissionsはDescribeのみを許可します。その後、Grantをクリックします。
2つ目のPublisherManagedのロールは、以下のようにデータベースとテーブルを選択し、Table permissionsはSelectとDescribe、Grantable permissionsもSelectとDescribeを許可します。その後、Grantをクリックします。
以上で、権限設定は完了です。
DataZoneでパブリッシュする
ここからは、DataZoneのデータポータル上で操作します。
自身のProjectをクリックし、PUBLISH DATAをクリックします。
Publishing agreement:今回は、defaultを選択します。
Data source:今回作成したデータソースである test-data-catalog
を選択します。
Database name:今回作成したデータソースの元のデータベース名を入力します。
Data Asset publishing:今回はActiveを選択します。Activeはパブリッシュの承認処理を挟まず、いきなりパブリッシュします。本番運用ではDraftを選択して、承認処理を挟んだ方が良いかと思います。
全て入力したら、CREATE PUBLISHING JOBをクリックします。
DataZoneでサブスクライブする
パブリッシュされたうちの1つの test_1
をクリックして、詳細ページを開きます。
その後、SUBSCRIBEをクリックします。
Project:サブスクライブしたいプロジェクトを選択します。
その下にはサブスクライブの理由を入力しますが、今回はtestとします。
その後、SUBSCRIBEをクリックします。
少し経つと、右上のチェックマークにオレンジ色の●が表示されるのでクリックし、Subscription Requestをクリックします。
APPROVEをクリックします。
これで、サブスクライブが承認されたことになります。
左のメニューから、サブスクライブしたプロジェクトをクリックすると、test_1がサブスクライブされています!
クエリ発行する
先ほどサブスクライブしたプロジェクトの右側にあるQuery dataをクリックします。
Athenaの画面に飛ぶので、データベース名に _sub_db
がつくデータベースを選択すると、今回サブスクライブしたテーブルがあるので、それにクエリを発行します。
見事に見えていますね。
注意点
①実運用の際の作業ユーザーについて
今回は、全ての作業をAdminユーザーで実行しました。
しかし、実運用の際はそれぞれのプロジェクトのユーザーやデータスチュワードが操作する場合があるのでご注意ください。
②Lake Formationで権限設定し忘れた場合について
その場合でも、パブリッシュ/サブスクライブまでは出来ちゃいます。
ただ、サブスクライブしたデータを見ると、以下のように Not granted
と表示され、クエリできない状態になります。
これは、データソースを作成した際に新規作成したロールが、データカタログを見に行けなかったためです。忘れないようにしましょう。
おわりに
DataZoneは権限管理が楽になるサービスですが、AWS上に存在しているリソースをDataZoneの世界に乗せてあげる必要があります。今回はロールなどを新規に作成した、かつAdminで作業したので簡単にいきましたが、既存のロール、ユーザー、VPC・・・など使うと躓くところが増えそうです。早くGAして実際の環境で試してみたいですね!!