本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 AWS Glue 中使用 Git 版本控制系統
注意
筆記本目前不支援 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,以及建置連續且協作的程式碼管道。
IAM 許可
確保任務具有下列其中一個 IAM 許可。如需有關設定 IAM 許可的詳細資訊,請參閱設定 AWS Glue Studio 的 IAM 許可。
-
AWSGlueServiceRole -
AWSGlueConsoleFullAccess
整合 Git 至少需要執行下列動作:
-
glue:UpdateJobFromSourceControl— 以便能使用版本控制系統中的任務更新 AWS Glue -
glue:UpdateSourceControlFromJob— 以便能使用儲存於 AWS Glue 的任務更新版本控制系統 -
s3:GetObject— 以便能擷取任務的指令碼,同時將指令碼推送至版本控制系統 -
s3:PutObject— 以便能在從來源控制系統提取任務時更新指令碼
先決條件
為了將任務推送至來源控制儲存庫,您將需要:
-
已由您管理員建立的儲存庫
-
儲存庫中的分支
-
個人存取權杖 (如果是 Bitbucket,此為儲存庫存取權杖)
-
儲存庫擁有者的使用者名稱
-
在儲存庫中設定許可,以允許 AWS Glue Studio 讀取和寫入儲存庫
-
GitLab – 將字符範圍設定為 api、read_repository 和 write_repository
-
Bitbucket – 將許可設定為:
-
工作區成員資格 – 讀取、寫入
-
專案 – 寫入、管理員讀取
-
儲存庫 – 讀取、寫入、管理員、刪除
-
-
注意
在使用 AWS CodeCommit 時,無需個人存取權杖和儲存庫擁有者。請參閱 Getting started with Git and AWS CodeCommit。
使用來自 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" } }
限制
-
AWS Glue 目前不支援從 GitLab-Groups
推送/提取。
將版本控制儲存庫與 AWS Glue 連線
您可以輸入您的版本控制儲存庫詳細資訊,並在 AWS Glue Studio 任務編輯器的 Version Control (版本控制) 索引標籤中管理。若要與您的 Git 儲存庫整合,則必須在每次登入 AWS Glue Studio 時連線至您的儲存庫。
連接 Git 版本控制系統:
-
在 AWS Glue Studio 中,開始新任務並選擇 Version Control (版本控制) 索引標籤。
-
在版本控制系統中按一下下拉式選單,從可用選項中選擇 Git 服務。
-
AWS CodeCommit
-
GitHub
-
GitLab
-
Bitbucket
-
-
根據您選擇的 Git 版本控制系統,您會需要完成不同的欄位。
如果使用 AWS CodeCommit:
選取任務的儲存庫和分支,完成儲存庫組態:
-
Repository (儲存庫) — 如果您已在 AWS CodeCommit 設定儲存庫,請從下拉式選單中選取該儲存庫。您的儲存庫會自動填入清單中
-
分支 – 從下拉式選單中選取分支
-
資料夾 – 選用 – 輸入要儲存任務的資料夾名稱。如果留空,系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱
如果是 GitHub:
完成以下欄位,完成 GitHub 組態:
-
Personal access token (個人存取字符) — 這是指 GitHub 儲存庫提供的字符。如需個人存取字符的詳細資訊,請參閱 GitHub 文件
-
Repository owner (儲存庫擁有者) — 這是指 GitHub 儲存庫的擁有者。
選取 GitHub 的儲存庫和分支,完成儲存庫組態。
-
Repository (儲存庫) — 如果您已在 GitHub 設定儲存庫,請從下拉式選單中選取該儲存庫。您的儲存庫會自動填入清單中
-
分支 – 從下拉式選單中選取分支
-
資料夾 – 選用 – 輸入要儲存任務的資料夾名稱。如果留空,系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱
對於 GitLab:
注意
AWS Glue 目前不支援從 GitLab-Groups
推送/提取。 -
個人存取權杖 – 這是 GitLab 儲存庫提供的權杖。如需有關個人存取權杖的詳細資訊,請參閱 GitLab Personal access tokens
-
儲存庫擁有者 – 這是 GitLab 儲存庫的擁有者。
選取 GitLab 的儲存庫和分支,完成儲存庫組態。
-
儲存庫 – 如果您已在 GitLab 設定儲存庫,請從下拉式選單中選取該儲存庫。您的儲存庫會自動填入清單中
-
分支 – 從下拉式選單中選取分支
-
資料夾 – 選用 – 輸入要儲存任務的資料夾名稱。如果留空,系統會為您自動建立資料夾。資料夾名稱會預設為任務名稱
對於 Bitbucket:
-
應用程式密碼 – Bitbucket 使用應用程式密碼,而不是儲存庫存取字符。如需應用程式密碼的詳細資訊,請參閱應用程式密碼
。 -
儲存庫擁有者 – 這是 Bitbucket 儲存庫的擁有者。在 Bitbucket 中,擁有者是儲存庫的建立者。
選取 Bitbucket 的工作空間、儲存庫、分支和資料夾,完成儲存庫組態。
-
工作空間 – 如果您在 Bitbucket 中設定工作空間,請從下拉式選單中選取該工作空間。系統會自動填入您的工作空間
-
儲存庫 – 如果您在 Bitbucket 中設定儲存庫,請從下拉式選單中選取該儲存庫。系統會自動填入您的儲存庫
-
分支 – 從下拉式選單中選取分支。系統會自動填入您的分支
-
資料夾 – 選用 – 輸入要儲存任務的資料夾名稱。如果留空,系統會使用任務名稱為您自動建立資料夾。
-
-
在 AWS Glue Studio 任務的頂端選擇 Save (儲存)
將 AWS Glue 任務推送到來源儲存庫
輸入版本控制系統的詳細資訊後,您就可以在 AWS Glue Studio 編輯任務,並將任務推送到您的來源儲存庫。如果您對 Git 概念 (例如推送和提取) 不甚熟悉,請參閱開始使用 Git 和 AWS CodeCommit 教學。
如要將任務推送到儲存庫,您需要輸入版本控制系統的詳細資訊並儲存任務。
-
在 AWS Glue Studio 任務中,選擇 Actions (動作)。其他選單選項會隨即開啟。
-
選擇 Push to repository (推送到儲存庫)。
此動作會儲存任務。將任務推送到儲存庫時,AWS Glue Studio 會推送最近一次儲存的變更。如果儲存庫中的任務已由您或其他使用者修改,而且與 AWS Glue Studio 中的任務不同步,儲存庫中的任務就會由您從 AWS Glue Studio 推送且儲存於 AWS Glue Studio 的任務覆寫。
-
選擇 Confirm (確認) 以完成動作。系統會隨即在儲存庫中建立新的遞交。如果您使用的是 AWS CodeCommit,確認訊息中會顯示 AWS CodeCommit 上最新遞交的連結。
從來源儲存庫提取 AWS Glue 任務
只要您在 Version control (版本控制) 索引標籤中輸入 Git 儲存庫的詳細資訊,您也可以從儲存庫提取任務,並在 AWS Glue Studio 中編輯。
-
在 AWS Glue Studio 任務中,選擇 Actions (動作)。其他選單選項會隨即開啟。
-
選擇 Pull from repository (從儲存庫提取)。
-
選擇 Confirm (確認)。如要這麼做,您必須先從儲存庫取得最新的遞交,並在 AWS Glue Studio 中更新任務。
-
在 AWS Glue Studio 中編輯任務。完成變更後,您可以從 Actions (動作) 選單中選擇 Push to repository (推送到儲存庫),將任務同步至儲存庫。