Slide 1

Slide 1 text

バッチ処理で悩む バックエンドエンジニアに 捧げるAWS Glue⼊⾨ morimorikochan リテールアプリ共創部 マッハチーム

Slide 2

Slide 2 text

⾃⼰紹介

Slide 3

Slide 3 text

⾃⼰紹介 3 morimorikochan ● 所属:リテールアプリ共創部 マッハチーム 🚀 ● 趣味:マリオカート ワールド‧⾃作⿇婆⾖腐 ● X :@marooon88

Slide 4

Slide 4 text

今⽇お伝えしたいこと

Slide 5

Slide 5 text

今⽇お伝えしたいこと 5 ● AWS Glueはサーバーレスな分散処理エンジン ● スクリプトが⾃動で分散処理されるので ○ AWS Lambda‧ECSより楽に安定した⼤規模データの バッチ処理が実装できる ● 複雑なJOINや⼩規模なデータの場合は不向き AWS Glueを使って安定したバッチ処理を実装しよう

Slide 6

Slide 6 text

こんな経験ありませんか?

Slide 7

Slide 7 text

数⼗万~数百万件の⼤量のデータを システムにインポート / システムからエクスポート するバッチ処理 ● 😨Lambdaの15分制限にひっかかる ● 😱並列実⾏管理が⼤変 ● 🤬DynamoDBのレートリミットでエラーが頻発 こんな経験ありませんか? 7

Slide 8

Slide 8 text

300万件のCSVファイル(30万件 x 10ファイル) ↓ [ フィルタリング‧データ加⼯ ] ↓ DynamoDBのテーブル こんな経験ありませんか? 8 僕の経験

Slide 9

Slide 9 text

300万件のCSVファイル(30万件 x 10ファイル) ↓ [ フィルタリング‧データ加⼯ ] ↓ DynamoDBのテーブル こんな経験ありませんか? 9 僕の経験 Lambda + StepFunctionで 何とかなるか...!? 🧐

Slide 10

Slide 10 text

こんな経験ありませんか? 10 完成できたものの、⾊々⾟かった

Slide 11

Slide 11 text

● 😨Lambdaの15分制限にひっかかる ● 😱並列実⾏管理が⼤変 ● 🤬DynamoDBのレートリミットでエラーが頻発 データ量‧件数に依存した不安定なバッチ処理󰷺 こんな経験ありませんか? 11 完成できたものの、⾊々⾟かった

Slide 12

Slide 12 text

AWS Glue

Slide 13

Slide 13 text

AWS Glue 13 AWS Glueとは? https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-Glue_0331_v1.pdf

Slide 14

Slide 14 text

● “サーバーレスなETL分散処理エンジン” ● Apache Sparkベースの並列処理 ● インフラ管理不要 ● ⾃動スケーリング ● 従量課⾦ これ以降、AWS Glue for Spark の前提 AWS Glue 14 AWS Glue for Sparkとは?

Slide 15

Slide 15 text

AWS Glue 15 使い⽅(Sparkジョブ) ← ①スクリプトを書く ②実⾏する↓

Slide 16

Slide 16 text

デモ

Slide 17

Slide 17 text

● ⼊⼒: S3に保存された10件のCSVファイル↓ ○ 合計レコード件数: 約1215万件 ○ 出展: Pure IDs (5-Core) - Amazon Reviews'23 ● 加⼯: ○ 2020年のものだけフィルタ ○ ratingとtimestampを数値に変換 ● 出⼒: DynamoDB デモ 17 Amazonの2020年のレビューデータをDynamoDBに投⼊

Slide 18

Slide 18 text

# S3バケットから CSVファイルを読み取る dynamicFrame_source = glueContext.create_dynamic_frame.from_options( connection_type = "s3", connection_options = {"paths":["s3://glue-demo-20250830/"]}, format = "csv", format_options = { "withHeader": True, } ) デモ 18 ジョブのスクリプト(ETLでいう”E”)

Slide 19

Slide 19 text

デモ 19 ジョブのスクリプト(ETLでいう”T”) # 型変換(ratingをdouble、timestampをlongに) dynamicFrame = ApplyMapping.apply( frame=dynamicFrame_source, mappings=[ ("user_id", "string", "user_id", "string"), ("parent_asin", "string", "parent_asin", "string"), ("rating", "string", "rating", "double"), ("timestamp", "string", "timestamp", "long") ] )

Slide 20

Slide 20 text

デモ 20 ジョブのスクリプト(ETLでいう”T”) # フィルタリング dynamicFrame = Filter.apply( frame=dynamicFrame, # timestampを2023年でフィルタ f=lambda x: x["timestamp"] > 1577804400000 and x["timestamp"] < 1609426800000 )

Slide 21

Slide 21 text

# DynamoDBに書き込み glueContext.write_dynamic_frame_from_options( frame=dynamicFrame, connection_type="dynamodb", connection_options={ "dynamodb.output.tableName": "reviews-20250830", # DynamoDBテーブルのプロビジョンド WCUを見て # 消費WCUを自動調整 💡 "dynamodb.throughput.write.percent": "1.0" } ) デモ 21 ジョブのスクリプト(ETLでいう”L”)

Slide 22

Slide 22 text

AWS Glue 22 動作イメージ 引用: Apache Spark の主要なトピック -アーキテクチャ

Slide 23

Slide 23 text

● 😨Lambdaの15分制限にひっかかる ○ 時間制限はない ● 😱並列実⾏管理が⼤変 ○ 結果は⾃動で集約される ● 🤬DynamoDBのレートリミットでエラーが頻発 ○ RCU/WCUをみて⾃動制御が可能 データ量‧件数に依存しない安定したバッチ処理💪 AWS Glue 23 つらみが解決...!

Slide 24

Slide 24 text

AWS Glue 24 DynamoDBはRCU/WCUをみて⾃動制御が可能 ①プロビジョンドWCUが⾼い↓ (WCUの消費多‧時間短) ②プロビジョンドWCUが⼩さい↓ (WCUの消費少‧時間⻑)

Slide 25

Slide 25 text

● Amazon Redshift ● Amazon RDS ● Amazon S3 ● Google BigQuery ● Kafka ● Snowflake ● JDBC ● Amazon Aurora ● Amazon DynamoDB ● Salesforce ● Microsoft Dynamics 365 CRM ● OpenSearch Service ● その他にもまだまだあります AWS Glue 25 データの読み込み先/書き込み先は豊富に⽤意 引用: Available connections - AWS Glue

Slide 26

Slide 26 text

AWS Glue 26 GUIでジョブを作成可能

Slide 27

Slide 27 text

AWS Glueが向いてない場⾯

Slide 28

Slide 28 text

● 複雑なJOIN ○ Sparkのシャッフルコストが⾼い ○ RDSの⽅が効率的な場合も ● ⼩規模なデータ(<1GB) ○ Glueは起動時間: 1-2分 ○ コスト的にもAWS Lambdaの⽅が効率的 ● 迅速なPDCAが求められる ○ AWS Lambdaに⽐べると検証サイクルに時間がかかる AWS Glueが向いてない場⾯ 28 銀の弾丸ではない...!

Slide 29

Slide 29 text

まとめ

Slide 30

Slide 30 text

● AWS Glueはサーバーレスな分散処理エンジン ● スクリプトが⾃動で分散処理されるので、 ○ AWS Lambda‧ECSより楽に安定したバッチ処理が実 装できる ● 複雑なJOINや⼩規模なデータの場合は不向き まとめ 30 AWS Glueを使って安定したバッチ処理を実装しよう

Slide 31

Slide 31 text

No content