

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

# 在 AWS Glue 中使用 Git 版本控制系統
<a name="edit-job-add-source-control-integration"></a>

**注意**  
 筆記本目前不支援 AWS Glue Studio 中的版本控制。然而，可支援 AWS Glue 任務指令碼和視覺化 ETL 任務的版本控制。

 如果您有遠端儲存庫，並想要使用儲存庫管理您的AWS Glue任務，您可以使用 AWS Glue Studio或 AWS CLI 來同步 中儲存庫和任務的變更AWS Glue。以這種方式同步變更，等於是將任務從 AWS Glue Studio 推送到您的儲存庫，或從儲存庫提取到 AWS Glue Studio。

 在 AWS Glue Studio 中完成 Git 整合後，您可以：
+  與 Git 版本控制系統整合，例如 AWS CodeCommit GitHub、GitLab 和 Bitbucket 
+  無論您是使用視覺化任務或指令碼任務，都能在 AWS Glue Studio 中編輯 AWS Glue 任務，並將任務同步到儲存庫 
+  將任務中的來源和目標參數化 
+  從儲存庫提取任務，並在 AWS Glue Studio 中編輯 
+  利用 AWS Glue Studio 的多分支工作流程，從分支提取任務及/或將任務推送到分支，藉以測試任務 
+  從儲存庫下載檔案並將任務上傳至 AWS Glue Studio，以便建立跨帳戶任務 
+  使用您選擇的自動化工具 （例如 Jenkins AWS CodeDeploy等） 

此影片示範如何將 AWS Glue 與 Git 整合，並建置持續且協作的程式碼管道。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/XRlZq2kvE4U/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/XRlZq2kvE4U)


