

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 带有 SageMaker AI 笔记本实例的 Git 存储库
<a name="nbi-git-repo"></a>

将 Git 存储库与笔记本实例关联，以将笔记本保存在一个源代码控制环境中，即使您停止或删除了笔记本实例，该环境也会持续存在。您可以为笔记本实例关联一个默认存储库和最多三个附加存储库。存储库可以托管在 AWS CodeCommit GitHub、或任何其他 Git 服务器上。将 Git 存储库与笔记本实例关联可用于下列情况：
+ 持久保存 - 笔记本实例中的笔记本存储在持久的 Amazon EBS 卷上，但它们不会在笔记本实例的生命周期结束后继续存在。通过将笔记本存储在 Git 存储库中，即使停止或删除笔记本实例，也能存储和使用笔记本。
+ 协作 - 团队中的同事通常会一起处理机器学习项目。在 Git 存储库中存储笔记本使得同事可以处理不同笔记本实例，以在源代码控制环境中共享笔记本并进行协作。
+ 学习-许多演示机器学习技术的 Jupyter 笔记本都可以在公共托管的 Git 存储库中找到，例如在。 GitHub您可以将笔记本实例与存储库关联，从而轻松地加载包含在该存储库中的 Jupyter 笔记本。

有两种方法可以将 Git 存储库与笔记本实例关联起来：
+ 将 Git 存储库作为资源添加到您的 Amazon A SageMaker I 账户中。然后，要访问存储库，您可以指定包含凭据的 S AWS ecrets Manager 密钥。这样，您可以访问需要身份验证的存储库。
+ 关联并非您账户中资源的公有 Git 存储库。如果这样做，就不能指定用于访问存储库的凭证。

**Topics**
+ [向你的亚马逊 A SageMaker I 账户添加 Git 存储库](nbi-git-resource.md)
+ [创建关联 Git 存储库的笔记本实例](nbi-git-create.md)
+ [将不同 AWS 账户中的 CodeCommit 存储库与笔记本实例关联](nbi-git-cross.md)
+ [在笔记本实例中使用 Git 存储库](git-nbi-use.md)

# 向你的亚马逊 A SageMaker I 账户添加 Git 存储库
<a name="nbi-git-resource"></a>

