

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

# 创建自定义项目模板
<a name="sagemaker-projects-templates-custom"></a>

**重要**  
自 2024 年 10 月 28 日起，这些 AWS CodeCommit 模板已被移除。对于新项目，可从使用第三方 Git 存储库的可用项目模板中进行选择。有关更多信息，请参阅 [MLOps 项目模板](sagemaker-projects-templates.md)。

如果 SageMaker AI 提供的模板不能满足您的需求（例如，您想在多个阶段或自定义批准步骤中 CodePipeline 进行更复杂的编排），请创建自己的模板。

我们建议首先使用 SageMaker AI 提供的模板来了解如何组织代码和资源，并在此基础上进行构建。为此，在启用管理员对 SageMaker AI 模板的访问权限后，请登录，选择 Portf [https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)olio **s**，然后选择**已导入**。有关 Service Catalog 的信息，请参阅《Service Catalog 用户指南》**中的 [Service Catalog 概述](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)。

创建您自己的项目模板来自定义您的 MLOps 项目。 SageMaker AI 项目模板是服务目录预配置的产品，用于为您的项目配置资源。 MLOps 

要创建自定义项目模板，请完成以下步骤。

1. 创建产品组合。有关信息，请参阅[步骤 3：创建 Service Catalog 产品组合](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-portfolio.html)。

1. 创建产品。产品就是 CloudFormation 模板。您可以创建多个版本的产品。有关信息，请参阅[步骤 4：创建 Service Catalog 产品](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-product.html)。

   要使产品与 Pro SageMaker jects 配合使用，请在产品模板中添加以下参数。

   ```
   SageMakerProjectName:
   Type: String
   Description: Name of the project
   
   SageMakerProjectId:
   Type: String
   Description: Service generated Id of the project.
   ```
**重要**  
我们建议您将 CodeCommit 存储库打包到 SageMaker AI 代码存储库中，这样项目的存储库才能在 VPC 模式下可见。示例模板和所需的附加内容如以下代码示例所示。  
原始（示例）模板：  

   ```
   ModelBuildCodeCommitRepository:
       Type: AWS::CodeCommit::Repository
       Properties:
         # Max allowed length: 100 chars
         RepositoryName: !Sub sagemaker-${SageMakerProjectName}-${SageMakerProjectId}-modelbuild # max: 10+33+15+10=68
         RepositoryDescription: !Sub SageMaker Model building workflow infrastructure as code for the Project ${SageMakerProjectName}
         Code:
           S3:
             Bucket: SEEDCODE_BUCKETNAME
             Key: toolchain/model-building-workflow-v1.0.zip
           BranchName: main
   ```
要在 VPC 模式下添加的附加内容：  

   ```
   SageMakerRepository:
       Type: AWS::SageMaker::CodeRepository
       Properties:
           GitConfig:
               RepositoryUrl: !GetAtt ModelBuildCodeCommitRepository.CloneUrlHttp
               Branch: main
   ```

1. 添加启动约束。启动约束指定 IAM 角色，用户启动产品时 Service Catalog 将代入此角色。有关信息，请参阅[步骤 6：添加启动约束以分配 IAM 角色](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-launchconstraint.html)。

1. 开启产品[https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)以测试模板。如果对模板满意，请继续下一步，在 Studio（或 Studio Classic）中启用模板。

1. 授予您的 Studio（或 Studio Classic）执行角色访问步骤 1 中创建的服务目录组合的权限。使用域执行角色或具有 Studio（或 Studio Classic）访问权限的用户角色。有关向产品组合添加角色的信息，请参阅[步骤 7：向最终用户授予产品组合的访问权限](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-deploy.html)。

1. 要在 Studio（或 Studio Classic）的**组织模板**列表中使用项目模板，请为步骤 2 中创建的服务目录产品创建一个具有以下键和值的标记。
   + **键**：`sagemaker:studio-visibility`
   + **值**：`true`

