SageMaker模型手动审批通过后自动触发Lambda Function的方法
配置步骤(基于AWS原生事件链路,无额外自定义组件)
整个链路不需要写额外的轮询逻辑,靠AWS原生事件驱动即可实现,具体配置如下:
- 首先统一审批入口:把训练完成的模型统一注册到SageMaker Model Registry的对应模型包组下,将模型版本初始状态设为
Pending Approval,你核验指标后的手动审批操作,直接在Model Registry控制台将对应模型版本的审批状态修改为Approved即可,这个状态变更操作会自动生成可被捕获的标准化事件。
如果你当前的手动审批是跑在Step Functions工作流里的人工审批节点,也可以直接复用Step Functions的审批通过事件,不需要强行迁移到Model Registry的审批能力。
配置EventBridge事件规则捕获审批通过信号:
在EventBridge控制台创建新规则,事件源选择AWS默认事件源,事件模式匹配以下配置,替换成你自己的模型包组名即可:{ "source": ["aws.sagemaker"], "detail-type": ["SageMaker Model Package State Change"], "detail": { "ModelPackageGroupName": ["你的模型包组名称"], "ModelApprovalStatus": ["Approved"] } }如果用Step Functions做审批,就把事件源改成
aws.states,detail-type选Step Functions Execution Status Change,额外过滤执行状态为SUCCEEDED、且对应工作流为你的模型审批工作流即可。绑定Lambda为事件规则的目标:
规则创建到目标配置步骤时,直接选择你已经部署好的跨账号复制Artifact的Lambda函数作为目标。这里要配齐两类权限避免触发失败:- 给EventBridge规则自动生成的执行角色添加
lambda:InvokeFunction权限,可调用资源限定为你的复制Lambda的ARN,避免权限过大。 - 确认Lambda的执行角色已经配齐两类访问权限:一是有读取SageMaker模型元数据、读取源S3桶中模型artifact的权限;二是有跨账号写入目标AWS账号S3桶的权限,同时目标账号的S3桶策略要给该Lambda执行角色开放
s3:PutObject、s3:ListBucket权限,不然复制流程会报403错误。
- 给EventBridge规则自动生成的执行角色添加
调整Lambda的入参解析逻辑:
EventBridge触发Lambda时,会把完整的事件详情作为入参传给Lambda,你只需要在Lambda代码里从event.detail.ModelPackageArn字段拿到审批通过的模型版本ARN,调用SageMaker的DescribeModelPackage接口就能拿到模型artifact对应的S3路径,直接复用你现有的跨账号复制逻辑即可,不需要额外维护参数传递链路。
常见避坑点
- 不要配置S3对象创建事件作为Lambda触发源:训练完成后模型artifact就已经写入S3了,这时候还没走审批流程,会导致提前触发复制逻辑。
- 建议给EventBridge规则配置死信队列:如果Lambda调用失败,事件会被写入死信队列,不会丢消息,方便后续排查重试。
- 可以在Lambda逻辑开头加一层状态校验:拿到模型版本ARN后先重新调用接口查询当前审批状态,确认是
Approved再执行复制,避免事件乱序导致的误操作。
内容的提问来源于stack exchange,提问作者Qinjie
相关产品推荐
相关产品推荐

