AWS Glueのハンズオン!基本コンポーネント(データカタログ、クローラー、ETLジョブ)を使って、簡単なETL処理を実施しよう!【初心者向け】
おはようございます!
ベンジャミンの木村と申します!
今回AWS DEA試験のためGlueの理解を深めるため、ChatGPTと壁打ちしながらハンズオンを作ってみました。 せっかくなので、同じ境遇の方の参考になればと、ハンズオンをブログ投稿します。
目次
- ハンズオンの内容
- AWS Glueで使われる専門用語の説明
- 1. 事前準備
- 2. データカタログの作成とクローラーの設定
- 3. データカタログの確認
- 4. Glue Studioを使っての簡単なETLジョブの作成
- まとめ
ハンズオンの内容
作業としては、CSV形式のデータを処理し、データカタログを作成します。そのデータカタログの情報を元に、データを加工し、JSON形式に変換するETL(Extract, Transform, Load)ジョブを構築します。
AWS GlueのCrawlerやGlue Jobの使い方を体験することで、Glueを用いたデータ処理パイプラインの基礎を理解することが目的です。
AWS Glueで使われる専門用語の説明
データカタログとは?
データカタログは、メタデータを集めて整理するための場所です。具体的に言うと、下記のようなすべてのメタデータ(データに関する情報)を記録しておくための「データベース」として機能します。
- データがどこに保存されているか(S3やデータベース))
- データの種類(CSVファイル、JSONファイルなど)
- データの内容(列名やデータ型など)
これは様々な場所も形式も違うデータを加工できるように備わった機能になります。
ETLとは?
ETLとは、データを「取り出す(Extract)」「変換する(Transform)」「ロードする(Load)」という3つのステップを通じて、データを別の場所や形式に移動したり加工したりするプロセスのことを指します。
例えば、あなたが会社の売上データを集めて分析を行いたい場合、ETLプロセスを使って次のような流れを作ります
- 取り出す(Extract):データベースから、月ごとの売上データを取り出します。
- 変換する(Transform):取り出したデータを整理し、必要な情報を統一します。例えば、売上金額を各地域の通貨に合わせて変換したり、日付をわかりやすい形式に変えたりします。
- ロードする(Load):変換後のデータを、分析用のデータウェアハウスや分析ツールにロードして、最終的に経営者向けのレポートやダッシュボードに使える状態にします。
1. 事前準備
1-1. S3のバケットの作成
こちらは下記AWSより提供されている公式ページより手順をご確認ください。
設定値については、下記画像を参考に作成いただければ大丈夫です!(名前以外はデフォルト値にしています。)
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/create-bucket-overview.html
S3バケット設定値画像
1-2. サンプルデータの準備
下記データでCSVファイルを作ってください。ファイル名はsample_data.csvなどで大丈夫です!
作成したら項番1-1で作成したS3バケットに入れてください!
id,name,age
1,Alice,30
2,Bob,25
3,Charlie,35
2. データカタログの作成とクローラーの設定
2-1. Glueコンソールに移動する
下記URLを叩いて、Glueのコンソール画面へ移動してください。
https://ap-northeast-1.console.aws.amazon.com/glue/home?region=ap-northeast-1#/v2/getting-started
2-2. 左ペインの「Crawlers」→「Create crawler」を選択する
2-3.「Name」に任意の名前(例: test-kim-crawler
)を入力し、「Next」を選択する
2-4.「Add a data souce」を選択する
2-5. データストアに「S3」を選び、先ほど作成したS3バケットのパスを指定し、「Add an S3 data source」を選択する
2-6. Data SourcesにS3が指定されていることが確認できたら、「Next」を選択する
2-7. IAMロールを作成(「新しいロールを作成」を選択)し、「Next」を選択する
2-8. 「Add database」を選択する
※こちらクリックすると、別タブでdatabases作成画面へ移動します。
2-9. 「Name」に任意の名前(例: test-kim-
database)を入力し、「Create database」を選択する
※こちらのdatabaseがデータカタログの保存領域になります。
2-10. 項番9-8のcrawlerの作成画面に戻って、「Next」を選択する
2-11. 設定内容を確認し、内容に間違いがなければ「Create crawler」を選択します
2-12. IAMロールのコンソール画面へ移動し、S3にアクセスできる権限を追加する
※添付写真では「AmazonS3FullAccess」を指定していますが、実際に運用する場合は最小権限で設定してください。
※IAMロールは項番2-7で作ったものに対して「許可を追加」でポリシーの設定をしてください
https://us-east-1.console.aws.amazon.com/iam/home?region=ap-northeast-1#/roles
2-13. 作成したクローラーのコンソール画面へ移動する
2-14. 「Run crawler」実行して、データカタログにテーブルを追加する
3. データカタログの確認
3-1. 左ペインから「Databases」→「作成したDatabase」を確認する
3-2. Tablesにデータのメタデータ(データに関する情報)が登録されていることを確認する
3-3. テーブル名をクリックする
3-4. テーブルにCSVのスキーマ情報(カラム名、データ型)が登録されていることを確認する
4. Glue Studioを使っての簡単なETLジョブの作成
ここではCSVデータのageカラムの値に10を足した値のage_plus_10の列を新しく作る加工と、そのデータをCSVからJSONに変換する処理を行います。
4-1. 項番1で作成したS3に、Glue jobから出力されるファイルを入れるフォルダを作成する
S3のフォルダ作成の手順は下記AWS公式ページを参考にしてください。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/using-folders.html
4-2. Glueのコンソールに戻り、左ペインの「ETL jobs」→「Visual ETL」を選択する。
4-3. ソースを下記の通り設定する
- Source: AWS Glue Data Catalog
- Database: 項番2-9で作成したDatabase
- Table: 項番3-2で確認したTable
4-4. 項番2-7で作成したIAMロールと同じものを設定する
4-5. 下記の通り設定し、SQLを実行してデータを加工する
※今回は年齢を10足したカラムを追加する加工を実行します。
※SQL aliasesの値と、SQL Queryのテーブル名(source_table)は同じにしてください
- Transforms: SQL Query
- Node parents: AWS Glue Data Catalog
- Input sources: AWS Glue Data Catalog
- SQL aliases: source_table
- SQL query
SELECT *, age + 10 AS age_plus_10 FROM source_table
4-6. ターゲットを下記の通り設定する
- ターゲット: Amazon S3
- Node parents: SQL Query
- Format: JSON(変換後の型を指定)
- Comparession: None(データの圧縮方法)
- S3 Target Location: 項番4-1で作成したフォルダ
4-7. 画面左上部の「Untitled job」を編集し、任意の名前にしてください
4-8. Jobを「Save」→「Run」で実行する
4-9. 「Runs」タブより実行中のjobのステータスを確認する
statusがSucceededになればOK!
4-10. 項番4-1で作成したフォルダの中身を確認する
下記のようにデータが出力される。
出力されたファイルの中身を確認し、下記のようになっていればOK!
{"id":1,"name":"Alice","age":30,"age_plus_10":40}
{"id":2,"name":"Bob","age":25,"age_plus_10":35}
{"id":3,"name":"Charlie","age":35,"age_plus_10":45}
まとめ
いかがでしたでしょうか?
今回AWS Glueを使った基本的な操作をハンズオン形式でご紹介いたしました。
今年から出ましたAWS DEAの試験でも今回のAWS Glueの操作は出題範囲ですので、一度ハンズオンを実施してから、テストを受けてみれば、より理解度が上がること間違いなしです!