AWS GlueとLake Formationを試してみた(Vol.4)

Glue and Lake Formation

前回のハンズオンの続きです。

データガバナンスにどんなサービスを使い、どのようなことが出来るのか。

以下のYoutubeを参考にさせていただき学習します。

以下の流れで構成されており、今回は「Glueクローラー」です。

  • Glue Data Catalog
  • Data Access Control
  • Glue Crawler
  • Glue Data Catalog Revisited
  • Glue Job and Glue Studio
  • Glue Workflow
  • Advanced Topics
目次

Glueクローラーとは

Glue Crawler

データストアを自動的に回り、AWS Glue カタログでデータストアのテーブルを作成するために使用されます。

サーバレスです。

GlueクローラーはAWS Glueの機能で、データカタログを自動で作成します。
非常に多くのデータセットがある場合は助かる機能です。

Glueクローラーの役目

クローラーがサポートするデータストア

Glueクローラーがは以下のようなデータストアをサポートします。

クローラーがサポートするデータストア

クローラーの分類子

  • 分類子は、データストアのデータを読み取りフォーマットを識別してスキーマを作成するため、クローラーによって使用されます
  • クローラーは自動的に適する分類子を使いますが、分類子を選択することはできません。
  • ビルトインの分類子がたくさんあります。またカスタム分類子を作成することもできます
  • もし分類子がデータフォーマットを認識できない場合、間違ったスキーマが作成される場合があります。

ビルトイン分類子

  • AVRO
  • ORC
  • PARQUET
  • JSON
  • BSON
  • XML
  • CSV
  • JDBC Sources

カスタム分類子

  • CSV
  • XML
  • JSON
  • Grok Pattern

データストアにJDBC接続するためのGlueコネクション

JDBCデータストアをクロールする際は、JDBC接続文字列やクレデンシャルで作成したGlueコネクションを用いてJDBCデータストアに接続します。

データストアにJDBC接続するためのGlueコネクション

Glueクローラーの実行方法

Glueクローラーの実行方法

コンソールからオンデマンドで実行できます。CLIやSDKでAPIを呼び出すことでもクローラーを実行できます。

また、クローラーに付随するスケジュール機能を使い、スケジュールに基づいてクローラーを実行できます。

最後に、クローラーをパイプラインまたはワークフローの一部として実行することもできます。

ハンズオン

今回は以下がポイントです。

  • RDSのデータベースに作成されたテーブルをGlueクローラーでカタログ化する

提供された資材のうち、今回は「4_Glue_Crawler」を用います。

提供資材1
提供資材2

[IAM] クローラー向けのロール作成

[IAM] クローラー向けのロール作成開始
[IAM] クローラー向けのロール作成1
[IAM] クローラー向けのロール作成2
[IAM] クローラー向けのロール作成3

ロール名を入力したらあとはデフォルトのまま「Create role」します。

[IAM] クローラー向けのロール作成4

[Lake Formation] クローラー向けの権限設定

前回のハンズオンで、Lake Formationにデータベースを作成済みです。

[Lake Formation] クローラー向けの権限設定1

Glueクローラーにテーブルを作成できるよう許可を与えます。

[Lake Formation] クローラー向けの権限設定2

先程作成したIAMロール(test_crawler_role)とデータベース(testdatabase)を指定します。

[Lake Formation] クローラー向けの権限設定3

クローラーにテーブル作成権限を与えるため「Create table」をチェックしてGrantします。

[Lake Formation] クローラー向けの権限設定4

登録できました。
Glueクローラーがこの特定のロールで実行されるときに、テーブル作成権限があるということになります。

[Lake Formation] クローラー向けの権限設定5

[RDS] Auroraインスタンス構築

インスタンス構築

「Launch_RDS_Database_Instance.pdf」の手順書を参考に進めます。

現在はServerless v2が主流なのですが、Data APIを使えずクエリエディタで接続できません。
v2の使用は今回の主旨ではないので、古いですがv1を使えるバージョンを選択しました。

AWS公式ドキュメント「Aurora Serverless v1のクエリエディタの使用」

引用元:https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/query-editor.html

数分待つとStatusが「Available」となり起動完了です。

[RDS] Auroraインスタンス構築

テーブル作成、データ登録

クエリエディタを起動します。

クエリエディタを起動1
クエリエディタを起動2

接続できました。

クエリエディタを起動3

