【ITニュース解説】ETL Made Easy: Integrating Multi-Source Data with AWS Glue
2025年10月03日に「Dev.to」が公開したITニュース「ETL Made Easy: Integrating Multi-Source Data with AWS Glue」について初心者にもわかりやすく解説しています。
ITニュース概要
AWS Glueは、異なる場所にあるデータを集め(抽出)、必要な形に加工し(変換)、新しい場所に保存する(ロード)ためのクラウドサービスだ。この記事では、Amazon S3とDynamoDBから注文・商品データを抽出し、合計金額などを計算して、分析しやすいように統合する具体的な手順を紹介する。
ITニュース解説
AWS Glueは、異なる場所に散らばった多様なデータを集め、必要な形に加工し、使いやすい場所に整理するための強力なサービスである。システムエンジニアを目指す上で、データ統合は非常に重要なテーマであり、AWS Glueはその中心的なツールの一つと言える。このサービスはサーバーレスであるため、利用者はサーバーの準備や管理に手間をかけることなく、データ処理に集中できるというメリットがある。
データの統合プロセスは、通常ETLと呼ばれる三つのステップに分けられる。まず「Extract(抽出)」では、様々なデータソースから必要なデータを取り出す。例えば、関係データベース、NoSQLデータベース、あるいはファイルが置かれたオブジェクトストレージ(Amazon S3など)から情報を集める。次に「Transform(変換)」では、抽出したデータを目的の形式に合わせる加工を行う。異なる形式のデータを統一したり、複数のデータセットを組み合わせて新しい計算結果(例えば合計金額など)を導き出したりする作業がこれにあたる。最後に「Load(ロード)」では、変換済みのデータを、分析やレポート作成、他のアプリケーション利用に適した新しいデータストアへ書き出す。AWS GlueはこれらのETLジョブを効率的に実行するために設計されており、大量のデータを扱う際や、様々なデータ形式に対応する必要がある場合に特に有用である。データレイクサービスであるAmazon S3、データウェアハウスのAmazon Redshift、NoSQLデータベースのDynamoDBなど、多くのAWSサービスと連携できる点も大きな特徴だ。
具体的な例として、あるオンラインストアの注文データと商品データを統合し、分析やマーケティングに活用するためのインサイトを得るシナリオを考える。このシナリオでは、注文データはDynamoDBというNoSQLデータベースに、商品データはAmazon S3というオブジェクトストレージにJSON形式のファイルとして保存されているとする。目標は、これらの異なる場所に保存されたデータを結合し、各注文の合計価格や合計重量といった新しい情報を計算して、一つの整理されたデータセットとして新しいDynamoDBテーブルに格納することである。
まず、ETLプロセスを開始する前に、データの準備と確認を行う。DynamoDBには、顧客名や注文ID、商品の数量、単価、注文日などを含む注文情報が「Book_Orders」というテーブルに格納されている。一方、S3には、商品ID、タイトル、著者、重量、カテゴリなどの詳細情報がJSONファイル形式で保存されている。これらの元データを確認したら、次に変換されたデータを格納する新しいテーブルをDynamoDBに作成する。このテーブルは「book_orders_transformed」と名付け、注文を一意に識別するための「order_id」をパーティションキーとして設定する。初期状態ではこのテーブルにデータは含まれない。
次に、AWS Glueで実際にETLジョブを作成する。AWS Glueコンソールにアクセスし、「ETLジョブ」の中から新しいジョブを作成する手順となる。ジョブ名には「book_orders_etl」と設定し、このジョブがS3やDynamoDBにアクセスするための適切な権限を持つIAMロールを選択するか、新しく作成する。ジョブのタイプとしては「Spark Python」を選ぶ。これは、Python言語と大規模データ処理フレームワークであるApache Sparkを組み合わせて、ETLスクリプトを記述することを示す。
ETLスクリプトの実装が、このプロセスの核心となる。PythonとSparkを利用したスクリプトでは、まず必要なライブラリをインポートし、Glue固有のコンテキストを初期化する。スクリプトは、実行時にS3バケット名などのパラメータを受け取れるように設計される。データ変換の主要部分では、「calculate_totals」という関数が定義される。この関数は、一つの注文データ行を受け取り、その中の数量と単価、数量と重量をそれぞれ乗算することで、注文ごとの「total_price(合計価格)」と「total_weight_kg(合計重量)」を計算し、結果を四捨五入して元のデータ行に追加して返す。
次に、データソースからの抽出処理に入る。S3からは、指定されたバケット内のパスからJSON形式の商品データを読み込み、「books_frame」というDynamicFrame(Glueが提供するデータ構造)として取得する。同時に、DynamoDBからは「book_orders」テーブルの注文データを読み込み、「orders_frame」という別のDynamicFrameとして取得する。これらの二つの異なるDynamicFrameは、共通の「book_id」(商品ID)をキーとして結合される。これにより、各注文に紐づく商品詳細情報が結合された「joined_frame」が生成される。
結合されたDynamicFrameは、Pythonのマップ処理(各データ行に関数を適用する処理)を行うために、一度通常のSpark DataFrameに変換される。そして、先ほど定義した「calculate_totals」関数が、このDataFrameの各行に適用され、合計価格と合計重量が計算される。計算が完了すると、変換後のDataFrameは再びDynamicFrameに戻される。最後に、この変換済みDynamicFrameが、先に作成しておいた新しいDynamoDBテーブル「book_orders_transformed」に書き込まれる。これにより、ETLプロセスの「Load(ロード)」が完了する。
スクリプトの準備が整ったら、AWS Glueジョブを実行する。ジョブの設定画面で「Run with parameters」オプションを選択し、S3バケットの名前をパラメータとして指定する。ジョブを実行すると、Glueが自動的にリソースをプロビジョニングし、スクリプトを実行する。ジョブの実行状況は「Run details」で監視でき、ステータスが「Succeeded(成功)」に変わるまで待つ。ジョブが成功したら、作成した「book_orders_transformed」テーブルをDynamoDBコンソールで確認する。そこには、元の注文情報と商品情報に加え、計算された合計価格と合計重量が追加された、整形されたデータが格納されているはずだ。
このように、AWS Glueを用いることで、異なるデータソースからデータを抽出し、ビジネスニーズに合わせて変換・加工し、最終的に分析に適した形に統合されたデータセットを効率的に準備できる。この統合されたデータは、売上トレンドの分析、顧客行動の理解、マーケティング戦略の立案など、多様なビジネスインサイトを得るための基盤として活用される。システムエンジニアにとって、このようなデータ統合の知識と実践は、現代のデータ駆動型社会において不可欠なスキルとなるだろう。