はじめに
最近、事業会社のIT部門で働いていますが、なんでもパートナー企業にお願いするのではなく、簡単なことは内製で対応したいと思っています。もちろん難しい事は品質を保つためにもプロの方に任せます。今回は他システムへデータ連携を行う必要があるのですが、Glueを使ってサクッとやってみたいと思います。
この記事の対象者
AWSの資格を取ったけど、実務経験がない人
要するに、AWSをちょっと知ってる人
作るもの
こんな感じで、すごくシンプルな構成を考えます。
とりあえず動かしてから覚える・・・これが事業会社の情シス向けなやり方だと思っています。
「トランザクションデータを分析するため、DWHにデータ連携してほしい」
と、いう要望に対して、わざわざパートナー企業にお願いせず(コストをかけず)サクッと内製でできたらカッコイイという感覚です。
レベル低くてすみません
前提
既にAurora PostgreSQLが立っている前提で話を進めます。AWS上に何かしらRDBMSが動いていて通信できれば問題ないと思います。その他、GlueからアクセスすることができるS3を用意してください。
まずはロール作成
Glueが動作するためのサービスロールを作成します。Glueのサービス自体の動作と、GlueがデータベースやS3にアクセスするためポリシーを設定します。
コネクション(connection)の作成
Glueの画面に遷移し、Auroraへ接続するためのコネクションを作成します
- Auroraへの接続情報を入力します
- ネットワークの設定を確認します ↑図の▶ Network options を選択します
- 自動でAuroraの存在するVPC、VPCサブネット、セキュリティグループが設定済みです
- ※このセキュリティグループに設定を追加します
- セキュリティグループに関しては、GlueとAuroraが接続できる必要があるので、補足説明します
ネットワーク設定の補足とセキュリティグループの設定
Glueはサーバレスのマネージドサービスなので、下図のような感じで、どこからでもAuroraに接続しようとします。そのため、AuroraとENI(Glue)が通信できるようにセキュリティグループを設定します。
- セキュリティグループの設定
ここでは、上で確認したAuroraに設定済みのセキュリティグループにGlueが通信できるようにインバウンドルールを設定します。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
すべてのトラフィック | すべて | すべて | Aurorに設定済みのセキュリティグループ |
Glue Studio 画面へ
- Relational DBノードには以下のプロパティを設定します
-
Name
- Relational DB
-
JDBC source*
- JDBC connection details にチェック
-
Connection name
- 先ほど作成した「Aurora_connection」を選択
-
対象テーブル
- m_code
-
Name
- 次にDrop Fieldノードを選択して、不要なフィールドを除去します
-
Name
- ノード名称に「Drop Field」を設定
-
Node Parents
- 呼び出し元ノード「Relational DB」を選択
-
DropField
- 削除するフィールド「type_nm」を選択
-
Name
- データ格納先のS3を設定します
- Name
- ノード名称に「Amazon S3」を設定
- Node Parents
- 呼び出し元ノード 「Drop Field」を選択
- Format
- フォーマットは「Parquet」を選択 CSVで出力することもできます
- Compression Type
- 高速な「Snappy」を選択します
- S3 Target Location
- 格納するS3を選択します ここでは「S3://XXXX/test01-glue」としています
- これでフローが完成しました
フローの実行
-
実行状況は左側のメニューの AWS Glue > Monitor (Job run monitoring)で確認できます
-
なんとファイルがいっぱい レコード数分できています Paquetファイルの内容確認はParquetViewerが便利です
コード修正
ファイルを一つにするためには、現状(2024-12-09現在)コードを修正する必要があります。コードは、「Script」ボタンを押すと表示されます
- .coalesce(1) を追加してパーティションを1つにします。性能は一旦無視します
- groupSize dinamic_frameのオプションでサイズを指定します このサイズより大きくなると分割されます
S3を確認すると、先ほどより大きな1つのファイルが格納されているはずです
終わりに
物凄く簡単に(雑に?)Glueを使ってみましたが、第一歩となれば幸いです。これをベースにSparkを勉強すると、もっと面白くなると思います。
この記事は一旦アップしますが、初心者の方々に見てもらった上で、分かりにくい点(もちろん間違いなども)ブラッシュアップ予定です。高価なETLツールの代わりとして是非使ってみてください!