

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

# 创建自定义 RStudio 镜像
<a name="rstudio-byoi-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 资源的权限已经包括在创建这些资源时添加标签的权限。

本主题介绍如何使用 SageMaker AI 控制台和创建自定义 RStudio 映像 AWS CLI。如果使用 AWS CLI，则必须从本地计算机上运行这些步骤。在 Amazon SageMaker Studio Classic 中，以下步骤不起作用。

创建图像时， SageMaker AI 还会创建初始图像版本。映像版本代表 [Amazon Elastic Container Registry (ECR)](https://console.aws.amazon.com/ecr/) 中的容器映像。容器镜像必须满足要求才能在中使用 RStudio。有关更多信息，请参阅 [自定义 RStudio 图像规格](rstudio-byoi-specs.md)。

有关在本地测试图像和解决常见问题的信息，请参阅 [SageMaker Studio 自定义图像样本存储库](https://github.com/aws-samples/sagemaker-studio-custom-image-samples/blob/main/DEVELOPMENT.md)。

**Topics**
+ [

## 向亚马逊 ECR 添加与 A SageMaker I 兼容的 RStudio Docker 容器镜像
](#rstudio-byoi-sdk-add-container-image)
+ [

## 从控制台创建 SageMaker 镜像
](#rstudio-byoi-create-console)
+ [

## 从中创建图像 AWS CLI
](#rstudio-byoi-create-cli)

## 向亚马逊 ECR 添加与 A SageMaker I 兼容的 RStudio Docker 容器镜像
<a name="rstudio-byoi-sdk-add-container-image"></a>

可使用以下步骤将 Docker 容器映像添加到 Amazon ECR：
+ 创建 Amazon ECR 存储库。
+ 向 Amazon ECR 进行身份验证。
+ 生成与 A SageMaker I 兼容的 RStudio Docker 镜像。
+ 将映像推送到 Amazon ECR 存储库。

**注意**  
Amazon ECR 存储库必须与您的域名位于同一个 AWS 区域 存储库中。

**构建 Docker 映像并将其添加到 Amazon ECR**

1. 使用 AWS CLI创建一个 Amazon ECR 存储库。要使用 Amazon ECR 控制台创建存储库，请参阅[创建存储库](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)。

   ```
   aws ecr create-repository \
       --repository-name rstudio-custom \
       --image-scanning-configuration scanOnPush=true
   ```

   响应：

   ```
   {
       "repository": {
           "repositoryArn": "arn:aws:ecr:us-east-2:acct-id:repository/rstudio-custom",
           "registryId": "acct-id",
           "repositoryName": "rstudio-custom",
           "repositoryUri": "acct-id.dkr.ecr.us-east-2.amazonaws.com/rstudio-custom",
           ...
       }
   }
   ```

1. 使用 `create-repository` 命令作为响应返回的存储库 URI，向 Amazon ECR 进行身份验证。确保 Docker 应用程序正在运行。有关更多信息，请参阅[注册表身份验证](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)。

   ```
   aws ecr get-login-password | \
       docker login --username AWS --password-stdin <repository-uri>
   ```

   响应：

   ```
   Login Succeeded
   ```

1. 构建 Docker 映像。从包含 Dockerfile 的目录中运行以下命令。

   ```
   docker build .
   ```

1. 使用唯一的标签标记构建的映像。

   ```
   docker tag <image-id> "<repository-uri>:<tag>"
   ```

1. 将容器映像推送到 Amazon ECR 存储库。有关更多信息，请参阅[ImagePush](https://docs.docker.com/engine/api/v1.40/#operation/ImagePush)和[推送图片](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)。

   ```
   docker push <repository-uri>:<tag>
   ```

   响应：

   ```
   The push refers to repository [<account-id>.dkr.ecr.us-east-2.amazonaws.com/rstudio-custom]
   r: digest: <digest> size: 3066
   ```

## 从控制台创建 SageMaker 镜像
<a name="rstudio-byoi-create-console"></a>

**创建镜像**

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

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

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

1. 在**自定义映像**页面上，选择**创建映像**。

1. 对于**映像源**，请输入 Amazon ECR 中容器映像的注册表路径。路径格式如下：

   ` acct-id.dkr.ecr.region.amazonaws.com/repo-name[:tag] or [@digest] `

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

1. 在**映像属性**下，输入以下内容：
   + 映像名称 - 该名称必须是您的账户在当前 AWS 区域中的唯一名称。
   + （可选）映像显示名称 – 域用户界面中显示的名称。如果未提供，则显示 `Image name`。
   + （可选）描述 – 对映像的描述。
   + IAM 角色-该角色必须附加[AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)策略。可使用下拉菜单选择以下选项之一：
     + 创建新角色 – 指定您希望笔记本用户访问的任何其他 Amazon Simple Storage Service (Amazon S3) 存储桶。如果您不希望允许访问其他存储桶，请选择**无**。

       SageMaker AI 将`AmazonSageMakerFullAccess`策略附加到该角色上。该角色允许笔记本用户访问复选标记旁边列出的 Amazon S3 存储桶。
     + 输入自定义 IAM 角色 ARN – 输入 IAM 角色的 Amazon 资源名称 (ARN)。
     + 使用现有角色 – 从列表中选择一个现有角色。
   + （可选）映像标签 – 选择**添加新标签**。最多可以添加 50 个标签。可以使用 SageMaker AI 控制台或 AI `Search` AP SageMaker I 搜索标签。

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

1. 选择**提交**。

新映像将显示在**自定义映像**列表中，并短暂高亮显示。成功创建映像后，您可以选择映像名称查看其属性，或选择**创建版本**创建另一个版本。

**创建另一个映像版本**

1. 在映像所在行中选择**创建版本**。

1. 对于**映像源**，请输入 Amazon ECR 映像的注册表路径。该图像不应与之前版本的 SageMaker AI 图像中使用的图像相同。

要在中使用自定义图片 RStudio，必须将其附加到您的域中。有关更多信息，请参阅 [附上自定义 SageMaker 图片](rstudio-byoi-attach.md)。

## 从中创建图像 AWS CLI
<a name="rstudio-byoi-create-cli"></a>

本节介绍如何使用创建自定义 Amazon SageMaker 图片 AWS CLI。

使用以下步骤创建 SageMaker 镜像：
+ 创建`Image`。
+ 创建`ImageVersion`。
+ 创建配置文件。
+ 创建`AppImageConfig`。

**创建 SageMaker 图像实体**

1. 创建 SageMaker 镜像。角色 ARN 必须至少附加 `AmazonSageMakerFullAccessPolicy` 策略。

   ```
   aws sagemaker create-image \
       --image-name rstudio-custom-image \
       --role-arn arn:aws:iam::<acct-id>:role/service-role/<execution-role>
   ```

   响应：

   ```
   {
       "ImageArn": "arn:aws:sagemaker:us-east-2:acct-id:image/rstudio-custom-image"
   }
   ```

1. 根据 SageMaker 镜像创建镜像版本。传递您在将映像推送到 Amazon ECR 时所选择的唯一标签值。

   ```
   aws sagemaker create-image-version \
       --image-name rstudio-custom-image \
       --base-image <repository-uri>:<tag>
   ```

   响应：

   ```
   {
       "ImageVersionArn": "arn:aws:sagemaker:us-east-2:acct-id:image-version/rstudio-image/1"
   }
   ```

1. 检查映像版本是否创建成功。

   ```
   aws sagemaker describe-image-version \
       --image-name rstudio-custom-image \
       --version 1
   ```

   响应：

   ```
   {
       "ImageVersionArn": "arn:aws:sagemaker:us-east-2:acct-id:image-version/rstudio-custom-image/1",
       "ImageVersionStatus": "CREATED"
   }
   ```
**注意**  
如果响应为 `"ImageVersionStatus": "CREATED_FAILED"`，则响应还包括失败原因。权限问题是导致失败的常见原因。您也可以查看您的 Amazon CloudWatch 日志。日志组的名称为 `/aws/sagemaker/studio`。日志流的名称为 `$domainID/$userProfileName/KernelGateway/$appName`。

1. 创建一个名为 `app-image-config-input.json` 的配置文件。应用程序映像配置用于配置将映像作为 Kernel SageMaker Gateway 应用程序运行。

   ```
   {
       "AppImageConfigName": "rstudio-custom-config"
   }
   ```

1.  AppImageConfig 使用您在上一步中创建的文件创建。

   ```
   aws sagemaker create-app-image-config \
       --cli-input-json file://app-image-config-input.json
   ```

   响应：

   ```
   {
       "AppImageConfigArn": "arn:aws:sagemaker:us-east-2:acct-id:app-image-config/r-image-config"
   }
   ```