「RDS_Table_Data_Create_Script.sql」に沿ってSQLを実行します。

Auroraにテーブル作成
Auroraでレコード登録

想定どおりレコードを登録できているか確認します。

Auroraでレコード参照
Auroraでレコード参照結果

以上でRDSインスタンスを起動し、テーブル作成とレコード登録を完了しました。

[Glue] コネクション作成&テスト接続

AWS Glueを開きます。

[Glue] コネクション作成&テスト接続1
[Glue] コネクション作成&テスト接続2

jdbc:protocol://host:port/db_name
jdbc:postgresql://{host}:5432/postgres

host(エンドポイント)は、RDSのデータベース情報から確認できます。

RDSインスタンスのエンドポイント確認
[Glue] コネクション作成&テスト接続3

接続成功するまでにハマったので「Glueコネクション」についてメモ

・サブネットはプライベート(接続失敗したときはパブリックだった)

Glueコネクションの参考情報1

・サブネットのセキュリティグループ

  参考:https://docs.aws.amazon.com/ja_jp/glue/latest/dg/setup-vpc-for-glue-access.html

Glueコネクションの参考情報2
Glueコネクションの参考情報3
Glueコネクションの参考情報4

コネクションを作成完了しました。

[Glue] コネクション作成&テスト接続4

テスト接続を行います。

[Glue] コネクション作成&テスト接続5

前回のハンズオンで作ったIAMロールを選択します。

[Glue] コネクション作成&テスト接続6

RDSへ接続成功です。

[Glue] コネクション作成&テスト接続7

[Glue] クローラー作成&実行

[Glue] クローラー作成&実行1
[Glue] クローラー作成&実行2
[Glue] クローラー作成&実行3
[Glue] クローラー作成&実行4
[Glue] クローラー作成&実行5
[Glue] クローラー作成&実行6
[Glue] クローラー作成&実行7

Glueクローラーを作成しました。

[Glue] クローラー作成&実行8

[Glue] クローラー実行

[Glue] クローラー作成&実行9

数分待ちます。

[Glue] クローラー作成&実行10
[Glue] クローラー作成&実行11

およそ5分。終わったようです。

[Glue] クローラー作成&実行12

[Glue] テーブル確認

RDSから吸い上げた「postgres_public_employees」テーブルが追加されていました。

[Glue] テーブル確認

[Lake Formation]テーブル確認

Lake Formationで見てみます。こちらも同様に追加されていました。

[Lake Formation]テーブル確認

おわりに

今回は以下の手順で、LakeFormationのよるアクセス制御を学びました。

  • Glueクローラー用のIAMロール作成
  • Lake Formationでクローラーにデータカタログのテーブル作成を許可
  • RDSにGlueクローラーでJDBC接続し、自動でデータカタログを作成

単にクローラー作成するだけと思いきや、Glueコネクションのサブネットセキュリティグループで思わずハマってしまいました。

後続のハンズオンではもう少し設定変更が必要かもしれませんが、今回の設定内容を備忘録として残しておきます。

参考:VPCおよびエンドポイント

↓のエンドポイントはAuroraサーバレスを作成したら自動生成されました(Aurora削除すると消えます)

参考:RDS

Auroraサーバレス v1(PostgreSQL互換、11.16)。
セキュリティグループはVPCエンドポイントのSGでした。

参考:Glueコネクション

セキュリティグループはVPCエンドポイント、RDSと同じSGでした。

セキュリティグループは見直す必要があるかもしれないわね

S3エンドポイント、Glueエンドポイントの必要性も確認したいわ

そうだね。今後のハンズオンで紐解けなければ、どこかのタイミングで確認してみるよ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

個人ブログ「Tech Up Labo」を運営する、おーすけ と申します。

IT業界に携わるエンジニアとして、クラウドサービスを用いたデータ分析関連、Webサービス関連の開発において、私自身が学んだことや実際に経験したこと、あるいはその他の情報に基づき情報発信しております。

これらの情報が私自身の備忘録となる一方で、時には他の方が抱える問題に対する解決の一助になることを願っております。

■保有資格
AWS Certified Solutions Architect Associate
JDLA Deep Learning For GENERAL 2020#2
JDLA Deep Learning For ENGINEER 2022#2
PMP、Python3 エンジニア認定基礎、他

コメント

コメント一覧 (1件)

目次