AWS Glueを触ってみた(S3→データ変換→S3)
AWSのETL(抽出、変換、ロード)ツールにGlueというサービスがあるのは認識していましたが、使い方を把握していなかったので、触ってみた結果を残していきます。AI・BIの文脈で、バラバラに存在しているデータを前処理して一箇所にまとめたい、というケースは結構あると思うので、使用するケースは今後増えていきそうです。
Glueとは?
フルマネージドなETL(抽出、変換、ロード)サービスです。S3・RDS・Redshift等にあるデータを取得・変換して、これまたS3・RDS・Redshift等に吐き出すことが可能です。今回は、シンプルな例として、S3にあるcsvを読み込んで、カラム名を変換した上で、S3上の別のバケットにcsvで吐き出す流れについて記載します。
↓やりたいことのイメージ
Glueを使うにあたって、理解しておく必要のある用語がいくつかあるので、記載します。
データカタログ
入力データのメタデータを保存しておく場所です。具体的には、上記の図で言うと、id
、before_family_name
、before_given_name
などのスキーマの情報を保存します。データカタログは後述するクローラが自動で作成してくれます。
クローラ
データカタログにメタデータテーブルを作成する役割を担います。データソース(S3・RDS等)にアクセスし、スキーマ情報を抽出します。
ジョブ
実際にETL作業を行う部分です。データカタログのデータを指定して、どのように変換、出力するかを定義します。単純な変換処理であれば、GUIでポチポチ操作すれば簡単に定義できますが、少し複雑な処理をしたい場合は、自分でスクリプトを書く必要があります。スクリプトは、現在、PythonとScalaに対応しているみたいです。
使用手順
事前準備
テスト用のcsvを適当なS3バケットに配置します。ファイルの中身は、以下のように適当です。
id,before_family_name,before_given_name
1,やまもと,いちろう
2,ささき,じろう
3,こいけ,さぶろう
4,さとう,しろう
5,たなか,ごろう
6,なかむら,ろくろう
7,かとう,しちろう
8,やまだ,はちろう
9,みうら,きゅうろう
10,ふじい,じゅうろう
11,さいとう,じゅういちろう
クローラの作成
Glueの管理コンソールに入り、まずはクローラを作成していきます。
デフォルトの設定のまま、進んでいきます。
データストアにS3を選択し、先ほどのcsvを配置したバケットを選びます。
Glue用のIAMロールを作成します。名前だけ入力すれば、先ほどのS3バケットへのアクセス権を持ったロールを自動で作成してくれるようです。
スケジュールの設定をします。定期的に実行させることもできるようですが、「オンデマンドで実行」を選択します。
クロールした結果であるスキーマ情報の出力先を設定します。「データベースの追加」から、新規作成します。
あとは、何も考えず進んでいけば、以下の通り、作成が完了します。「今すぐ実行しますか?」の部分を押下して、実行します。
Glueの管理コンソールのサイドメニューから「テーブル」を選ぶと、意図通りスキーマが保存されていることが確認できます。
ジョブの作成
続いて、ジョブを作成していきます。
Source:S3、Target:S3を選択して、「Create」します。
すると、以下のように、3つの箱(Data source、Transform、Data target)が予めセットされているので、順番に設定していきます。
Data sourceの箇所は、先ほど作成したデータカタログを選択します。
Transformの箇所で、カラム名の変換を行います。Dropを設定することで、項目の削除も簡単にできそうです。
Data targetの箇所で、出力のフォーマット(今回はcsvにしました)、出力先のバケットを指定します。
Job datailsのタブでエラーが出ているようなので、確認してみます。
まずはIAMロールの設定が必要なようなので、クローラを作成する時に作ったIAMロールを設定します。
まだエラーが残っているようなので、下の方までスクロールして「Advanced properties」の箇所を展開します。Scriptのファイル名が無効だと怒られているようなので、job.py
と設定します。
ここまで来たら設定完了です。右上にある「Save」を押して、「Run」を実行すると、ジョブが走り出します。
結果
出力先のS3に、以下のようなcsvファイルが作成されました。
カラム名が意図通り変更されています。
id,after_family_name,after_given_name
1,やまもと,いちろう
2,ささき,じろう
3,こいけ,さぶろう
4,さとう,しろう
5,たなか,ごろう
6,なかむら,ろくろう
7,かとう,しちろう
8,やまだ,はちろう
9,みうら,きゅうろう
10,ふじい,じゅうろう
11,さいとう,じゅういちろう
終わりに
今回のように、カラム名を変更する、くらいのシンプルな例だとすごく簡単に動かすことができました。
若干ネットワークの設定がめんどくさそうですが、S3→RDSについても手を動かしてみて、詰まったポイントなどまとめていければと思います。
Discussion