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?

AWS Glue

Last updated at Posted at 2024-01-16

はじめに

この記事は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-optionjob-bookmark-enablejob-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()
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?