**重要**  
允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限，是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记，则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息，请参阅 [提供标记 A SageMaker I 资源的权限](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
[AWS 亚马逊 A SageMaker I 的托管策略](security-iam-awsmanpol.md)授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

要管理您的 GitHub 存储库，轻松地将其与您的笔记本实例关联并关联需要身份验证的存储库的凭证，请将存储库作为资源添加到您的 Amazon A SageMaker I 账户中。您可以使用 API 在 SageMaker AI 控制台中查看存储在您的账户中的存储库列表以及有关每个存储库的详细信息。

您可以在 SageMaker AI 控制台中或使用将 Git 存储库添加到您的 SageMaker AI 账户 AWS CLI。

**注意**  
你可以使用 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 帐户，但此处未提供 step-by-step说明。

## 将 Git 仓库添加到你的 SageMaker AI 账户（控制台）
<a name="nbi-git-resource-console"></a>

**将 Git 仓库作为资源添加到您的 SageMaker AI 账户中**

1. 打开 SageMaker AI 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在**笔记本**下选择 **Git 存储库**，然后选择**添加存储库**。

1. 要添加 CodeCommit 存储库，请选择**AWS CodeCommit**。要添加 GitHub 或其他基于 Git 的存储库，请选择 **GitHub/**Other 基于 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. 选择**创建存储库**。

**添加托管在其他地方的 Git 仓库 CodeCommit**

1. 选择 **GitHub/其他基于 Git 的存储库**。

1. 输入最多 63 个字符的名称。有效字符包括字母数字字符、连字符 (-) 和 0-9。

1. 为存储库输入 URL。不要在 URL 中提供用户名。按照下一步所 AWS Secrets Manager 述，在中添加登录凭证。

1. 对于 **Git 凭证**，选择用于对存储库进行身份验证的凭证。只有在 Git 存储库是私有时才需要此项。
**注意**  
如果为 Git 存储库启用了双重身份验证，请在`password`字段中输入由 Git 服务提供商生成的个人访问令牌。

   1. 要使用现有 Secr AWS ets Manager **密钥，请选择使用现有密**钥，然后从列表中选择一个密钥。有关创建和存储密钥的信息，请参阅《AWS Secrets Manager 用户指南》**中的[创建基本密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)。您使用的密钥名称必须包含 `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. 要创建新的 Secrets Manager AWS **密钥，请选择创建**密钥，输入密钥的名称，然后输入用于向存储库进行身份验证的登录凭据。密钥名称必须包含 `sagemaker` 字符串。
**注意**  
您用于创建密钥的 IAM 角色必须在其 IAM 策略中具有 `secretsmanager:GetSecretValue` 权限。  
密钥的暂存标签必须为 `AWSCURRENT`，并且必须采用以下格式：  
`{"username": UserName, "password": Password}`  
对于 GitHub 存储库，我们建议使用个人访问令牌。

   1. 要不使用任何凭证，请选择**无密钥**。

1. 选择**创建密钥**。

# 向您的亚马逊 A SageMaker I 账户 (CLI) 添加 Git 存储库
<a name="nbi-git-resource-cli"></a>

**重要**  
允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限，是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记，则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息，请参阅 [提供标记 A SageMaker I 资源的权限](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
[AWS 亚马逊 A SageMaker I 的托管策略](security-iam-awsmanpol.md)授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

使用`create-code-repository` AWS CLI 命令向 Amazon A SageMaker I 添加 Git 存储库，让用户能够访问外部资源。指定存储库的名称作为 `code-repository-name` 参数的值。名称必须介于 1 到 63 个字符之间。有效字符为 a-z、A-Z、0-9 和 -（连字符）。另请指定以下内容：
+ 默认分支
+ Git 存储库的 URL
**注意**  
不要在 URL 中提供用户名。按照下一步所 AWS Secrets Manager 述，在中添加登录凭证。
+ S AWS ecrets Manager 密钥的亚马逊资源名称 (ARN)，该密钥包含用于对存储库进行身份验证的凭证，作为参数的值 `git-config`

有关创建和存储密钥的信息，请参阅《AWS Secrets Manager 用户指南》**中的[创建基本密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)。以下命令`MyRespository`在您的 Amazon A SageMaker I 账户中创建一个名为的新存储库，该存储库指向托管于的 Git 存储库`https://github.com/myprofile/my-repo"`。

对于 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 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限，是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记，则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息，请参阅 [提供标记 A SageMaker I 资源的权限](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
[AWS 亚马逊 A SageMaker I 的托管策略](security-iam-awsmanpol.md)授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

在创建 Notebook 实例时，您可以使用 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 A SageMaker I 控制台中创建笔记本实例并关联 Git 存储库**

1. 按照 [为本教程创建 Amazon SageMaker 笔记本实例](gs-setup-working-env.md) 中的说明进行操作。

1. 对于 **Git 存储库**，选择要与笔记本实例关联的 Git 存储库。

   1. 对于**默认存储库**，请选择要用作默认存储库的存储库。 SageMaker AI 将此存储库作为子目录克隆到 Jupyter 启动目录中，网址为。`/home/ec2-user/SageMaker`当您打开笔记本实例时，它会在此存储库中打开。要选择作为资源存储在您账户中的存储库，请从列表中选择其名称。要将新存储库作为资源添加到您的账户中，请选择**将存储库添加到 SageMaker AI（在新窗口中打开添加存储库流程）**，然后按照中的说明进行操作[创建关联 Git 存储库的笔记本实例（控制台）](#nbi-git-create-console)。要克隆未存储在您账户中的公有存储库，请选择**仅将公有 Git 存储库克隆到此笔记本实例**，然后指定该存储库的 URL。

   1. 对于**其他存储库 1**，选择要添加为附加目录的存储库。 SageMaker AI 将此存储库作为子目录克隆到 Jupyter 启动目录中，网址为。`/home/ec2-user/SageMaker`要选择作为资源存储在您账户中的存储库，请从列表中选择其名称。要将新存储库作为资源添加到您的账户中，请选择**将存储库添加到 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 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限，是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记，则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息，请参阅 [提供标记 A SageMaker I 资源的权限](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
[AWS 亚马逊 A SageMaker I 的托管策略](security-iam-awsmanpol.md)授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

要使用 AWS CLI创建笔记本实例并关联 Git 存储库，请使用 `create-notebook-instance` 命令，如下所示：
+ 指定要用作默认存储库的存储库作为 `default-code-repository` 参数的值。Amazon SageMaker AI 将此存储库作为子目录克隆到 Jupyter 启动目录中，网址为。`/home/ec2-user/SageMaker`当您打开笔记本实例时，它会在此存储库中打开。要使用作为资源存储在您的 SageMaker AI 账户中的存储库，请将存储库的名称指定为`default-code-repository`参数的值。要使用未存储在您账户中的存储库，请指定该存储库的 URL 作为 `default-code-repository` 参数的值。
+ 指定最多三个附加存储库作为`additional-code-repositories`参数的值。 SageMaker AI 将此存储库作为子目录克隆到的 Jupyter 启动目录中`/home/ec2-user/SageMaker`，通过将该存储库添加到默认存储库的`.git/info/exclude`目录中，即可将其排除在默认存储库之外。要使用作为资源存储在您的 SageMaker AI 账户中的存储库，请将存储库的名称指定为`additional-code-repositories`参数的值。要使用未存储在您的账户中的存储库，请将存储库 URLs 的指定为`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"
```

**注意**  
如果您使用的 AWS CodeCommit 存储库名称中不包含 SageMaker “”，请将`codecommit:GitPull`和`codecommit:GitPush`权限添加到您作为`role-arn`参数传递给`create-notebook-instance`命令的角色中。有关如何为角色添加权限的信息，请参阅《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 策略，允许包含您的笔记本实例的账户中的用户访问存储库。有关信息，请参阅《*CodeCommit 用户*指南》中的[步骤 1：在 AccountA 中创建仓库访问策略](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account-administrator-a.html#cross-account-create-policy-a)。

1. 在包含 CodeCommit 存储库的 AWS 账户中，创建一个 IAM 角色，并将您在上一步中创建的策略附加到该角色。有关信息，请参阅《*CodeCommit 用户*指南》中的[步骤 2：在 AccountA 中创建存储库访问角色](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account-administrator-a.html#cross-account-create-role-a)。

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 扩展并可供使用。[有关 jupyter-git 扩展名的信息，请参阅 jupyterlab-git。 JupyterLab https://github.com/jupyterlab/](https://github.com/jupyterlab/jupyterlab-git)

当你在中打开笔记本实例时 JupyterLab，你会在左侧菜单中看到与之关联的 git 存储库：

![\[中的示例文件浏览器 JupyterLab。\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/git-notebook.png)


您可以使用 jupyter-git 扩展来直观管理 git，而不是使用命令行：

![\[中的 jupyter-git 扩展的示例。 JupyterLab\]](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/images/jupyterlab-git.png)
