

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

# 使用 AWS CodePipeline CI/CD 管道部署 AWS Glue 任務 AWS CodePipeline
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline"></a>

*Bruno Klein 和 Luis Henrique Massao Yamada，Amazon Web Services*

## 總結
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-summary"></a>

此模式示範如何將 AWS CodeCommit 和 AWS CodePipeline 與 AWS Glue 整合，並在開發人員將其變更推送至遠端 AWS CodeCommit 儲存庫時，立即使用 AWS Lambda 啟動任務。 

當開發人員提交擷取、轉換和載入 (ETL) 儲存庫的變更，並將變更推送到 AWS CodeCommit 時，會叫用新的管道。管道會啟動 Lambda 函數，透過這些變更啟動 AWS Glue 任務。AWS Glue 任務會執行 ETL 任務。

此解決方案有助於企業、開發人員和資料工程師在遞交變更並推送至目標儲存庫後立即啟動任務的情況。它有助於實現更高層級的自動化和重現性，因此避免任務啟動和生命週期期間發生錯誤。

## 先決條件和限制
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 安裝在本機電腦上的 [Git](https://git-scm.com/) 
+ 安裝在本機電腦上的 [Amazon Cloud Development Kit (Amazon CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) 
+ 安裝在本機電腦上的 [Python](https://www.python.org/) 
+ *附件*區段中的程式碼

**限制**
+ 一旦 AWS Glue 任務成功啟動，管道就會完成。它不會等待任務完成。
+ 附件中提供的程式碼僅供示範使用。

## Architecture
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-architecture"></a>

**目標技術堆疊**
+ AWS Glue
+ AWS Lambda
+ AWS CodePipeline
+ AWS CodeCommit

**目標架構**

![一旦開發人員將變更推送至 CodeCommit 儲存庫，即可使用 Lambda 啟動 Glue 任務。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/99a67388-5939-4267-8324-b6ca8bfa7962/images/917c9041-b94d-4e95-a3c4-9a1115ead228.png)


 

此程序包含下列步驟：

1. 開發人員或資料工程師會修改 ETL 程式碼、遞交變更，並將變更推送至 AWS CodeCommit。

1. 推送會啟動管道。

1. 管道會啟動 Lambda 函數，在儲存庫`codecommit:GetFile`上呼叫 ，並將檔案上傳至 Amazon Simple Storage Service (Amazon S3)。

1. Lambda 函數會使用 ETL 程式碼啟動新的 AWS Glue 任務。

1. Lambda 函數會完成管道。

**自動化和擴展**

範例附件示範如何將 AWS Glue 與 AWS CodePipeline 整合。它提供一個基準範例，您可以自訂或擴展供自己使用。如需詳細資訊，請參閱 *Epics* 區段。

## 工具
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) – AWS CodePipeline 是一項全受管[持續交付](https://aws.amazon.com/devops/continuous-delivery/)服務，可協助您自動化發行管道，以實現快速可靠的應用程式和基礎設施更新。
+ [AWS CodeCommit](https://aws.amazon.com/codecommit/) – AWS CodeCommit 是一種全受管的[來源控制](https://aws.amazon.com/devops/source-control/)服務，可託管安全的 Git 型儲存庫。
+ [AWS Lambda](https://aws.amazon.com/lambda/) – AWS Lambda 是一種無伺服器運算服務，可讓您執行程式碼，而無需佈建或管理伺服器。
+ [AWS Glue](https://aws.amazon.com/glue) – AWS Glue 是一種無伺服器資料整合服務，可讓您輕鬆探索、準備和結合資料，以進行分析、機器學習和應用程式開發。
+ [Git 用戶端](https://git-scm.com/downloads) – Git 提供 GUI 工具，或者您可以使用命令列或桌面工具從 GitHub 檢查所需的成品。 
+ [AWS CDK](https://aws.amazon.com/cdk/) – AWS CDK 是一種開放原始碼軟體開發架構，可協助您使用熟悉的程式設計語言定義雲端應用程式資源。

## 史詩
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-epics"></a>

### 部署範例程式碼
<a name="deploy-the-sample-code"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定 AWS CLI。 | 將 AWS Command Line Interface (AWS CLI) 設定為目標，並使用您目前的 AWS 帳戶進行驗證。如需說明，請參閱 [AWS CLI 文件](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。 | 開發人員、DevOps 工程師 | 
| 解壓縮範例專案檔案。 | 從附件解壓縮檔案，以建立包含範例專案檔案的資料夾。 | 開發人員、DevOps 工程師 | 
| 部署範例程式碼。 | 解壓縮檔案之後，請從解壓縮位置執行下列命令，以建立基準範例：<pre>cdk bootstrap<br />cdk deploy<br />git init<br />git remote add origin <code-commit-repository-url><br />git stage .<br />git commit -m "adds sample code"<br />git push --set-upstream origin main</pre><br />在最後一個命令之後，您可以監控管道和 AWS Glue 任務的狀態。 | 開發人員、DevOps 工程師 | 
| 自訂程式碼。 | 根據您的業務需求自訂 etl.py 檔案的程式碼。您可以修改 ETL 程式碼、修改管道階段或擴展解決方案。 | 資料工程師 | 

## 相關資源
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-resources"></a>
+ [AWS CDK 入門](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)
+ [在 AWS Glue 中新增任務](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)
+ [CodePipeline 中的來源動作整合](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source)
+ [在 CodePipeline 的管道中調用 AWS Lambda 函數](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html)
+ [AWS Glue 程式設計](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming.html)
+ [AWS CodeCommit GetFile API](https://docs.aws.amazon.com/codecommit/latest/APIReference/API_GetFile.html)

## 附件
<a name="attachments-99a67388-5939-4267-8324-b6ca8bfa7962"></a>

若要存取與本文件相關聯的其他內容，請解壓縮下列檔案： [attachment.zip](samples/p-attach/99a67388-5939-4267-8324-b6ca8bfa7962/attachments/attachment.zip)