

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

# Git 儲存器與 SageMaker AI 筆記本執行個體
<a name="nbi-git-repo"></a>

建立 Git 儲存庫與筆記本執行個體的關聯性，以節約即使停止或刪除筆記本執行個體，仍保留在來源控制環境中的筆記本。您可以建立一個預設儲存庫、最多三個其他儲存庫與筆記本執行個體的關聯性。儲存庫可以在 AWS CodeCommit GitHub 或任何其他 Git 伺服器上託管。建立 Git 儲存庫與您筆記本執行個體的關聯性有利於：
+ 持續性 – 筆記本執行個體的筆記本是存放在耐用的 Amazon EBS 磁碟區中，但保留期不超過筆記本執行個體的生命週期。將筆記本存放在 Git 儲存庫中，可讓您存放和使用筆記本，即使您停止或刪除您的筆記本執行個體。
+ 協作 – 團隊同儕通常會一起處理機器學習專案。將您的筆記本存放在 Git 儲存庫中，可讓同事使用不同的筆記本執行個體工作，共享筆記本，並使用它們在來源控制環境中協作。
+ 學習 – 許多示範機器學習技巧的 Jupyter 筆記本，可於 GitHub 等公開託管的 Git 儲存庫中取得。您可以建立筆記本執行個體與儲存庫的關聯性，輕鬆載入該儲存庫收納的 Jupyter 筆記本。

有兩種方式可建立 Git 儲存庫與筆記本執行個體的關聯性：
+ 在您的 Amazon SageMaker AI 帳戶中將 Git 儲存庫新增為資源。然後，若要存取儲存庫，您可以指定包含登入資料的 AWS Secrets Manager 秘密。如此即可存取需要身分驗證的儲存庫。
+ 建立與非您帳戶資源之公有 Git 儲存庫的關聯性。如果執行此作業，您將無法指定存取儲存庫的憑證資料。

**Topics**
+ [將 Git 儲存庫新增至您的 Amazon SageMaker AI 帳戶](nbi-git-resource.md)
+ [使用關聯的 Git 儲存庫建立筆記本執行個體](nbi-git-create.md)
+ [將不同 AWS 帳戶中的 CodeCommit 儲存庫與筆記本執行個體建立關聯](nbi-git-cross.md)
+ [在筆記本執行個體中使用 Git 儲存庫](git-nbi-use.md)

# 將 Git 儲存庫新增至您的 Amazon SageMaker AI 帳戶
<a name="nbi-git-resource"></a>

**重要**  
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授與許可，才能將標籤新增至這些資源。需要將標籤新增至資源的許可，因為 Studio 和 Studio Classic 會自動標記它們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源，但不允許標記，則在嘗試建立資源時可能會發生 "AccessDenied" 錯誤。如需詳細資訊，請參閱[提供標記 SageMaker AI 資源的許可](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
提供許可來建立 SageMaker 資源的 [AWS Amazon SageMaker AI 的 受管政策](security-iam-awsmanpol.md) 已包含建立這些資源時新增標籤的許可。

若要管理您的 GitHub 儲存庫、輕鬆將它們與您的筆記本執行個體建立關聯性，以及針對需要驗證的儲存庫關聯憑證，請將這些儲存庫新增為您 Amazon SageMaker AI 帳戶中的資源。您可以在 SageMaker AI 主控台中和使用 API 檢視您帳戶中存放的儲存庫清單，以及每個儲存庫的詳細資訊。

您可以在 SageMaker AI 主控台中或使用 AWS CLI將 Git 儲存庫新增到您的 SageMaker AI 帳戶。

**注意**  
您可以使用 SageMaker AI API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCodeRepository.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCodeRepository.html) 將 Git 儲存庫新增到您的 SageMaker AI 帳戶，但本文不提供逐步指示。

## 將 Git 儲存庫新增到您的 SageMaker AI 帳戶 (主控台)
<a name="nbi-git-resource-console"></a>

**將 Git 儲存庫新增為您 SageMaker AI 帳戶中的資源**

1. 開啟位在 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/) 的 SageMaker AI 主控台。

1. 在**筆記本**下選擇** Git 儲存庫**，然後選擇**新增儲存庫**。

