AWS Glue
AWS のサーバーレス ETL サービスで、データの抽出・変換・ロードとデータカタログ管理を提供する
AWSデータ分析
AWS Glue とは
AWS Glue は、サーバーレスの ETL (Extract, Transform, Load) サービスで、データの抽出・変換・ロードとデータカタログの管理を提供する。インフラのプロビジョニングが不要で、ジョブの実行時間に対してのみ課金される。2017 年にリリースされ、AWS のデータ分析基盤の中核を担っている。
主要コンポーネント
| コンポーネント | 役割 |
|---|---|
| Data Catalog | メタデータの一元管理。Athena、Redshift Spectrum、EMR が参照 |
| クローラー | S3、RDS、DynamoDB のデータを自動スキャンし、スキーマをカタログに登録 |
| ETL ジョブ | PySpark または Python シェルで ETL 処理を記述・実行 |
| Glue Studio | ビジュアルエディタで ETL ジョブをノーコードで構築 |
| Data Quality | データ品質ルールを定義し、自動検証 |
典型的なデータパイプライン
S3 (生データ: JSON, CSV)
↓ Glue クローラー (スキーマ自動検出)
Glue Data Catalog (メタデータ登録)
↓ Glue ETL ジョブ (Parquet 変換、クレンジング、パーティショニング)
S3 (加工済みデータ: Parquet, パーティション分割)
↓ Athena (SQL クエリ)
QuickSight (ダッシュボード)
Glue ETL ジョブの実装
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from awsglue.context import GlueContext
from pyspark.context import SparkContext
sc = SparkContext()
glueContext = GlueContext(sc)
# Data Catalog からデータを読み込み
source = glueContext.create_dynamic_frame.from_catalog(
database="raw_data",
table_name="access_logs"
)
# 変換: 不要なカラムを削除、日付でパーティション分割
transformed = DropFields.apply(source, paths=["user_agent", "referer"])
# S3 に Parquet 形式で書き出し
glueContext.write_dynamic_frame.from_options(
frame=transformed,
connection_type="s3",
connection_options={"path": "s3://processed-data/access_logs/"},
format="parquet"
)
Step Functions + Lambda との使い分け
| 観点 | Glue | Step Functions + Lambda |
|---|---|---|
| 処理規模 | 大規模 (GB〜TB) | 小〜中規模 (MB〜GB) |
| 実行時間 | 数分〜数時間 | 最大 15 分 (Lambda) |
| 言語 | PySpark, Python | 任意 (Node.js, Python 等) |
| コスト | DPU 時間課金 ($0.44/DPU-hour) | Lambda 実行時間課金 (安め) |
| 起動時間 | 数分 (Spark クラスター起動) | ミリ秒〜秒 |
| 適するケース | 大量データの変換、複雑な結合 | 軽量な ETL、API 連携 |
小規模なデータ変換 (数百 MB 以下) には Lambda の方がコスト効率が良い。Glue は Spark クラスターの起動に数分かかるため、頻繁に実行する小さなジョブには不向きだ。
Data Catalog の価値
Glue Data Catalog は単なるメタデータストアではなく、AWS のデータ分析サービス群の共通カタログとして機能する。
- Athena: Data Catalog のテーブル定義を使って S3 上のデータに SQL クエリを実行
- Redshift Spectrum: 外部テーブルとして Data Catalog を参照
- EMR: Hive メタストアの代替として Data Catalog を使用
一度カタログに登録すれば、複数のサービスからスキーマ定義を共有できる。
コスト最適化
- クローラーの実行頻度を最小限にする (スケジュールではなくイベント駆動)
- ジョブのワーカー数 (DPU) を適切に設定する (デフォルトの 10 DPU は多すぎることが多い)
- 小規模データには Glue ではなく Lambda を使う
体系的に学ぶなら関連書籍を参照してほしい。