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



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

创建域(使用此示例)创建用户(使用此示例)创建jupyter应用创建项目

创建jupyter app的代码:


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应用程序都成功创建。问题来自于项目。下面是错误:

资源处理程序返回消息:"Product prod-7tjedn5dz4jrw does不存在或访问被拒绝(服务:SageMaker,状态码:400,请求ID: 768116aa-e77b-4691-a972-38b83093fdc4)"(RequestToken:45 ca2a0c-3f03-e3e0-f29d-d9443ff4dfc1 HandlerErrorCode:GeneralServiceException)

我从具有SagemakerFullAccess的ec2实例运行此代码我还尝试附加SagemakerFullAccess执行角色与项目…但得到了相同的错误。我还将以下策略附加到我的域名:

  • AmazonSageMakerAdmin-ServiceCatalogProductsServiceRolePolicy

请确保Studio域中的SageMaker执行角色有权访问SageMaker项目。您可以通过导航到ServiceCatalog ->投资组合→进口→Amazon SageMaker Solutions和ML Ops产品->组、角色和用户

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

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

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

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

在控制台使用sagemaker自动添加与

域/用户关联的角色

ServiceCatalog→投资组合→进口→Amazon SageMaker Solutions和ML Ops产品->组、角色和用户

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

将cdk bootstrap创建的角色添加到上述路径后,我就可以运行堆栈了。

最新更新