## IAM 許可
<a name="git-integration-permissions"></a>

 確保任務具有下列其中一個 IAM 許可。如需有關設定 IAM 許可的詳細資訊，請參閱[設定 AWS Glue Studio 的 IAM 許可](https://docs.aws.amazon.com/glue/latest/ug/setting-up.html?icmpid=docs_glue_studio_helppanel#getting-started-iam-permissions)。
+ `AWSGlueServiceRole`
+ `AWSGlueConsoleFullAccess`

 整合 Git 至少需要執行下列動作：
+  `glue:UpdateJobFromSourceControl` — 以便能使用版本控制系統中的任務更新 AWS Glue 
+  `glue:UpdateSourceControlFromJob` — 以便能使用儲存於 AWS Glue 的任務更新版本控制系統 
+  `s3:GetObject` — 以便能擷取任務的指令碼，同時將指令碼推送至版本控制系統 
+  `s3:PutObject` — 以便能在從來源控制系統提取任務時更新指令碼 

## 先決條件
<a name="edit-job-push-source-repository-prerequisites"></a>

 為了將任務推送至來源控制儲存庫，您將需要：
+  已由您管理員建立的儲存庫 
+  儲存庫中的分支 
+  個人存取權杖 (如果是 Bitbucket，此為儲存庫存取權杖) 
+  儲存庫擁有者的使用者名稱 
+  在儲存庫中設定許可，以允許 AWS Glue Studio 讀取和寫入儲存庫 
  +  **GitLab** – 將字符範圍設定為 api、read\$1repository 和 write\$1repository 
  +  **Bitbucket** – 將許可設定為：
    + **工作區成員資格** – 讀取、寫入
    + **專案** – 寫入、管理員讀取
    + **儲存庫** – 讀取、寫入、管理員、刪除

**注意**  
 使用 時 AWS CodeCommit，不需要個人存取字符和儲存庫擁有者。請參閱 [Getting started with Git and AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started.html)。

 **使用來自 AWS Glue Studio 中的來源控制儲存庫的任務** 

 為了從來源控制儲存庫提取不在 AWS Glue Studio 中的任務，並在 AWS Glue Studio 使用該任務，不同任務類型會有不同的先決條件。

 **對於視覺化任務：**
+  您需要一個資料夾和任務定義 (需與任務名稱相符) 的 JSON 檔案 

   如需範例，請參閱下方的任務定義。儲存庫中的分支應包含路徑 `my-visual-job/my-visual-job.json`，其中資料夾和 JSON 檔案都需與任務名稱相符 

  ```
  {
    "name" : "my-visual-job",
    "description" : "",
    "role" : "arn:aws:iam::aws_account_id:role/Rolename",
    "command" : {
      "name" : "glueetl",
      "scriptLocation" : "s3://foldername/scripts/my-visual-job.py",
      "pythonVersion" : "3"
    },
    "codeGenConfigurationNodes" : "{\"node-nodeID\":{\"S3CsvSource\":{\"AdditionalOptions\":{\"EnableSamplePath\":false,\"SamplePath\":\"s3://notebook-test-input/netflix_titles.csv\"},\"Escaper\":\"\",\"Exclusions\":[],\"Name\":\"Amazon S3\",\"OptimizePerformance\":false,\"OutputSchemas\":[{\"Columns\":[{\"Name\":\"show_id\",\"Type\":\"string\"},{\"Name\":\"type\",\"Type\":\"string\"},{\"Name\":\"title\",\"Type\":\"choice\"},{\"Name\":\"director\",\"Type\":\"string\"},{\"Name\":\"cast\",\"Type\":\"string\"},{\"Name\":\"country\",\"Type\":\"string\"},{\"Name\":\"date_added\",\"Type\":\"string\"},{\"Name\":\"release_year\",\"Type\":\"bigint\"},{\"Name\":\"rating\",\"Type\":\"string\"},{\"Name\":\"duration\",\"Type\":\"string\"},{\"Name\":\"listed_in\",\"Type\":\"string\"},{\"Name\":\"description\",\"Type\":\"string\"}]}],\"Paths\":[\"s3://dalamgir-notebook-test-input/netflix_titles.csv\"],\"QuoteChar\":\"quote\",\"Recurse\":true,\"Separator\":\"comma\",\"WithHeader\":true}}}"
  }
  ```

 **對於指令碼任務：**
+  您需要一個資料夾、內含任務定義的 JSON 檔案和指令碼 
+  資料夾和 JSON 檔案應與任務名稱相符。指令碼名稱必須與任務定義中的 `scriptLocation` 及檔案附檔名相符 

   例如在下方的任務定義中，儲存庫中的分支應包含路徑 `my-script-job/my-script-job.json` 和 `my-script-job/my-script-job.py`。指令碼名稱應與 `scriptLocation` 中的名稱相符，包括指令碼的附檔名 

  ```
  {
    "name" : "my-script-job",
    "description" : "",
    "role" : "arn:aws:iam::aws_account_id:role/Rolename",
    "command" : {
      "name" : "glueetl",
      "scriptLocation" : "s3://foldername/scripts/my-script-job.py",
      "pythonVersion" : "3"
    }
  }
  ```

## 限制
<a name="edit-job-repository-limitations"></a>
+  AWS Glue 目前不支援從 [GitLab-Groups](https://docs.gitlab.com/ee/user/group) 推送/提取。

## 將版本控制儲存庫與 AWS Glue 連線
<a name="edit-job-connecting-repositories"></a>

 您可以輸入您的版本控制儲存庫詳細資訊，並在 AWS Glue Studio 任務編輯器的 **Version Control** (版本控制) 索引標籤中管理。若要與您的 Git 儲存庫整合，則必須在每次登入 AWS Glue Studio 時連線至您的儲存庫。

 連接 Git 版本控制系統：

1.  在 AWS Glue Studio 中，開始新任務並選擇 **Version Control** (版本控制) 索引標籤。  
![\[如螢幕擷取畫面所顯示，任務的「Version Control」(版本控制) 索引標籤已選取。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/editing-nodes-version-control-tab.png)

1.  在**版本控制系統**中按一下下拉式選單，從可用選項中選擇 Git 服務。
   +  AWS CodeCommit 
   +  GitHub 
   + GitLab
   + Bitbucket

1.  根據您選擇的 Git 版本控制系統，您會需要完成不同的欄位。

   

    **對於 AWS CodeCommit**：

    選取任務的儲存庫和分支，完成儲存庫組態：
   +  **儲存庫** - 如果您已在其中設定儲存庫 AWS CodeCommit，請從下拉式功能表中選取儲存庫。您的儲存庫會自動填入清單中 
   +  **分支** – 從下拉式選單中選取分支 
   +  **資料夾** – *選用* – 輸入要儲存任務的資料夾名稱。如果留空，系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱 

   

    **如果是 GitHub**：

    完成以下欄位，完成 GitHub 組態：
   +  **Personal access token** (個人存取字符) — 這是指 GitHub 儲存庫提供的字符。如需個人存取字符的詳細資訊，請參閱 [GitHub 文件](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) 
   +  **Repository owner** (儲存庫擁有者) — 這是指 GitHub 儲存庫的擁有者。

    選取 GitHub 的儲存庫和分支，完成儲存庫組態。
   +  **Repository** (儲存庫) — 如果您已在 GitHub 設定儲存庫，請從下拉式選單中選取該儲存庫。您的儲存庫會自動填入清單中 
   +  **分支** – 從下拉式選單中選取分支 
   +  **資料夾** – *選用* – 輸入要儲存任務的資料夾名稱。如果留空，系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱 

   

    **對於 GitLab**：
**注意**  
 AWS Glue 目前不支援從 [GitLab-Groups](https://docs.gitlab.com/ee/user/group) 推送/提取。
   +  **個人存取權杖** – 這是 GitLab 儲存庫提供的權杖。如需有關個人存取權杖的詳細資訊，請參閱 [GitLab Personal access tokens](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) 
   +  **儲存庫擁有者** – 這是 GitLab 儲存庫的擁有者。

    選取 GitLab 的儲存庫和分支，完成儲存庫組態。
   +  **儲存庫** – 如果您已在 GitLab 設定儲存庫，請從下拉式選單中選取該儲存庫。您的儲存庫會自動填入清單中 
   +  **分支** – 從下拉式選單中選取分支 
   +  **資料夾** – *選用* – 輸入要儲存任務的資料夾名稱。如果留空，系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱 

    **對於 Bitbucket**：
   +  **應用程式密碼** – Bitbucket 使用應用程式密碼，而不是儲存庫存取字符。如需應用程式密碼的詳細資訊，請參閱[應用程式密碼](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。
   +  **儲存庫擁有者** – 這是 Bitbucket 儲存庫的擁有者。在 Bitbucket 中，擁有者是儲存庫的建立者。

    選取 Bitbucket 的工作空間、儲存庫、分支和資料夾，完成儲存庫組態。
   +  **工作空間** – 如果您在 Bitbucket 中設定工作空間，請從下拉式選單中選取該工作空間。系統會自動填入您的工作空間 
   +  **儲存庫** – 如果您在 Bitbucket 中設定儲存庫，請從下拉式選單中選取該儲存庫。系統會自動填入您的儲存庫 
   +  **分支** – 從下拉式選單中選取分支。系統會自動填入您的分支 
   +  **資料夾** – *選用* – 輸入要儲存任務的資料夾名稱。如果留空，系統會使用任務名稱為您自動建立資料夾。

1.  在 AWS Glue Studio 任務的頂端選擇 **Save** (儲存) 

## 將 AWS Glue 任務推送到來源儲存庫
<a name="edit-job-push-source-repository"></a>

 輸入版本控制系統的詳細資訊後，您就可以在 AWS Glue Studio 編輯任務，並將任務推送到您的來源儲存庫。如果您對 Git 概念 (例如推送和提取) 不甚熟悉，請參閱[開始使用 Git 和 AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started.html) 教學。

 如要將任務推送到儲存庫，您需要輸入版本控制系統的詳細資訊並儲存任務。

1.  在 AWS Glue Studio 任務中，選擇 **Actions** (動作)。其他選單選項會隨即開啟。  
![\[如螢幕擷取畫面所顯示，任務的「Actions」(動作) 選單已開啟。畫面上會顯示「Push to repository」(推送到儲存庫) 選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/editing-nodes-actions-push-to-repository.png)

1.  選擇 **Push to repository** (推送到儲存庫)。

    此動作會儲存任務。將任務推送到儲存庫時，AWS Glue Studio 會推送最近一次儲存的變更。如果儲存庫中的任務已由您或其他使用者修改，而且與 AWS Glue Studio 中的任務不同步，儲存庫中的任務就會由您從 AWS Glue Studio 推送且儲存於 AWS Glue Studio 的任務覆寫。

1.  選擇 **Confirm** (確認) 以完成動作。系統會隨即在儲存庫中建立新的遞交。如果您使用的是 AWS CodeCommit，確認訊息會顯示最新遞交的連結 AWS CodeCommit。

## 從來源儲存庫提取 AWS Glue 任務
<a name="edit-job-pull-source-repository"></a>

 只要您在 **Version control** (版本控制) 索引標籤中輸入 Git 儲存庫的詳細資訊，您也可以從儲存庫提取任務，並在 AWS Glue Studio 中編輯。

1.  在 AWS Glue Studio 任務中，選擇 **Actions** (動作)。其他選單選項會隨即開啟。  
![\[如螢幕擷取畫面所顯示，任務的「Actions」(動作) 選單已開啟。畫面上會顯示「Push to repository」(推送到儲存庫) 選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/editing-nodes-actions-push-to-repository.png)

1.  選擇 **Pull from repository** (從儲存庫提取)。

1.  選擇 **Confirm** (確認)。如要這麼做，您必須先從儲存庫取得最新的遞交，並在 AWS Glue Studio 中更新任務。

1.  在 AWS Glue Studio 中編輯任務。完成變更後，您可以從 **Actions** (動作) 選單中選擇 **Push to repository** (推送到儲存庫)，將任務同步至儲存庫。