1. 若要新增 CodeCommit 儲存庫，請選擇 **AWS CodeCommit**。若要新增 GitHub 或其他 Git 型儲存庫，請選擇 **GitHub/其他 Git 型儲存庫**。

**若要新增使用現有的 CodeCommit 儲存庫**

1. 選擇**使用現有儲存庫**。

1. 針對**儲存庫**，從清單選擇儲存庫。

1. 在 SageMaker AI 中輸入要用於儲存庫的名稱。名稱長度必須為 1 至 63 個字元。有效字元為 a-z、A-Z、0-9 和 - (連字號)。

1. 選擇**新增儲存庫**。

**建立新的 CodeCommit 儲存庫**

1. 選擇**建立新的儲存庫**。

1. 輸入 CodeCommit 和 SageMaker AI 中皆可使用的儲存庫名稱。名稱長度必須為 1 至 63 個字元。有效字元為 a-z、A-Z、0-9 和 - (連字號)。

1. 選擇**建立儲存庫**。

**若要新增非託管在 CodeCommit 的 Git 儲存庫**

1. 選擇 **GitHub/其他 Git 型儲存庫**。

1. 輸入最多 63 個字元的名稱。有效字元包含英數字元、連字號 (-) 和 0-9。

1. 輸入儲存庫的 URL。在 URL 中不要提供使用者名稱。在 中新增登入憑證 AWS Secrets Manager ，如下一個步驟所述。

1. 針對 **Git 憑證**，選擇用來向儲存庫驗證身分的憑證。僅有當 Git 儲存庫為私有時才有必要。
**注意**  
如果您為 Git 儲存庫啟用了雙重身分驗證，請在 `password` 欄位中輸入 Git 服務供應商產生的個人存取權杖。

   1. 若要使用現有的 AWS Secrets Manager 秘密，請選擇**使用現有的秘密**，然後從清單中選擇秘密。有關建立和儲存密鑰的資訊，請參閱[建立基本機密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)，在 *AWS Secrets Manager 使用者指南*。您使用的秘密的名稱必須包含字串 `sagemaker`。
**注意**  
秘密必須有 `AWSCURRENT` 的預備標籤，且格式必須如下：  
`{"username": UserName, "password": Password}`  
針對 GitHub 儲存庫，建議您在 `password` 欄位使用個人存取權杖。如需相關資訊，請參閱 [https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/)。

   1. 若要建立新的 AWS Secrets Manager 秘密，請選擇**建立秘密**，輸入秘密的名稱，然後輸入用於向儲存庫進行身分驗證的登入憑證。秘密的名稱必須包含字串 `sagemaker`。
**注意**  
用來建立秘密的 IAM 角色必須具有其 IAM 政策的 `secretsmanager:GetSecretValue` 許可。  
秘密必須有 `AWSCURRENT` 的預備標籤，且格式必須如下：  
`{"username": UserName, "password": Password}`  
針對 GitHub 儲存庫，建議您使用個人存取權杖。

   1. 若要不使用任何憑證，請選擇**無機密**。

1. 選擇**建立機密**。

# 將 Git 儲存庫新增到您的 Amazon SageMaker AI 帳戶 (CLI)
<a name="nbi-git-resource-cli"></a>

