You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CDK Python部署Sagemaker模型:角色依赖与类型错误求助

解决CDK部署Sagemaker模型时的角色不存在与依赖添加错误问题

问题根源

  • 代码中先创建Sagemaker模型,后定义IAM角色,导致CDK生成部署模板时,模型资源会优先于角色被创建,触发“角色不存在”的错误。
  • 调用add_depends_on时传入的Role是L2构造对象,而该方法要求传入CfnResource类型的底层资源,因此报错。

解决方案

方案1:调整资源创建顺序(推荐)

CDK会自动根据资源间的引用关系生成依赖,只要先创建IAM角色,再创建Sagemaker模型,就能自动保证角色先被创建,无需手动添加依赖。

修正后的代码:

# 先创建IAM角色
model_role = Role(
    self,
    f"{construct_id}_role",
    assumed_by=ServicePrincipal("sagemaker.amazonaws.com"),
)
model_role.add_to_policy(PolicyStatement(
    resources=["*"],
    actions= [
        "cloudwatch:PutMetricData",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:CreateLogGroup",
        "logs:DescribeLogStreams",
        "s3:GetObject",
        "s3:ListBucket",
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
    ]
))

# 再创建Sagemaker模型,引用已创建的角色ARN
sagemaker_model = aws_sagemaker.CfnModel(
    self,
    model_name,
    execution_role_arn=model_role.role_arn,
    model_name=model_name,
    primary_container=sagemaker_primary_container_definition,
)

方案2:手动添加依赖(仅特殊场景使用)

如果因某些原因无法调整创建顺序,可通过角色的底层CfnResource对象添加依赖:

# 创建角色后,获取其底层CfnRole资源
cfn_model_role = model_role.node.default_child

# 给Sagemaker模型添加依赖
sagemaker_model.add_depends_on(cfn_model_role)

说明

  • 优先使用方案1,CDK的自动依赖管理能避免手动维护依赖带来的失误。
  • node.default_child用于获取L2构造对应的底层Cfn资源,是CDK中处理L2构造与Cfn资源依赖的标准方式。

内容的提问来源于stack exchange,提问作者Sazzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:10:46