完成这些步骤后，您组织中的 Studio（或 Studio Classic）用户就可以使用您创建的模板创建项目，方法是按照 [使用 Amazon SageMaker Studio 或 Studio 经典版创建 MLOps 项目](sagemaker-projects-create.md) 中的步骤操作，并在选择模板时选择**组织模板**。

## 使用 Amazon S3 存储桶中的模板
<a name="sagemaker-projects-templates-s3"></a>

您也可以使用存储在 Amazon S3 中的模板创建 SageMaker 项目。

**注意**  
虽然您可以使用中的模板 AWS Service Catalog，但我们建议您将模板存储在 S3 存储桶中，并使用这些模板创建项目。

### 管理员设置
<a name="sagemaker-projects-templates-s3-setup"></a>

在使用 S3 存储桶中的模板创建项目之前，请执行以下步骤。

1. [创建 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)，并将您的模板上传到该存储桶。

1. [在您的 S3 存储桶上设置 CORS 策略以配置访问权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html)。

1. 将以下键值标签添加到模板中，以便 AI 可以看到它们。 SageMaker 

   ```
   sagemaker:studio-visibility : true
   ```

1. [创建域](https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html)。

1.  SageMaker AI 完成您的域名创建后，向该域添加以下键值标签：

   ```
   sagemaker:projectS3TemplatesLocation : s3://<amzn-s3-demo-bucket>
   ```

然后使用 AWS 控制台、Python 或[CreateProject](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateProject.html)和 [UpdateProject](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateProject.html)API 操作从 S3 存储桶内的模板创建或更新 SageMaker 项目。

------
#### [ Studio ]

**创建项目**

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

1. 按照[启动 Amazon SageMaker Studio 中的说明打开 SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html) 控制台。

1. 在左侧导航窗格中，选择**部署**、**项目**、**创建项目**。

1. 选择 “**组织模板**”，然后选择 “**S3 模板**”，查看可供您使用的模板。如果您没有看到预期的模板，请通知您的管理员。

1. 选择要使用的模板，然后选择 “**下一步**”。

1. 输入项目名称、可选描述和其他必填字段。完成后，选择**创建**。

**更新项目**

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

1. 按照[启动 Amazon SageMaker Studio 中的说明打开 SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html) 控制台。

1. 选择要更新的项目。选择 “**操作**”，然后选择 “**更新项目**”。

1. 更新项目时，您可以更新模板参数或模板 URL。完成此操作后，选择**下一步**。

1. 查看汇总表中的项目更新，然后选择**更新**。

------
#### [ Python Boto3 ]

创建 S3 存储桶并上传模板后，您可以使用以下示例创建 SageMaker 项目。

```
sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

response = sagemaker_client.create_project(
    ProjectName='my-custom-project',
    ProjectDescription='SageMaker project with custom CFN template stored in S3',
    TemplateProviders=[{
        'CfnTemplateProvider': {
            'TemplateName': 'CustomProjectTemplate',
            'TemplateURL': f'https://<bucket_name>.s3.us-west-2.amazonaws.com/custom-project-template.yml',
            'Parameters': [
                {'Key': 'ParameterKey', 'Value': 'ParameterValue'}
            ]
        }
    }]
)
print(f"Project ARN: {response['ProjectArn']}")
```

要更新 SageMaker 项目，请参阅以下示例。

```
sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

response = sagemaker_client.update_project(
    ProjectName='my-custom-project',
    ProjectDescription='SageMaker project with custom CFN template stored in S3',
    TemplateProvidersToUpdate=[{
        'CfnTemplateProvider': {
            'TemplateName': 'CustomProjectTemplate',
            'TemplateURL': f'https://<bucket_name>.s3.us-west-2.amazonaws.com/custom-project-template.yml',
            'Parameters': [
                {'Key': 'ParameterKey', 'Value': 'ParameterValue'}
            ]
        }
    }]
)
print(f"Project ARN: {response['ProjectArn']}")
```

------