【AWS】 Glue CrawlerでS3データを自動検出・テーブル登録してみた|1日1ハンズオン Day 39
こんにちは、ぽめら です。
本記事は1日1ハンズオン企画、第39回です!
前回に続き、AWS Glue に触れていきます🧙♂️
今回は Glue Crawler(クローラー) を使って、S3上のデータを自動検出し、Glue Data Catalog登録してみました。
1.はじめに
前回は、Glueの概要を眺めてどのようなサービスかを整理しました。
今回は実践として、S3上のデータをGlueでスキャンし、Catalog化(Athenaで検索可能な形に変換)にチャレンジしてみたいと思います。
これにより、Athenaなどの分析サービスで該当データを「テーブル」として扱えるようにできます。
フローイメージ👇
[S3(CSV)] → [Glue Crawler(自動スキャン)] → [Glue Data Catalog(テーブル化)] → [Athena(SQLクエリ)]2.Glue Crawlerとは
Glue Crawlerは、S3やRDSなどのデータソースを自動的にスキャンし、スキーマ情報(列名・型)をGlue Data Catalogに登録する仕組みです。
行ってくれる内容のイメージは下記👇
・自動スキーマ検出
👉ファイル構造を解析して列名・型を推定
・Data Catalog登録
👉スキーマをGlueのメタデータベースに保存
・再利用可能
👉Athena・Redshift Spectrumで参照可能なデータとして登録
・スケジュール化
👉定期クロールも可能
Crawler(徘徊する者)の名の通り、S3のファイルをル◯バのようにクロールして検出してくれるわけですね🧹
3.Glue CrawlerでS3上データを自動検出・テーブル登録してみた
今回の主な流れは下記の通りです。
S3 にサンプルデータを配置
Glue Crawlerの作成&実行(データ構造の検出)
Glue Data Catalogを確認
Athenaからクエリで確認
3-1.S3にサンプルデータを配置
まずはクロール対象となるS3データを用意。
① S3 バケットの作成
いつものように下記のように詳細指定をしてもOKだし、
aws s3api create-bucket \
--bucket pomera-handson-day39 \
--region ap-northeast-1 \
--create-bucket-configuration LocationConstraint=ap-northeast-1単純にバケット作成するだけなら mb コマンドでもOK!
aws s3 mb s3://pomera-handson-day39 --region ap-northeast-1
作ったら確認:
aws s3 ls
② サンプルデータの作成(今回はCSVファイルを用意)
echo "id,product,price" > crawler_sample.csv
echo "1,apple,120" >> crawler_sample.csv
echo "2,banana,150" >> crawler_sample.csv
echo "3,orange,200" >> crawler_sample.csv中身を一応確認。
cat crawler_sample.csvS3 にコピー。
aws s3 cp crawler_sample.csv s3://pomera-handson-day39/input/アップされているかを確認。
aws s3 ls s3://pomera-handson-day39/input/
3-2.Crawlerを作成
では、いよいよGlueコンソールからクローラーを作成します。
① Glue コンソールを開く


② Glue が 他AWSサービスにアクセスできるようにIAM ロールを設定
「Set up roles and users」をクリック

▼Step1:Glueで使うユーザー・ロールを選択
IAM ロールは流れで作成できるようなので、IAM ユーザーのみ選択しました(本当は分けた方がいいのはわかっているのですが、私はいつもの管理者権限を持ったIAM ユーザーを今回は使用しました🫠)。

▼Step2:S3へのアクセス権設定
Step1で個別のオリジナルのIAM ロールをすでに設定している方はここはデフォルトの「No additional access」でOK。
私は今回の学習用に対象バケットを選択して、Read and Write を許可した。

▼Step3:IAM ロールの指定
Glue用のIAM ロールを指定する。Defaultを選択すると最低限のアクセス権で作成も可能。もちろん個別のIAM ロールを選択することも可能。
私は今回Defaultで作成してみました。

▼Step4:確認画面
内容に問題なさそうであれば「Apply changes」!



