如何使用 aws cdk 创建 Sagemaker studio 项目

How to create Sagemaker studio project using aws cdk

我正在尝试按照以下步骤使用 aws cdk 创建 sagemaker studio 项目:

创建域 (using this example) 创建用户 (using this example) 创建 jupyter 应用程序 创建项目

创建 jupyter 应用的代码:


def __init__(self, scope: Construct,
             construct_id: str, *,
             app_name: str,
             app_type: str,
             domain_id: str,
             user_profile_name: str,
             depends_on=None, **kwargs) -> None:
    super().__init__(scope, construct_id)

    sagemaker_jupyter_app = sg.CfnApp(self, construct_id,
                                      app_name=app_name,
                                      app_type=app_type,
                                      domain_id=domain_id,
                                      user_profile_name=user_profile_name
                                      )
    sagemaker_jupyter_app.add_depends_on(depends_on_user_creation)

创建项目代码:


def __init__(self, scope: Construct,
             construct_id: str, *,
             project_name: str,
             project_description: str,
             product_id: str,
             depends_on=None,
             **kwargs) -> None:
    super().__init__(scope, construct_id)

    sagemaker_studio_project = sg.CfnProject(self, construct_id,
                                             project_name=project_name,
                                             service_catalog_provisioning_details={
                                                 "ProductId": "prod-7tjedn5dz4jrw"
                                             },
                                             project_description=project_description
                                             )

域、用户、jupyter 应用程序都创建成功。问题来自项目。 以下是错误:

Resource handler returned message: "Product prod-7tjedn5dz4jrw does not exist or access was denied (Service: SageMaker, Status Code: 400, Request ID: 768116aa-e77b-4691-a972-38b83093fdc4)" (RequestToken: 45ca2a0c-3f03-e3e0-f29d-d9443ff4dfc1, HandlerErrorCode: GeneralServiceException)

我 运行 此代码来自具有 SagemakerFullAccess 的 ec2 实例 我还尝试将 SagemakerFullAccess 执行角色附加到项目中……但出现了同样的错误。 我还在我的域中附加了以下政策:

请确保 Studio 域上的 SageMaker 执行角色有权访问 SageMaker 项目。您可以通过导航到 ServiceCatalog -> Portfolios -> Imported -> Amazon SageMaker Solutions and ML Ops products -> Groups, roles, and users 来检查。

在此选项卡下,您应该会看到您的域的执行角色。如果没有,请添加它,然后尝试创建项目。

基本上这是一个与 IAM 相关的问题。 运行 cdk 程序需要使用命令 cdk bootstrap 引导它 在 运行ning 之后,此命令 cdk 创建了一堆角色,其中一个角色将与 cloudformation 的执行角色相关。像

cdk-serialnumber-cfn-exec-role-Id-region

现在这个角色被 cloudformation 用于 运行 堆栈。

从控制台使用 sagemaker 会自动添加与 domain/user 关联的角色

ServiceCatalog -> Portfolios -> Imported -> Amazon SageMaker Solutions and ML Ops products -> Groups, roles, and users

这就是为什么可以从控制台访问产品 ID 的原因。

将 cdk bootsrap 创建的角色添加到上述路径后,我能够 运行 我的堆栈。