如何使用 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 执行角色附加到项目中……但出现了同样的错误。
我还在我的域中附加了以下政策:
- AmazonSageMakerAdmin-ServiceCatalogProductsServiceRolePolicy
请确保 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 创建的角色添加到上述路径后,我能够 运行 我的堆栈。
我正在尝试按照以下步骤使用 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 执行角色附加到项目中……但出现了同样的错误。 我还在我的域中附加了以下政策:
- AmazonSageMakerAdmin-ServiceCatalogProductsServiceRolePolicy
请确保 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 创建的角色添加到上述路径后,我能够 运行 我的堆栈。