0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Glueはじめの一歩

Last updated at Posted at 2024-12-09

はじめに

 最近、事業会社のIT部門で働いていますが、なんでもパートナー企業にお願いするのではなく、簡単なことは内製で対応したいと思っています。もちろん難しい事は品質を保つためにもプロの方に任せます。今回は他システムへデータ連携を行う必要があるのですが、Glueを使ってサクッとやってみたいと思います。

この記事の対象者

AWSの資格を取ったけど、実務経験がない人
要するに、AWSをちょっと知ってる人

作るもの

こんな感じで、すごくシンプルな構成を考えます。
とりあえず動かしてから覚える・・・これが事業会社の情シス向けなやり方だと思っています。

image.png

「トランザクションデータを分析するため、DWHにデータ連携してほしい」
と、いう要望に対して、わざわざパートナー企業にお願いせず(コストをかけず)サクッと内製でできたらカッコイイという感覚です。
:sweat:レベル低くてすみません:bow:

前提

既にAurora PostgreSQLが立っている前提で話を進めます。AWS上に何かしらRDBMSが動いていて通信できれば問題ないと思います。その他、GlueからアクセスすることができるS3を用意してください。

まずはロール作成

Glueが動作するためのサービスロールを作成します。Glueのサービス自体の動作と、GlueがデータベースやS3にアクセスするためポリシーを設定します。

  • 「ロールを作成」ボタンを押下
    image.png

  • 信頼されたエンティティを選択
    image.png

  • ユーズケースはGlueを選択そして「次へ」
    image.png

  • ポリシーを設定
    雑に付けましたが、本番では最小限に絞りましょう!
    image.png

  • ロール名は AWSGlueServiceRole-test01 としました
    image.png

コネクション(connection)の作成

Glueの画面に遷移し、Auroraへ接続するためのコネクションを作成します

  • AWS Glueを選択
    image.png

  • Data connections を選択し、「Create connection」ボタンを押下
    image.png

  • Data sourceにAuroraを選択して「NEXT」
    image.png

  • Auroraへの接続情報を入力します
    • Database instances: 接続するAuroraを選択します。例)XXXX-XXX-instance-2
    • Database name: データベース名 例)MYDB
    • Username: 接続するユーザ名 例)mydbadmin
    • Password: 接続するユーザのパスワード
      image.png

  • ネットワークの設定を確認します ↑図の▶ Network options を選択します
    • 自動でAuroraの存在するVPC、VPCサブネット、セキュリティグループが設定済みです
    • ※このセキュリティグループに設定を追加します
    • セキュリティグループに関しては、GlueとAuroraが接続できる必要があるので、補足説明します

image.png

  • コネクションの名前は「Aurora_connection」としました
    image.png

ネットワーク設定の補足とセキュリティグループの設定

Glueはサーバレスのマネージドサービスなので、下図のような感じで、どこからでもAuroraに接続しようとします。そのため、AuroraとENI(Glue)が通信できるようにセキュリティグループを設定します。

image.png

  • セキュリティグループの設定
    ここでは、上で確認したAuroraに設定済みのセキュリティグループにGlueが通信できるようにインバウンドルールを設定します。
タイプ プロトコル ポート範囲 ソース
すべてのトラフィック すべて すべて Aurorに設定済みのセキュリティグループ

Glue Studio 画面へ

  • 赤丸で囲んだ「AWS Glue Studio」を選択
    image.png

  • そして、「Visual ETL」を選択
    image.png

  • データソースである、「Relational DB」を選択
    image.png


  • Relational DBノードには以下のプロパティを設定します
    • Name
      • Relational DB
    • JDBC source*
      • JDBC connection details にチェック
    • Connection name
      • 先ほど作成した「Aurora_connection」を選択
    • 対象テーブル
      • m_code

image.png


  • 次にDrop Fieldノードを選択して、不要なフィールドを除去します
    • Name
      • ノード名称に「Drop Field」を設定
    • Node Parents
      • 呼び出し元ノード「Relational DB」を選択
    • DropField
      • 削除するフィールド「type_nm」を選択

image.png

  • データ格納先のS3を設定します
    - Name
    - ノード名称に「Amazon S3」を設定
    - Node Parents
    - 呼び出し元ノード 「Drop Field」を選択
    - Format
    - フォーマットは「Parquet」を選択 CSVで出力することもできます
    - Compression Type
    - 高速な「Snappy」を選択します
    - S3 Target Location
    - 格納するS3を選択します ここでは「S3://XXXX/test01-glue」としています

image.png

  • これでフローが完成しました

フローの実行

  • 「Run」ボタンをおして、S3に正しくデータが格納されるかを確認します
    image.png

  • 実行状況は左側のメニューの AWS Glue > Monitor (Job run monitoring)で確認できます
    image.png

  • なんとファイルがいっぱい レコード数分できています Paquetファイルの内容確認はParquetViewerが便利です

image.png

コード修正

ファイルを一つにするためには、現状(2024-12-09現在)コードを修正する必要があります。コードは、「Script」ボタンを押すと表示されます
image.png

  • .coalesce(1)  を追加してパーティションを1つにします。性能は一旦無視します
  • groupSize dinamic_frameのオプションでサイズを指定します このサイズより大きくなると分割されます

image.png


S3を確認すると、先ほどより大きな1つのファイルが格納されているはずです

image.png

終わりに

物凄く簡単に(雑に?)Glueを使ってみましたが、第一歩となれば幸いです。これをベースにSparkを勉強すると、もっと面白くなると思います。
この記事は一旦アップしますが、初心者の方々に見てもらった上で、分かりにくい点(もちろん間違いなども)ブラッシュアップ予定です。高価なETLツールの代わりとして是非使ってみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?