---
# System prepended metadata

title: 《AWS Glue介紹 | 打造雲端無伺服器資料處理管道》

---

# 《AWS Glue介紹 | 打造雲端無伺服器資料處理管道》
![image](https://hackmd.io/_uploads/S1rJ0E1Oee.png)

## 📒 前言：為何選擇 AWS Glue？
在數據驅動的時代，企業每天都會產生大量的原始資料。然而，這些原始資料往往需要經過清洗、轉換、格式化，才能被下游的分析工具、視覺化報表或機器學習模型所使用。這個過程被稱為 ETL（Extract, Transform, Load）。
AWS Glue 是一個全受管的無伺服器 ETL 服務，它能讓您輕鬆地準備與載入資料，而無需費心管理底層的運算資源。本篇文章將透過一個實戰演練，帶您了解如何使用 AWS Glue Studio 的視覺化介面，快速建立一個自動化的資料處理管道。
![image](https://hackmd.io/_uploads/rJoj4EkOge.png)
> Source: [Catalog and analyze Application Load Balancer logs more efficiently with AWS Glue custom classifiers and Amazon Athena](https://aws.amazon.com/tw/blogs/big-data/catalog-and-analyze-application-load-balancer-logs-more-efficiently-with-aws-glue-custom-classifiers-and-amazon-athena/)

## 📒 核心服務概覽
### 📘 AWS Glue
* **無伺服器 (Serverless) 的 ETL 利器：** Glue 提供一個全自動化的資料擷取、轉換與載入（ETL）環境。它底層使用 Apache Spark 引擎，並支援 PySpark 與 Python 腳本，能夠高效處理儲存在 Amazon S3、Amazon Redshift 等多種來源的資料。
* **統一的資料中樞**：Glue Data Catalog 可作為您所有資料資產的中央中繼資料儲存庫。其內建的爬蟲 (Crawler) 功能可以自動掃描您的資料來源、識別結構（Schema），並建立可供查詢的資料表，方便與 Amazon Athena、Redshift Spectrum 等服務無縫整合。

![image](https://hackmd.io/_uploads/BJ0dBEkOee.png)
> Source: [AWS官網](https://aws.amazon.com/tw/glue/)

#### 彈性的開發選項
* `Glue Studio`：圖形化的 ETL 流程設計工具，讓使用者透過拖拉方式建構資料流程。
* `Glue Studio`：圖形化的 ETL 流程設計工具，讓使用者透過拖拉方式建構資料流程。
* `Glue Data Catalog`：集中管理資料結構與中繼資料的元資料儲存庫，供各服務查詢使用。
* `Glue Crawler`：自動掃描資料來源並建立或更新 Data Catalog 的 Schema。
* `Glue Jobs`：執行 ETL 任務的運算單元，支援 Python、PySpark 編碼或可視化設計。
* `Glue Workflows`：用於串接多個 Glue 元件（如 Job、Crawler）以建構完整的資料流程。
* `Glue Triggers`：用來根據事件或排程自動啟動 Glue 任務或流程。
* `Glue ML Transforms`：內建的機器學習轉換模組，協助進行資料除重或分類等任務。

### 📘 Amazon S3
Amazon S3 (Simple Storage Service) 是 AWS 上最廣為人知的物件儲存服務。它具備高耐用性、高可用性與極佳的擴展性，可用來儲存任何格式的檔案。憑藉其直覺的操作、精細的權限控管與高度的服務整合性，S3 常被用作資料湖 (Data Lake) 的核心，也是 Glue、Athena 等資料服務最主要的資料來源。
![image](https://hackmd.io/_uploads/HJPRUNkuex.png)
> Source: [Amazon S3 in 3 Minutes: Quick Insights and Practical Examples for Easy Understanding](https://nolliechy.medium.com/amazon-s3-in-3-minutes-quick-insights-and-practical-examples-for-easy-understanding-ababf23a8e2b)

## 📒 實作演練：建立一個 Glue ETL 任務
### 📘 核心概念：Glue Job 的運作模式
您可以將 AWS Glue Job 視為一個自動化的資料處理管道。當您需要處理資料時，可以啟動一個 Glue Job。AWS 會根據您的設定，自動佈建一台暫時的虛擬機器來執行您指定的資料處理任務。當任務完成後，該機器會被自動關閉並銷毀。
![image](https://hackmd.io/_uploads/H1ZdSx1dlx.png)
> 您可以根據任務的複雜度與資料量，選擇不同的 Worker 類型與數量。運算資源越強，單位時間的費用也越高。
### 📘 開發方式
> 本文參考kaggle上關於電商的[資料集](https://www.kaggle.com/datasets/uom190346a/e-commerce-customer-behavior-dataset/data)

#### 📗 1. 使用視覺化介面 (Glue Studio)：透過拖拉節點的方式，直觀地建立資料處理步驟。**
![image](https://hackmd.io/_uploads/H1LXVgydel.png)

#### 📗 2. 撰寫並上傳腳本 (Script)：如果需要更複雜的客製化邏輯，可直接撰寫 PySpark 或 Python 腳本。
![image](https://hackmd.io/_uploads/HkXLVxydll.png)

### 📘 操作步驟：使用 Glue Studio 進行資料遮罩
#### 📗 1. 準備來源與目標 S3 儲存桶
![image](https://hackmd.io/_uploads/B1scqxkOee.png)

#### 📗 2. 在 Glue Studio 中建立新任務
![image](https://hackmd.io/_uploads/Byqnqgkdgx.png)

#### 📗 3. 應用資料轉換—資料遮罩
![image](https://hackmd.io/_uploads/H17FzNk_gg.png)

#### 📗 4. 調整目標 Schema 與輸出格式
![image](https://hackmd.io/_uploads/BJKw_SJDge.png)

:arrow_down: 另外也還有很多資料轉換的功能，有興趣的可以試看

![image](https://hackmd.io/_uploads/HkRPClkdxl.png)

#### 📗 5. 儲存並執行任務，可以在點擊`start job` 之後要到 `Run Detail`裡面看跑多久、成功與否、和細節
![image](https://hackmd.io/_uploads/BJaUTgkule.png)

#### 📗 6. 驗證處理結果
這邊的設定是將資料分成`CSV`跟`Json`檔案，清理完成之後就會在資料夾看到這兩份檔案，其中在JSON檔案的電話號碼就被`SHA256`遮罩完畢
![image](https://hackmd.io/_uploads/HywQClkule.png)
![image](https://hackmd.io/_uploads/Hy6fAlyulx.png)

## 📒 重要提示與限制
### 📘 輸出檔案命名限制
#### 📗 AWS Glue 會自動生成輸出檔案的名稱，目前無法直接自訂有意義的檔名，算是比較明顯的缺點
![image](https://hackmd.io/_uploads/ByjnUH1Dgx.png)

#### 📗 Detect Sensitive Data 功S能有一定限制，內建的 Detect Sensitive Data 功能主要針對常見的 PII 格式，對於較不標準或客製化的欄位可能無法識別，提供客製化的選項不多
![image](https://hackmd.io/_uploads/SJ5TEU1wel.png)

#### 📗 不過當應用情景單純，做這種快速簡單的遮罩也是不錯
![image](https://hackmd.io/_uploads/H1JS0lJdeg.png)




## REFERENCE📕📗📘📙📒
* https://aws.amazon.com/tw/blogs/big-data/get-started-with-aws-glue-data-quality-dynamic-rules-for-etl-pipelines/
* https://www.kaggle.com/datasets/uom190346a/e-commerce-customer-behavior-dataset/data


