产品AWS Machine Learning·原文 2026年10月24日

AWS发布CDK构造,自动处理SageMaker端点更新时的自动扩缩注销与重注册

AWS博客介绍一个可复用CDK构造,用三个CloudFormation自定义资源在端点更新前后按顺序注销、注册可扩缩目标和扩缩策略,让端点配置与扩缩参数在一次部署中同时更新。

AI解读:AWS博客作者Lauren Eterno说明了问题:SageMaker AI实时端点已注册Application Auto Scaling后,通过CloudFormation或CDK修改实例类型、实例数量或环境变量会导致部署失败。SageMaker AI要求在移除端点或更新实例类型前,先向Application Auto Scaling注销该变体。

手动用AWS CLI注销可扩缩目标后只改端点配置,部署会成功但CloudFormation不会重新注册扩缩,端点将在无扩缩状态下运行且不报错;若同时改扩缩参数,则会因可扩缩目标不存在而失败,回滚也会失败(UPDATE_ROLLBACK_FAILED),需在控制台手动恢复。

给出的方案是用一个CDK构造替换原生的ScalableTarget和ScalingPolicy资源,改为三个自定义资源,并用CDK的node.add_dependency固定顺序:先注销可扩缩目标,再由CDK更新端点,端点达到InService后注册可扩缩目标,最后在目标可查询后附加目标跟踪扩缩策略。

该方案要求端点和扩缩参数放在同一份ConfigHash中,任一变化都会触发整条编排。注册可扩缩目标的provider总超时为 1 小时,附加策略为 15 分钟,检查间隔 30 秒,均以异步is_complete轮询实现。

按文章说明,部署后的栈包含 3 个自定义资源、2 个Step Functions状态机和 12 个Lambda函数,其中 5 个承载构造自身处理逻辑,7 个由provider框架生成。示例代码在GitHub仓库sample-sagemaker-endpoint-autoscaling。

AWS机器学习博客发布文章,介绍一个可复用的AWS CDK构造,用于在更新SageMaker AI实时端点时自动完成Application Auto Scaling的注销与重注册。文章作者Lauren Eterno称,使用该构造可在一次部署中同时更新端点配置和扩缩参数,无需人工介入。

文章描述的是AWS官方博客给出的方案与实现说明,涉及的效果以该示例构造的部署流程为准;文中未给出该构造在生产环境的运行数据或与其他方案的对比结果。

问题:端点更新与扩缩注册的冲突

文章指出,当SageMaker AI端点已注册Application Auto Scaling,通过CloudFormation或CDK修改端点配置(实例类型、实例数量或环境变量)时,SageMaker AI会拒绝更新,报错要求该变体先作为可扩缩目标从Application Auto Scaling注销,然后才能移除或更新实例类型。

若改用AWS CLI手动注销可扩缩目标,再只改端点配置重新部署,部署会成功,但CloudFormation不会重新注册扩缩:模板中的扩缩参数未变化,CloudFormation不会重新注册可扩缩目标或重新应用扩缩策略,端点会在没有扩缩的情况下运行,且没有错误提示。

若手动注销后再修改扩缩参数,CloudFormation会尝试更新已不存在的ScalableTarget资源并报错;文章称此场景下回滚也会失败(UPDATE_ROLLBACK_FAILED),栈进入损坏状态,需在CloudFormation控制台手动干预。

方案:三个自定义资源按依赖顺序编排

该构造把原生的AWS::ApplicationAutoScaling::ScalableTarget与AWS::ApplicationAutoScaling::ScalingPolicy资源替换为三个CloudFormation自定义资源,通过CDK的node.add_dependency明确顺序:

文章说明,注册可扩缩目标要等端点达到InService,附加扩缩策略要等可扩缩目标可查询,因此这两步采用provider的异步完成模式:on_event立即返回,is_complete每 30 秒被重新调用一次,直到就绪检查通过。注册的总超时为 1 小时,附加策略为 15 分钟,从而不受单次Lambda调用超时限制。

每个自定义资源上的ConfigHash属性用于在任一配置值变化时触发Lambda重新执行。端点和扩缩参数定义在一起,因为同一个ConfigHash驱动整条扩缩编排。

  • 注销:在端点更新开始前移除可扩缩目标;首次部署时尚不存在可扩缩目标,处理程序捕获ObjectNotFoundException后继续。
  • 端点更新:由CDK正常更新端点资源,切换到新的端点配置。
  • 注册可扩缩目标:等待端点达到InService后注册。
  • 附加扩缩策略:等待可扩缩目标可查询后,应用目标跟踪扩缩策略。

部署形态与使用方式

文章称,尽管构造只定义三个自定义资源,实际部署的栈资源更多。每个自定义资源由一个CDK cr.Provider支撑,provider框架会生成自己的辅助Lambda函数:同步provider(注销)增加一个框架函数;异步provider(注册可扩缩目标、附加扩缩策略)各增加onEvent、isComplete、onTimeout三个函数,外加一个驱动等待逻辑的Step Functions状态机。

最终栈包含 3 个自定义资源、2 个Step Functions状态机和 12 个Lambda函数;其中 5 个承载构造自身的处理代码,其余 7 个由provider框架生成。文章提示这些函数不需要用户编写和维护,但审查部署资源时应计入。

使用方式上,示例仓库sample-sagemaker-endpoint-autoscaling提供可直接部署的示例栈;已有SageMaker AI资源的CDK项目可将sagemaker_autoscaling/constructs/目录复制进项目,并在端点资源旁添加该构造。示例配置中端点为ml.m5.large、初始实例数 1,扩缩最小 1、最大 10、目标值 100、缩容冷却 600 秒、扩容冷却 120 秒。

运行前提包括:具备SageMaker AI、Lambda、IAM、Application Auto Scaling和CloudWatch权限的AWS账户,已安装AWS CDK v2,Python 3.12或更高版本,使用uv管理依赖,以及位于S3的模型产物和ECR容器镜像或SageMaker AI内置算法容器。文章还给出用describe-scalable-targets和describe-scaling-policies校验注册结果、修改实例类型后重新部署验证的命令示例。

信息来源

更多

新闻专题
外观