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のETLのSaaSであるGlueのハンズオン

Last updated at Posted at 2025-07-23

AWSのETLのSaaSであるGlueのハンズオン

 AWSでのETLサービスであるGlueのハンズオンの備忘メモである。
プロジェクトでAzureのADFを使用したことがあるので、Glueも類似性があった。

Azure ADFの実行メモ
ADFも同様にVisualでETL処理を実行することができる。

下記のようなデータレイクをS3、データウェアハウスをS3、ETLをAWS Glueのアーキテクチャとする。
image.png

S3のバケット構成は下記のような構成
image.png

AWS glue上で「script editor」でpythonスクリプトを作成していく

image.png

image.png

pythonスクリプトを指定
image.png

Job detailsの場面で設定を行う
image.png

IAMロールの作成

IAMロールの設定を行う。
image.png

ユースケースでglueを指定
image.png

サービスロールを指定する
image.png

glueにアタッチするIAMロールができたら、IAMポリシーをつけていく
image.png

ポリシーのアタッチ
image.png

S3のフルアクセスのポリシーを、IAMロールにアタッチする
image.png

作成したIAMロールをアタッチする
image.png

ETLの処理として下記のスクリプトを記載

image.png

Runsのタグで確認可能
image.png

OutputlogとErrorlogsのリンクからCloud Watchのサービスでログを確認可能
image.png

エラーログでも確認可能
image.png

このような形でジョブが成功
image.png

DWHのS3にcsvがあることが確認
image.png

Visual ETLについてみていこう

Visual ETLを選択します
image.png

Spark設定をできる。
Spark
image.png

S3 URLのURLを作成
image.png

プロパティを設定
image.png

下記のような形式でGlueのActionから選定
image.png

Sorceの設定
image.png

スクリプトで記載する場合

glue_spark.py
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsgluedq.transforms import EvaluateDataQuality

args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# Default ruleset used by all target nodes with data quality enabled
DEFAULT_DATA_QUALITY_RULESET = """
    Rules = [
        ColumnCount > 0
    ]
"""

# Script generated for node Amazon S3
AmazonS3_node1753154917873 = glueContext.create_dynamic_frame.from_options(format_options={"quoteChar": "\"", "withHeader": True, "separator": ",", "optimizePerformance": False}, connection_type="s3", format="csv", connection_options={"paths": ["s3://datalake-dev-202507/titanic/train.csv"], "recurse": True}, transformation_ctx="AmazonS3_node1753154917873")

# Script generated for node Change Schema
ChangeSchema_node1753155125975 = ApplyMapping.apply(frame=AmazonS3_node1753154917873, mappings=[("passengerid", "string", "passengerid", "string"), ("survived", "string", "survived", "string"), ("pclass", "string", "pclass", "string"), ("sex", "string", "sex", "string"), ("age", "string", "age", "string")], transformation_ctx="ChangeSchema_node1753155125975")

# Script generated for node Amazon S3
EvaluateDataQuality().process_rows(frame=ChangeSchema_node1753155125975, ruleset=DEFAULT_DATA_QUALITY_RULESET, publishing_options={"dataQualityEvaluationContext": "EvaluateDataQuality_node1753154720500", "enableDataQualityResultsPublishing": True}, additional_options={"dataQualityResultsPublishing.strategy": "BEST_EFFORT", "observations.scope": "ALL"})
AmazonS3_node1753156121481 = glueContext.write_dynamic_frame.from_options(frame=ChangeSchema_node1753155125975, connection_type="s3", format="csv", connection_options={"path": "s3://datawarehouse-dev-202507", "partitionKeys": []}, transformation_ctx="AmazonS3_node1753156121481")

job.commit()

Visual ETLを保存して実行をしていく
image.png

成功が表示され、CloudWatchのoutlogでも確認できます
image.png

DWHであるcsvファイルがS3に格納されることがわかる
image.png

GUIやpythonスクリプトにて、ETL処理をSaaSとして実施することができる。
AzureのADFでもバッチ処理ができるの、類似のクラウドサービスとして理解しておくとイメージしやすい

glueジョブのリトライ処理の設定可能
image.png

「python shell」のタイプでPysparkの実装を行なってもawsglueモジュールが使用できない。
image.png

AWS glueにてVisual ETLにてsourceデータに対してjoinすることも可能である。
イメージとしては下記の通り。

image.png

QuickSigntによる可視化

image.png
image.png

DWHとして使用しているS3のバケットをデータソースにして、QucikSigntの可視化をしていく。

image.png

S3にマニフェストファイルを配置後にアップロードする。
image.png

マニフェストファイルのサンプルは下記の通り

manifest.json
{
    "fileLocations": [
        {
            "URIs": [
                "https://datawarehouse-dev-202507.s3.ap-northeast-1.amazonaws.com/titani-etl.csv"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "textqualifier": "'",
        "containsHeader": "true"
    }
}

image.png

データソースの取り込みが完了すると下記のような形式で、可視化ができる。

image.png

公開したものは下記の形で可視化が可能である。

image.png

glueのInnerJoinの設定

InnerJoinについてGlueのVisualで実施
image.png

スケジュール設定

cronのようにスケジュール設定が可能
image.png

image.png

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?