**重要**  
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授與許可，才能將標籤新增至這些資源。需要將標籤新增至資源的許可，因為 Studio 和 Studio Classic 會自動標記它們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源，但不允許標記，則在嘗試建立資源時可能會發生 "AccessDenied" 錯誤。如需詳細資訊，請參閱[提供標記 SageMaker AI 資源的許可](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
提供許可來建立 SageMaker 資源的 [AWS Amazon SageMaker AI 的 受管政策](security-iam-awsmanpol.md) 已包含建立這些資源時新增標籤的許可。

使用 `create-code-repository` AWS CLI 命令將 Git 儲存庫新增至 Amazon SageMaker AI，讓使用者存取外部資源。指定儲存庫名稱做為 `code-repository-name` 引數的值。名稱長度必須為 1 至 63 個字元。有效字元為 a-z、A-Z、0-9 和 - (連字號)。也指定下列內容：
+ 預設分支
+ Git 儲存庫的 URL
**注意**  
在 URL 中不要提供使用者名稱。在 中新增登入憑證 AWS Secrets Manager ，如下一個步驟所述。
+  AWS Secrets Manager 秘密的 Amazon Resource Name (ARN)，其中包含用來驗證儲存庫做為`git-config`引數值的登入資料

有關建立和儲存機密的資訊，請參閱[建立基本機密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)在*AWS Secrets Manager 使用者指南*。以下命令會在您的 Amazon SageMaker AI 帳戶中建立名為 `MyRespository` 的新儲存庫，其指向 `https://github.com/myprofile/my-repo"` 中託管的 Git 儲存庫。

對於 Linux、OS X 或 Unix：

```
aws sagemaker create-code-repository \
                    --code-repository-name "MyRepository" \
                    --git-config Branch=branch,RepositoryUrl=https://github.com/myprofile/my-repo,SecretArn=arn:aws:secretsmanager:us-east-2:012345678901:secret:my-secret-ABc0DE
```

針對 Windows：

```
aws sagemaker create-code-repository ^
                    --code-repository-name "MyRepository" ^
                    --git-config "{\"Branch\":\"master\", \"RepositoryUrl\" :
                    \"https://github.com/myprofile/my-repo\", \"SecretArn\" : \"arn:aws:secretsmanager:us-east-2:012345678901:secret:my-secret-ABc0DE\"}"
```

**注意**  
秘密必須有 `AWSCURRENT` 的預備標籤，且格式必須如下：  
`{"username": UserName, "password": Password}`  
針對 GitHub 儲存庫，建議您使用個人存取權杖。

# 使用關聯的 Git 儲存庫建立筆記本執行個體
<a name="nbi-git-create"></a>

**重要**  
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授與許可，才能將標籤新增至這些資源。需要將標籤新增至資源的許可，因為 Studio 和 Studio Classic 會自動標記它們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源，但不允許標記，則在嘗試建立資源時可能會發生 "AccessDenied" 錯誤。如需詳細資訊，請參閱[提供標記 SageMaker AI 資源的許可](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
提供許可來建立 SageMaker 資源的 [AWS Amazon SageMaker AI 的 受管政策](security-iam-awsmanpol.md) 已包含建立這些資源時新增標籤的許可。

當您使用 或 建立筆記本執行個體時 AWS 管理主控台，您可以將 Git 儲存庫與筆記本執行個體建立關聯 AWS CLI。如果您想要使用與筆記本執行個體位於不同 AWS 帳戶中的 CodeCommit 儲存庫，請設定儲存庫的跨帳戶存取權。如需相關資訊，請參閱[將不同 AWS 帳戶中的 CodeCommit 儲存庫與筆記本執行個體建立關聯](nbi-git-cross.md)。

**Topics**
+ [使用關聯的 Git 儲存庫建立筆記本執行個體 (主控台)](#nbi-git-create-console)
+ [使用關聯的 Git 儲存庫建立筆記本執行個體 (CLI)](nbi-git-create-cli.md)

## 使用關聯的 Git 儲存庫建立筆記本執行個體 (主控台)
<a name="nbi-git-create-console"></a>

**在 Amazon SageMaker AI 主控台中建立筆記本執行個體並關聯 Git 儲存庫**

1. 按照[建立教學課程的 Amazon SageMaker 筆記本執行個體](gs-setup-working-env.md)中的指示進行。

1. 針對**Git 儲存庫**，選擇要與筆記本執行個體建立關聯性的 Git 儲存庫。

   1. 針對**預設儲存庫**，請選擇要當作預設儲存庫的儲存庫。SageMaker AI 會將此儲存庫複製為位於 `/home/ec2-user/SageMaker` Jupyter 啟動目錄中的子目錄。當您開啟筆記本執行個體時，它會在此儲存庫中開啟。若要選擇存放為帳戶資源的儲存庫，請從清單中選擇它的名稱。若要將新儲存庫新增為帳戶中的資源，請選擇**將儲存庫新增至 SageMaker AI (在新視窗中開啟新增儲存庫流程)**，然後遵循[使用關聯的 Git 儲存庫建立筆記本執行個體 (主控台)](#nbi-git-create-console)中的指示進行操作。若要複製非存放在您帳戶的公有儲存庫，請選擇**只將公有 Git 儲存庫複製到此筆記本執行個體**，然後指定該儲存庫的 URL。

   1. 針對**其他儲存庫 1**，請選擇要新增為其他目錄的儲存庫。SageMaker AI 會將此儲存庫複製為位於 `/home/ec2-user/SageMaker` Jupyter 啟動目錄中的子目錄。若要選擇存放為帳戶資源的儲存庫，請從清單中選擇它的名稱。若要將新儲存庫新增為帳戶中的資源，請選擇**將儲存庫新增至 SageMaker AI (在新視窗中開啟新增儲存庫流程)**，然後遵循[使用關聯的 Git 儲存庫建立筆記本執行個體 (主控台)](#nbi-git-create-console)中的指示進行操作。若要複製非存放在您帳戶的儲存庫，請選擇**只將公有 Git 儲存庫複製到此筆記本執行個體**，然後指定該儲存庫的 URL。

      重複此步驟不超過三次，在您的筆記本執行個體中新增最多三個其他儲存庫。

# 使用關聯的 Git 儲存庫建立筆記本執行個體 (CLI)
<a name="nbi-git-create-cli"></a>

**重要**  
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授與許可，才能將標籤新增至這些資源。需要將標籤新增至資源的許可，因為 Studio 和 Studio Classic 會自動標記它們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源，但不允許標記，則在嘗試建立資源時可能會發生 "AccessDenied" 錯誤。如需詳細資訊，請參閱[提供標記 SageMaker AI 資源的許可](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
提供許可來建立 SageMaker 資源的 [AWS Amazon SageMaker AI 的 受管政策](security-iam-awsmanpol.md) 已包含建立這些資源時新增標籤的許可。

若要使用 AWS CLI建立筆記本執行個體，並建立 Git 儲存庫的關聯性，請使用 `create-notebook-instance` 命令，如下所示：
+ 指定要當作預設儲存庫且作為 `default-code-repository` 引數值的儲存庫。Amazon SageMaker AI 會將此儲存庫複製為位於 `/home/ec2-user/SageMaker` 的 Jupyter 啟動目錄中的子目錄。當您開啟筆記本執行個體時，它會在此儲存庫中開啟。若要使用存放為 SageMaker AI 帳戶中資源的儲存庫，請指定儲存庫名稱做為 `default-code-repository` 引數的值。若要使用非存放在帳戶中的儲存庫，請指定儲存庫 URL 做為 `default-code-repository` 引數的值。
+ 最多指定三個其他儲存庫做為 `additional-code-repositories` 引數的值。SageMaker AI 會將此儲存庫複製為位於 `/home/ec2-user/SageMaker` 的 Jupyter 啟動目錄中的子目錄，並將其新增至預設儲存庫的 `.git/info/exclude` 目錄，從預設儲存庫中排除。若要使用存放為 SageMaker AI 帳戶中資源的儲存庫，請指定儲存庫名稱做為 `additional-code-repositories` 引數的值。若要使用非存放在帳戶中的儲存庫，請指定儲存庫 URL 做為 `additional-code-repositories` 引數的值。

例如，以下命令會建立一個筆記本執行個體，其具有名為 `MyGitRepo` 的儲存庫，而此儲存庫會存放為您 SageMaker AI 帳戶中的資源，做為預設儲存庫，而且是託管在 GitHub 的額外儲存庫：

```
aws sagemaker create-notebook-instance \
                    --notebook-instance-name "MyNotebookInstance" \
                    --instance-type "ml.t2.medium" \
                    --role-arn "arn:aws:iam::012345678901:role/service-role/AmazonSageMaker-ExecutionRole-20181129T121390" \
                    --default-code-repository "MyGitRepo" \
                    --additional-code-repositories "https://github.com/myprofile/my-other-repo"
```

**注意**  
如果您使用的名稱中不包含 "SageMaker" 的 AWS CodeCommit 儲存庫，請將 `codecommit:GitPull`和 `codecommit:GitPush`許可新增至做為 `create-notebook-instance` 命令引`role-arn`數傳遞的角色。如需有關將許可新增給角色的資訊，請參閱*AWS Identity and Access Management 使用者指南》*中的[新增和移除 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

# 將不同 AWS 帳戶中的 CodeCommit 儲存庫與筆記本執行個體建立關聯
<a name="nbi-git-cross"></a>

若要將不同 AWS 帳戶中的 CodeCommit 儲存庫與您的筆記本執行個體建立關聯，請設定 CodeCommit 儲存庫的跨帳戶存取權。

**若要為 CodeCommit 儲存庫設定跨帳戶存取權，請將其與筆記本執行個體建立關聯：**

1. 在包含 CodeCommit 儲存庫的 AWS 帳戶中，建立 IAM 政策，允許包含筆記本執行個體之帳戶中的使用者存取儲存庫。如需相關資訊，請參閱[步驟 1：在 AccountA 中建立儲存庫存取權政策](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account-administrator-a.html#cross-account-create-policy-a)在 *CodeCommit 使用者指南*。

1. 在包含 CodeCommit 儲存庫的 AWS 帳戶中，建立 IAM 角色，並將您在上一個步驟中建立的政策連接到該角色。如需相關資訊，請參閱[步驟 2：在 AccountA 中為儲存庫存取權建立角色](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account-administrator-a.html#cross-account-create-role-a)，在 *CodeCommit 使用者指南*。

1. 在使用您在上個步驟中建立之角色的筆記本執行個體中建立設定檔：

   1. 開啟筆記本執行個體。

   1. 在筆記本執行個體開啟終端機。

   1. 透過在終端機輸入以下內容來編輯新的設定檔：

      ```
      vi /home/ec2-user/.aws/config
      ```

   1. 使用以下設定檔資訊來編輯檔案：

      ```
      [profile CrossAccountAccessProfile]
      region = us-west-2
      role_arn = arn:aws:iam::CodeCommitAccount:role/CrossAccountRepositoryContributorRole
      credential_source=Ec2InstanceMetadata
      output = json
      ```

      其中 *CodeCommitAccount* 是包含 CodeCommit 儲存庫的帳戶，*CrossAccountAccessProfile* 是新設定檔的名稱，而 *CrossAccountRepositoryContributorRole* 是您在上個步驟建立的角色名稱。

1. 在筆記本執行個體中，將 git 設定為使用您在上個步驟中建立的設定檔：

   1. 開啟筆記本執行個體。

   1. 在筆記本執行個體開啟終端機。

   1. 在終端機中輸入以下內容來編輯 Git 組態檔案：

      ```
      vi /home/ec2-user/.gitconfig
      ```

   1. 使用以下設定檔資訊來編輯檔案：

      ```
      [credential]
              helper = !aws codecommit credential-helper --profile CrossAccountAccessProfile $@
              UseHttpPath = true
      ```

      其中 *CrossAccountAccessProfile* 是您在上個步驟建立的設定檔名稱。

# 在筆記本執行個體中使用 Git 儲存庫
<a name="git-nbi-use"></a>

當您開啟有相關聯 Git 儲存庫的筆記本執行個體時，它會在預設儲存庫中開啟，這是直接安裝在 `/home/ec2-user/SageMaker` 下的筆記本執行個體中。您可以開啟並建立筆記本，而且可以在筆記本儲存格中手動執行 Git 命令。例如：

```
!git pull origin master
```

若要開啟任何其他儲存庫，請向上導覽一個資料夾。其他儲存庫也安裝為 `/home/ec2-user/SageMaker` 下的目錄。

如果使用 JupyterLab 介面開啟筆記本執行個體，即可安裝並使用 jupyter-git 延伸。如需 JupyterLab 之 jupyter-git 延伸模組的資訊，請參閱 [https://github.com/jupyterlab/jupyterlab-git](https://github.com/jupyterlab/jupyterlab-git)。

當您在 JupyterLab 開啟筆記本執行個體時，您會在左側選單中看到與其相關聯的 git 儲存庫：

![\[JupyterLab 中的範例檔案瀏覽器。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/git-notebook.png)


您可以使用 jupyter-git 延伸模組以視覺方式管理 git，而不是使用命令列：

![\[JupyterLab 中 jupyter-git 延伸模組的範例。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/jupyterlab-git.png)
