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 を使う

体系的に学ぶなら関連書籍を参照してほしい。

関連用語