🦊

AWS Glueを触ってみた(S3→データ変換→S3)

2022/08/11に公開

AWSのETL(抽出、変換、ロード)ツールにGlueというサービスがあるのは認識していましたが、使い方を把握していなかったので、触ってみた結果を残していきます。AI・BIの文脈で、バラバラに存在しているデータを前処理して一箇所にまとめたい、というケースは結構あると思うので、使用するケースは今後増えていきそうです。

Glueとは?

フルマネージドなETL(抽出、変換、ロード)サービスです。S3・RDS・Redshift等にあるデータを取得・変換して、これまたS3・RDS・Redshift等に吐き出すことが可能です。今回は、シンプルな例として、S3にあるcsvを読み込んで、カラム名を変換した上で、S3上の別のバケットにcsvで吐き出す流れについて記載します。

↓やりたいことのイメージ

Glueを使うにあたって、理解しておく必要のある用語がいくつかあるので、記載します。

データカタログ

入力データのメタデータを保存しておく場所です。具体的には、上記の図で言うと、idbefore_family_namebefore_given_nameなどのスキーマの情報を保存します。データカタログは後述するクローラが自動で作成してくれます。

クローラ

データカタログにメタデータテーブルを作成する役割を担います。データソース(S3・RDS等)にアクセスし、スキーマ情報を抽出します。

ジョブ

実際にETL作業を行う部分です。データカタログのデータを指定して、どのように変換、出力するかを定義します。単純な変換処理であれば、GUIでポチポチ操作すれば簡単に定義できますが、少し複雑な処理をしたい場合は、自分でスクリプトを書く必要があります。スクリプトは、現在、PythonとScalaに対応しているみたいです。

使用手順

事前準備

テスト用のcsvを適当なS3バケットに配置します。ファイルの中身は、以下のように適当です。

sample_data.csv
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