はじめに
この記事はAWS MLS試験勉強のための、AWS Glueに関する知識のまとめです。
AWS Glueとは
AWS Glueは、データ分析前のデータ整備に向けてデータの検出、準備、結合を行うサーバーレスなETL(Extract, Transform, Load)サービスです。データレイクやデータウェアハウスの構築・保守を効率化することができ、機械学習パイプラインの前処理ステップとしても活用されます。
- クローラーにより自動的にデータのスキーマを読み取り、Data Catalog(メタデータ辞書)を作成
- Amazon Athena や Redshift Spectrum からそのCatalogを参照してSQLクエリ実行が可能
- JSONやCSVなどの構造化/半構造化データを処理し、Parquet等の最適形式に変換
- SageMakerによるモデル学習前の整形にも利用可
MLS試験対策ポイント:Athenaとの連携、Data Catalogの役割、ETLワークフローにおけるGlueの位置づけは重要。
ジョブのブックマーク
Glueでは、ジョブ実行時の状態を記録し、再実行時に前回処理済みのデータをスキップする機能「ジョブのブックマーク」が利用可能です。
- 継続的なETL(バッチ処理や定期更新)において増分処理を実現
-
--job-bookmark-option
でjob-bookmark-enable
やjob-bookmark-disable
を指定可能
MLS視点:データの重複処理を防ぐ=コスト最適化・信頼性向上に直結。
AWS Glue DataBrew
ノーコードでデータのクレンジング・変換・前処理ができるビジュアルツールです。エンジニアだけでなく、データアナリストや非プログラマでも扱えるように設計されています。
AWS Glue Sensitive Data Detection
AWS Glueは、ETLパイプライン内で個人情報(PII)や機密データを検出する機能を内包しています。
- Glue StudioでUIベースで設定可能
- 名前、電話番号、メールアドレス、住所などを検出し、マスキング処理や新しいカラムへのコピーが可能
- リアルタイムETL中に処理できるのが特長
Macieとの違い(2025年4月時点)
比較項目 | Glue Sensitive Data Detection | Amazon Macie |
---|---|---|
主な対象 | Glueジョブ中のデータ | S3バケット内の静的データ |
処理タイミング | ETL中のリアルタイム処理 | 定期的バッチスキャン |
処理内容 | 検出後に即座にマスキングや除外処理 | ダッシュボード通知、SNS連携 |
カスタム識別子 | 正規表現や条件を指定可 | カスタムデータ識別子の作成可 |
DynamoDBのトランザクション機能との違い
- GlueのSensitive Detectionは検出のみ。削除やロールバック処理はできません。
- DynamoDBのトランザクションは、整合性の保証された更新/削除が可能で、特にアプリケーション側の制御に強い。
AWS Glue JDBC接続
AWS Glueは、以下のようなJDBC互換のデータベースと直接接続し、抽出・変換処理が可能です:
- Amazon RDS(MySQL, PostgreSQL, MariaDB)
- Amazon Redshift
- Oracle, SQL Server(要VPC設定とIAM認可)
Glue Connectionを定義し、クローラーやジョブで利用する形で接続します。
実務TIPS:接続エラーが出る場合、セキュリティグループやVPCルートテーブル、GlueのIAMロール設定を再確認すること。
スクリプトの記述(実践例:PySpark)
GlueジョブのスクリプトはPython(PySpark)やScalaで記述されます。以下はCSV→大文字変換→S3出力の簡単な例です:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from pyspark.sql.functions import upper
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
# 入力S3と出力S3
input_path = "s3://your-input-bucket/your-input-key"
output_path = "s3://your-output-bucket/your-output-key"
# Data Catalogから読み込み
datasource = glueContext.create_dynamic_frame.from_catalog(
database="your-database",
table_name="your-table",
transformation_ctx="datasource"
)
# Spark DataFrameに変換し、'name'列を大文字化
df = datasource.toDF()
df_transformed = df.withColumn('name_uppercase', upper(df['name']))
# 再度DynamicFrameに変換
transformed = DynamicFrame.fromDF(df_transformed, glueContext, "transformed")
# S3へCSV出力
glueContext.write_dynamic_frame.from_options(
frame=transformed,
connection_type="s3",
connection_options={"path": output_path},
format="csv"
)
# ジョブ完了通知
job = glueContext.create_job(args['JOB_NAME'])
job.commit()