

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 AWS Glue 匯出資料
<a name="export-data-by-using-aws-glue"></a>

您可以使用 AWS Glue 在 Amazon S3 中封存 MySQL 資料，AWS Glue 是一種適用於大數據案例的無伺服器分析服務。AWS Glue 採用 Apache Spark 技術，這是廣泛使用的分散式叢集運算架構，可支援許多資料庫來源。

可以使用 AWS Glue 任務中的幾行程式碼，從資料庫將封存資料卸載至 Amazon S3。AWS Glue 提供的最大優勢是水平可擴展性和pay-as-you-go模型，可提供營運效率和成本最佳化。

下圖顯示資料庫封存的基本架構。



![\[封存資料的五個步驟程序。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/archiving-mysql-data/images/export-data-using-aws-glue.png)


1. MySQL 資料庫會建立要在 Amazon S3 中卸載的封存或備份資料表。

1. AWS Glue 任務是由下列其中一種方法啟動：
   + 同步做為 [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 狀態機器中的步驟
   + 由 [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 事件非同步
   + 透過使用 AWS CLI 或 [AWS 開發套件](https://docs.aws.amazon.com/glue/latest/dg/sdk-general-information-section.html)的手動請求

1. 資料庫登入資料會從 [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 擷取。

1. AWS Glue 任務使用 Java Database Connectivity (JDBC) 連線來存取資料庫，並讀取資料表。

1. AWS Glue 會以 Parquet 格式的 Amazon S3 寫入資料，這是一種開放、單欄式、節省空間的資料格式。

**設定 AWS Glue 任務**

若要如預期般運作，AWS Glue 任務需要下列元件和組態：
+ [AWS Glue 連線](https://docs.aws.amazon.com/glue/latest/dg/glue-connections.html) – 這是您連接至任務以存取資料庫的 AWS Glue Data Catalog 物件。任務可以有多個連線來呼叫多個資料庫。連線包含安全存放的資料庫登入資料。
+ [GlueContext](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-glue-context.html) – 這是 [SparkContext](https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html) 上的自訂包裝函式。GlueContext 類別提供更高階的 API 操作，可與 Amazon S3 和資料庫來源互動。它可啟用與 Data Catalog 的整合。它也不需要依賴 Glue 連線內處理的資料庫連線驅動程式。此外，GlueContext 類別提供處理 Amazon S3 API 操作的方法，這在原始 SparkContext 類別中是不可能的。
+ IAM 政策和角色 – 由於 AWS Glue 與其他 AWS 服務互動，因此您必須設定具有所需最低權限的適當角色。需要適當許可才能與 AWS Glue 互動的服務包括下列項目：
  + Amazon S3
  + AWS Secrets Manager
  + AWS Key Management Service (AWS KMS)

**最佳實務**
+ 若要讀取具有大量資料列要卸載的整個資料表，建議使用僅供讀取複本端點來提高讀取輸送量，而不會降低主要寫入器執行個體的效能。
+ 若要在用於處理任務的節點數量中提高效率，請在 AWS Glue 3.0 中開啟[自動擴展](https://docs.aws.amazon.com/glue/latest/dg/auto-scaling.html)。
+ 如果 S3 儲存貯體是資料湖架構的一部分，我們建議您將資料組織成實體分割區來卸載資料。分割區結構描述應以存取模式為基礎。根據日期值進行分割是最常建議的實務之一。
+ 將資料儲存為開放格式，例如 Parquet 或 Optimized Row Columnar (ORC)，有助於將資料提供給其他分析服務，例如 Amazon Athena 和 Amazon Redshift。
+ 若要讓其他分散式服務對卸載的資料進行讀取最佳化，必須控制輸出檔案的數量。擁有較少數量的較大檔案，而不是大量小型檔案幾乎總是有益的。Spark 具有內建組態檔案和方法來控制部分檔案的產生。
+ 依定義的封存資料是經常存取的資料集。為了實現儲存體的成本效率，Amazon S3 類別應轉換為價格較低的方案。這可以使用兩種方法完成：
  + 卸載時同步轉換層 – 如果您事先知道卸載的資料必須在程序中轉換，您可以在將資料寫入 Amazon S3 的相同 AWS Glue 任務中使用 GlueContext 機制 transition\$1s3\$1path。 [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-glue-context.html#aws-glue-api-crawler-pyspark-extensions-glue-context-transition_s3_path](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-glue-context.html#aws-glue-api-crawler-pyspark-extensions-glue-context-transition_s3_path)
  + 使用 [S3 生命週期](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)非同步轉換 – 使用 Amazon S3 儲存類別轉換和過期的適當參數來設定 S3 生命週期規則。 Amazon S3 在儲存貯體上設定後，它會永久保留。
+ 在部署資料庫的虛擬私有雲端 (VPC) 內，建立並設定具有[足夠 IP 地址範圍](https://repost.aws/knowledge-center/glue-specified-subnet-free-addresses)的子網路。這可避免設定大量資料處理單位 (DPUs) 時，因網路地址數量不足而導致 AWS Glue 任務失敗。