

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

# 附上自定义 SageMaker 图片
<a name="rstudio-byoi-attach"></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 资源的权限已经包括在创建这些资源时添加标签的权限。

本指南介绍如何使用 A SageMaker I 控制台或 AWS Command Line Interface (AWS CLI) 将自定义 RStudio 图像附加到您的 SageMaker Amazon AI 域。

要使用自定义 SageMaker 映像，您必须将自定义 RStudio 图像附加到您的网域。当您附加图像版本时，它会出现在 RStudio 启动器中，并显示在 **“选择图像”** 下拉列表中。您可以使用下拉列表来更改使用的图片 RStudio。

可以附加的映像版本数量是有限的。达到限制后，必须先分离一个版本才能附加映像的另一个版本。

**Topics**
+ [

## 使用管理控制台将映像版本附加到域
](#rstudio-byoi-attach-console)
+ [

## 使用将现有图像版本附加到您的网域 AWS CLI
](#rstudio-byoi-attach-cli)

## 使用管理控制台将映像版本附加到域
<a name="rstudio-byoi-attach-console"></a>

您可以使用 SageMaker AI 控制台的控制面板将自定义 SageMaker 图像版本附加到您的网域。您也可以创建自定义 SageMaker 映像和图像版本，然后将该版本附加到您的域中。

**附加现有映像**

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

1. 在左侧导航窗格中，选择**管理员配置**。

1. 在**管理员配置**下，选择**域**。

1. 选择所需的域。

1. 选择**环境**。

1. 在**附加到域名的自定义 SageMaker Studio Classic 图像****下，选择附加图片**。

1. 对于**映像源**，选择**现有映像**或**新映像**。

   如果您选择 “**现有图片**”，请从 Amazon SageMaker 图片库中选择一张图片。

   如果选择**新映像**，请提供 Docker 映像的 Amazon ECR 注册表路径。路径必须与域位于相同 AWS 区域 中。Amazon ECR 存储库必须与您的域名位于同一个账户中，或者必须启用 SageMaker AI 的跨账户权限。

1. 从列表中选择现有映像。

1. 从列表中选择映像的版本。

1. 选择**下一步**。

1. 输入**映像名称**、**映像显示名称**和**描述**的值。

1. 选择 IAM 角色。有关更多信息，请参阅 [创建自定义 RStudio 镜像](rstudio-byoi-create.md)。

1. （可选）为映像添加标签。

1. （可选）选择**添加新标签**，然后添加配置标签。

1. 在 “**图像类型**” 中，选择 “**RStudio图像**”。

1. 选择**提交**。

等待映像版本附加到域。版本附加后，将显示在**自定义映像**列表中，并短暂高亮显示。

## 使用将现有图像版本附加到您的网域 AWS CLI
<a name="rstudio-byoi-attach-cli"></a>

可使用 AWS CLI，通过两种方法将映像版本附加到域。第一种方法是，使用附加的版本创建一个新域。此方法更简单，但是必须指定创建域所需的 Amazon Virtual Private Cloud (Amazon VPC) 信息和执行角色。

如果您已经加入域，则可以使用第二种方法将映像版本附加到当前域。在这种情况下，您无需指定 Amazon VPC 信息和执行角色。附加版本后，删除您域中的所有应用程序并重新启动 RStudio。

### 将 SageMaker 图像附加到新域名
<a name="rstudio-byoi-cli-attach-new-domain"></a>

要使用此方法，必须指定附加了[AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)策略的执行角色。

使用以下步骤创建域并附加自定义 A SageMaker I 镜像：
+ 获取您的默认 VPC ID 和子网 IDs。
+ 为域创建配置文件，该文件指定映像。
+ 使用配置文件创建域。

**将自定义 SageMaker 图片添加到您的网域**

1. 获取默认 VPC ID。

   ```
   aws ec2 describe-vpcs \
       --filters Name=isDefault,Values=true \
       --query "Vpcs[0].VpcId" --output text
   ```

   响应：

   ```
   vpc-xxxxxxxx
   ```

1.  IDs 使用上一步中的 VPC ID 获取您的默认子网。

   ```
   aws ec2 describe-subnets \
       --filters Name=vpc-id,Values=<vpc-id> \
       --query "Subnets[*].SubnetId" --output json
   ```

   响应：

   ```
   [
       "subnet-b55171dd",
       "subnet-8a5f99c6",
       "subnet-e88d1392"
   ]
   ```

1. 创建一个名为 `create-domain-input.json` 的配置文件。插入之前步骤中的 VPC ID IDs `ImageName`、子网和`AppImageConfigName`。由于未指定 `ImageVersionNumber`，因此将使用映像的最新版本，也是本例中唯一的版本。执行角色必须满足[满足先决条件](rstudio-byoi-prerequisites.md)中的要求。

   ```
   {
     "DomainName": "domain-with-custom-r-image",
     "VpcId": "<vpc-id>",
     "SubnetIds": [
       "<subnet-ids>"
     ],
     "DomainSettings": {
       "RStudioServerProDomainSettings": {
         "DomainExecutionRoleArn": "<execution-role>"
       }
     },
     "DefaultUserSettings": {
       "ExecutionRole": "<execution-role>",
       "RSessionAppSettings": {
         "CustomImages": [
           {
            "AppImageConfigName": "rstudio-custom-config",
            "ImageName": "rstudio-custom-image"
           }
         ]
        }
     },
     "AuthMode": "IAM"
   }
   ```

1. 使用所附的自定义 SageMaker 图片创建域名。

   ```
   aws sagemaker create-domain \
       --cli-input-json file://create-domain-input.json
   ```

   响应：

   ```
   {
       "DomainArn": "arn:aws:sagemaker:region:acct-id:domain/domain-id",
       "Url": "https://domain-id.studio.region.sagemaker.aws/..."
   }
   ```

### 将 SageMaker 图像附加到现有网域
<a name="rstudio-byoi-cli-attach-current-domain"></a>

此方法假定您已加入域。有关更多信息，请参阅 [亚马逊 SageMaker AI 域名概述](gs-studio-onboard.md)。

**注意**  
您必须删除域中的所有应用程序，才能使用新的映像版本更新该域。有关删除应用程序的信息，请参阅[删除亚马逊 A SageMaker I 域名](gs-studio-delete-domain.md)。

使用以下步骤将 SageMaker 图片添加到您当前的域名。
+ `DomainID`从 A SageMaker I 控制台获取。
+ 使用 `DomainID` 获取域的 `DefaultUserSettings`。
+ 将 `ImageName` 和 `AppImageConfig` 作为 `CustomImage` 添加到 `DefaultUserSettings`。
+ 更新域以包含自定义映像。

**将自定义 SageMaker 图片添加到您的网域**

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

1. 在左侧导航窗格中，选择**管理员配置**。

1. 在**管理员配置**下，选择**域**。

1. 选择所需的域。

1. 选择**域设置**。

1. 在**常规设置**下，找到**域 ID**。ID 的格式如下：`d-xxxxxxxxxxxx`。

1. 使用域 ID 获取域的描述。

   ```
   aws sagemaker describe-domain \
       --domain-id <d-xxxxxxxxxxxx>
   ```

   响应：

   ```
   {
       "DomainId": "d-xxxxxxxxxxxx",
       "DefaultUserSettings": {
         "KernelGatewayAppSettings": {
           "CustomImages": [
           ],
           ...
         }
       }
   }
   ```

1. 将响应的 `DefaultUserSettings` 部分保存到名为 `update-domain-input.json` 的文件中。

1. 插入前面步骤中的 `ImageName` 和 `AppImageConfigName` 作为自定义映像。由于未指定 `ImageVersionNumber`，因此将使用映像的最新版本，也是本例中唯一的版本。

   ```
   {
       "DefaultUserSettings": {
           "RSessionAppSettings": { 
              "CustomImages": [ 
                 { 
                    "ImageName": "rstudio-custom-image",
                    "AppImageConfigName": "rstudio-custom-config"
                 }
              ]
           }
       }
   }
   ```

1. 使用域 ID 和默认用户设置文件更新域。

   ```
   aws sagemaker update-domain \
       --domain-id <d-xxxxxxxxxxxx> \
       --cli-input-json file://update-domain-input.json
   ```

   响应：

   ```
   {
       "DomainArn": "arn:aws:sagemaker:region:acct-id:domain/domain-id"
   }
   ```

1. 删除 `RStudioServerPro` 应用程序。您必须重新启动`RStudioServerPro`域共享应用程序，La RStudio uncher UI 才能获得最新的更改。

   ```
   aws sagemaker delete-app \
       --domain-id <d-xxxxxxxxxxxx> --user-profile-name domain-shared \
       --app-type RStudioServerPro --app-name default
   ```

1. 创建新的 `RStudioServerPro` 应用程序。必须使用 AWS CLI创建此应用程序。

   ```
   aws sagemaker create-app \
       --domain-id <d-xxxxxxxxxxxx> --user-profile-name domain-shared \
       --app-type RStudioServerPro --app-name default
   ```