③ クローラーを作成する
左側の「Data Catalog」欄にある「Crawlers」をクリック。

「Create Crawler」をクリック。

▼ Step1:任意の名前をつける

▼ Step2:クローラーの対象データソースを指定する
今回既存のテーブルを使用せず、新たに作成したファイルのスキャンを想定しているので「Not yet」で「Add a data source」をクリック。

データソースの指定を求められるので、今回は同一アカウント上のS3。で、S3のパスを指定してあげる(Browse S3でGUIでの選択も可能)。

<この設定での動作イメージ>
下記のようにCrawlerが動いてくれる想定です。
・s3://pomera-handson-day39/input/ にあるファイルを探索
・CSVのヘッダー行を読み取り、型を推定(id:int, product:string, price:int)
・Glue Data Catalog にテーブルとして登録
▼ Step3:IAM ロールを指定する

※ IAM ロールは②で作成したものを選択できる

※ Lake Formationを利用する場合はここで選択できる
▼ Step4:登録データベース・スケジュールを設定する
Crawlerの結果保存のためのデータベースと、スケジュールを設定します。

今回まだデータベースは作成してなかったので「target datavase」欄の「Add database」をクリック。するとデータベース名の設定ができる画面が立ち上がるので最低限名前をつけて「Create Database」をクリック。

先ほどのCrawlerページに戻り、ぐるぐる矢印の更新マークをクリックすると作成したデータベースが表示されるのでこれを選択します🌀

オプションは今回すっ飛ばして、スケジュールを設定します。今回は手動実行したいので「On demand」のままでOK。日次・週次など複数選択できるようになっています。


ここまでで問題なければ「Next」をクリック。

▼ Step4:確認画面
ここまで設定した内容が表示されるので、問題なければ「Create Crawler」をクリック。


3-3.Crawlerを実行
無事作成を終えたので、あとは実行するのみです…!
実行は簡単。Crawler詳細画面右上の「Run Crawler」をクリックするだけ🖱️


単純な内容だったからか、ボタンクリックですぐに終了しました🎉
3-4.Glue Data Catalogを確認
今回の作業は、Crawlerに構造をスキャンしてもらい、自動でData Catalog(テーブル)を出力してもらうための手順でした。というわけで、実行したものを確認しに行きます。
Glue左側メニューの「Data Catalog」>「Databases」>「Tables」をクリックすると作成されたテーブルが表示されているはずです👇

作成されたテーブル名「input」をクリックすると詳細が表示されます。
この画面上で「Schema」タブを選択する。

GlueがS3上のCSVをスキャン&スキーマを推定・登録してくれました!
このCatalog情報はAthenaなど他サービスから共通で参照できます。
3-5.Athenaからクエリしてみる
では、Glueで作成されたCatalogをAthenaで使ってみましょう。
Athena クエリエディタに移動。


「設定タブ」で出力バケットを設定。

Athena クエリエディタで、次のSQLを実行👇
SELECT * FROM input;結果:

👉 AthenaがGlue Data Catalogを参照し、S3上のデータをSQLで直接取得できました!「S3 → Glue → Athena」のデータパイプラインが完成です✨
4.まとめ
今回は、Glue Crawlerを使ってS3上のデータを自動検出し、Glue Data Catalogに登録してみました。
・Glue Crawler
👉S3のデータ構造を自動でスキャン、スキーマ情報を抽出してData Catalogにテーブルとして登録する
・Data Catalog
👉AthenaやRedshiftが参照するメタデータ辞書(テーブル構造)
手動でスキーマを作成しなくても、S3にファイルを置いたあとで実行すると、テーブル構造を自動的に認識・更新できる仕組みがGlue Crawlerということを学べました👀
多量のファイル処理が必要な場合などに使用するイメージですね。ふむ。
というわけで今日はここまで!
ではまた明日👋
5.参考リンク
・AWS Glue でのデータ検出とカタログ化
・クローラーでデータカタログの入力について
・Amazon Athena
